一、环境准备
Redis一主二从Sentinel监控配置如下:
- 3个Sentinel实例(奇数个,选择Leader)
- Redis服务(一主二)。
服务器资源有限的朋友们,可以通过VMware启动虚拟机的方式来构建环境,关于如何使用VMware安装虚拟机,网络配置、克隆、单实例Redis的安装在我的博文中都有保姆级教程,需要的请自取。
资源清单:
IP地址 |
节点角色 |
端口 |
192.168.211.104 |
Redis Master/ Sentinel |
6379/26379 |
192.168.211.105 |
Redis Slave/ Sentinel |
6379/26379 |
192.168.211.106 |
Redis Slave/ Sentinel |
6379/26379 |
关闭防火墙:
由于是自己学习使用,我们不针对专门的端口最策略(在公司这一块有专门的运维同时来做),这里我们直接关闭服务器的防火墙(三台都需要关闭)
systemctl status firewalld.service # 查看防火墙状态
systemctl stop firewalld.service # 停止防火墙(重启后会失效)
systemctl disable firewalld.service # 禁止开机启动
效果图,不会的朋友可以参考一下
整体架构简图
二、配置一主二从
这里的Redis的主节点是192.168.211.104,所以我们在192.168.211.105和192.168.211.106的Redis配置文件中,配置replicaof指向的Master IP +port。
配置文件在Redis的安装目录:
编辑redis.conf配置文件:
vim redis.conf
redis.conf配置文件中默认注释:
# replicaof <masterip> <masterport>
取消注销,配置为Master的IP + port:
replicaof 192.168.211.104 6379
三、哨兵配置
单机节点实例下,Redis的安装目录默认有sentinel.conf配置文件,先对文件进行备份,备份文件名为sentinel.conf.copy(自定义):
cp sentinel.conf sentinel.conf.copy
创建日志等相关文件:
cd /usr/local/soft/redis-6.2.4/
mkdir logs
mkdir rdbs
mkdir sentinel-tmp # sentinel的工作目录,下面有说明
三台机器分别修改sentinel.conf的配置文件内容如下(内容都相同):
daemonize yes
port 26379
protected-mode no
dir "/usr/local/soft/redis-6.2.4/sentinel-tmp"
sentinel monitor redis-master 192.168.211.104 6379 2
sentinel down-after-milliseconds redis-master 30000
sentinel failover-timeout redis-master 180000
sentinel parallel-syncs redis-master 1
上述配置详细解读:
配置项 |
作用 |
daemonize |
后台启动,与Redis一致,yes表示后台启动 |
port |
端口 26379 |
protected-mode |
开启外网访问保护模式,no表示关闭,这样外网可以访问 |
dir |
Sentinel工作目录 |
sentinel monitor |
Sentinel 监控的Redis主节点 |
sentinel failover-timeout |
1、同一个sentinel对同一个master两次failover之间的间隔时间 2、当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时 3、当想要取消一个正在进行的failover所需要的时间。 4、当进行failover时,配置所有slaves指向新的master所需的最大时间 |
sentinel parallel-syncs |
这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。 |
四、服务启动
上述就已经完成了Redis一主二从集群和3个Sentinel实例的监控的配置,接下来就是启动Redis和Sentinel
4.1 启动redis
进入Redis安装目录下的src目录:
cd /usr/local/soft/redis-6.2.4/src
启动Redis服务(也可以配置别名启动,需要的请看我的Redis单机实例安装教程):
./redis-server ../redis.conf
4.2 启动Sentinel
启动目录与Redis启动目录相同,在Redis安装目录下的src目录
方式一:
./redis-sentinel ../sentinel.conf
方式二:
./redis-server ../sentinel.conf --sentinel
4.3 查看集群状态
进入Redis客户端,通过info replication查看集群状态:
info replication
rcli是我配置的别名启动,不懂的请看我的单节点实例部署的博文,或者给我留言我会及时回复的,如上图我们可以看到集群没什么问题,接下来还需要测试Sentinel
五、测试
通过宕机的方式来测试Sentinel是否有效,我们在主节点192.168.211.104上,连接Redis执行shutdown:
shutdown
此时我们的192.168.211.105 slave节点被选举成为新的,master,证明sentinel部署成功:
最后我们将shutdown的192.168.211.104节点重新启动,再次查看Redis的集群情况
我们发现192.168.211.104重启后,成为了一个新的slave节点,此时的master节点仍然时192.168.211.105.