今日目标
- 掌握Docker-compose安装Redis哨兵集群
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离
- 主节点: 可以对Redis实现读写操作
- 从节点: 只可以对Redis实现读操作
但是,当master节点宕机后,我们就不能写数据到Redis,所以需要搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群
1.Redis哨兵
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。
哨兵的结构如图:
图片
共包含6个节点,一个主两个从和三个哨兵。这里我们会在同一台虚拟机中开启6个redis实例,模拟主从集群,信息如下:
IP |
PORT |
角色 |
192.168.150.102 |
6380 |
master |
192.168.150.102 |
6381 |
slave |
192.168.150.102 |
6382 |
slave |
192.168.150.102 |
26379 |
sentinel |
192.168.150.102 |
26380 |
sentinel |
192.168.150.102 |
26381 |
sentinel |
哨兵的作用如下:
- 监控:Sentinel 会不断检查您的master和slave是否按预期工作
- 自动故障恢复:如果master故障Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主
- 通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时会将最新信息推送给Redis的客户端
2. 准备实例和配置
要在同一台虚拟机开启6个实例,必须准备6份不同的配置文件和目录,配置文件所在目录也就是工作目录。 确保下面的配置已经更改(位置也别错)
# master
mkdir -p /redis-master-slave-sentinel/redis/master/config /redis-master-slave-sentinel/redis/master/data
cd /redis-master-slave-sentinel/redis/master/config
curl -O -L http://download.redis.io/releases/redis-6.0.20.tar.gz
tar -zxvf redis-6.0.20.tar.gz
cp /redis-master-slave-sentinel/redis/master/config/redis-6.0.20/redis.conf /redis-master-slave-sentinel/redis/master/config/redis.conf
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /redis-master-slave-sentinel/redis/master/config/redis.conf
# slave-1
mkdir -p /redis-master-slave-sentinel/redis/slave-1/config /redis-master-slave-sentinel/redis/slave-1/data
cd /redis-master-slave-sentinel/redis/slave-1/config/
cp /redis-master-slave-sentinel/redis/master/config/redis-6.0.20/redis.conf /redis-master-slave-sentinel/redis/slave-1/config/redis.conf
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /redis-master-slave-sentinel/redis/slave-1/config/redis.conf
# slave-2
mkdir -p /redis-master-slave-sentinel/redis/slave-2/config /redis-master-slave-sentinel/redis/slave-2/data
cd /redis-master-slave-sentinel/redis/slave-2/config/
cp /redis-master-slave-sentinel/redis/master/config/redis-6.0.20/redis.conf /redis-master-slave-sentinel/redis/slave-2/config/redis.conf
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /redis-master-slave-sentinel/redis/slave-2/config/redis.conf
#redis-sentinel-1
mkdir -p /redis-master-slave-sentinel/sentinel/redis-sentinel-1 /redis-master-slave-sentinel/sentinel/redis-sentinel-1/s1
cd /redis-master-slave-sentinel/sentinel/redis-sentinel-1
cat >> /redis-master-slave-sentinel/sentinel/redis-sentinel-1/sentinel.conf /redis-master-slave-sentinel/sentinel/redis-sentinel-2/sentinel.conf /redis-master-slave-sentinel/sentinel/redis-sentinel-3/sentinel.conf