一、什么是Redis哨兵模式:
哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移
二、哨兵模式的作用:
哨兵是Redis的一种工作模式,以监控节点状态及执行故障转移为主要工作,哨兵总是以固定的频率去发现节点、故障检测,然后在检测到主节点故障时以安全的方式执行故障转移,确保集群的高可用性。
三、主节点的选举条件:
自动故障迁移当一个Master不能正常工作时,哨兵通过投票协议会开始一次自动故障迁移操作,它会将其他一个Slave升级为新的Master,当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换;
四、实验部署
主从部署
所有节点安装redis
分别修改主机名
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# hostnamectl set-hostname slave2
修改Master节点配置文件
[root@master ~]# vim /usr/local/redis/bin/redis.conf
bind 0.0.0.0 ##监听所有网卡
daemonize yes ##允许后台启动
logfile "/var/log/redis_6379.log" ##指定日志存放路径
dir /usr/local/redis/var ##指定数据存放路径
requirepass 123123 ##设置redis登录密码
appendonly yes ##开启AOF持久化功能
重启redis服务
[root@master ~]#systemctl start redis
修改slave1和slave2两个从节点(因配置相同在此只拿slave1举例)
[root@slave1 ~]# vim /usr/local/redis/bin/redis.conf
bind 0.0.0.0 ##监听所有网卡
daemonize yes ##允许后台启动
logfile "/var/log/redis_6379.log" ##指定日志存放路径
dir /usr/local/redis/var ##指定数据存放路径
replicaof 192.168.100.1 6379 ##指定主节点ip和端口号
masterauth 123123 ##指定主节点的redis登录密码
appendonly yes ##开启AOF持久化功能
创建数据存放位置
[root@slave1 ~]# mkdir /usr/local/redis/var/
重启redis服务
[root@slave1 ~]# systemctl restart redis
验证主从复制效果
在Master上创建键值查看slave1和slave2有没有复制过去
[root@master ~]# redis-cli -h 192.168.100.1 -a 123123 -p 6379
192.168.100.1:6379> set name zhangsan
OK
[root@slave1 ~]# redis-cli -h 192.168.100.2 -a 123123 -p 6379
192.168.100.2:6379> keys *
1) "name"
192.168.100.2:6379> get name
"zhangsan"
[root@slave2 ~]# redis-cli -h 192.168.100.3 -a 1710lzz... -p 6379
192.168.100.3:6379> keys *
1) "name"
192.168.100.3:6379> get name
"zhangsan"
哨兵部署
[root@master ~]# cp /usr/src/redis-7.0.8/sentinel.conf /usr/local/redis/bin/
[root@master ~]# vim /usr/local/redis/bin/sentinel.conf
daemonize yes ##允许redis后台启动
logfile "/var/log/sentinel.log" ##指定日志存放路径
dir "/usr/local/redis/sentinel" ##指定数据存放路径
sentinel monitor mymaster 192.168.100.2 6379 1 ##master的ip和redis端口号 1表示:至少需要1个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel auth-pass mymaster 123123 ##master的redis登录密码
sentinel down-after-milliseconds mymaster 30000 ##判定服务器down掉的时间周期,默认30秒
sentinel failover-timeout mymaster 180000 ##切换操作完成的时间周期为180秒,逾期认为切换失败
创建数据存放位置
[root@master ~]# mkdir /usr/local/redis/sentinel
在redis配置文件里添加master密码
[root@master ~]# vim /usr/local/redis/bin/redis.conf
masterauth 123123
重启redis服务
[root@master ~]# systemctl restart redis
在master节点上启动Redis sentinel
[root@master ~]# redis-sentinel /usr/local/redis/bin/sentinel.conf
查看sentinel日志
[root@master ~]# tail -f /var/log/sentinel.log
可以看到192.168.100.2和192.168.100.3的master ip是192.168.100.1
测试Redis sentinel,关闭master节点上的redis测试集群切换
[root@master ~]# systemctl stop redis
可以看到192.168.100.1和192.168.100.3的master ip是192.168.100.2
Redis哨兵模式搭建完成