我们有提到反客为主,不过那时候是用命令手动实现的,那么有没有办法自动实现呢?带着问题,我们来到这篇,那么当然有了。
开篇
哨兵模式:反客为主的自动版,能够后台检测主机是否故障,如果故障了,根据投票数,自动将从库变成主库
哨兵模式的实现
步骤:
1.先创建一个sentinel.conf文件(哨兵配置文件,名字绝对不能打错)
2.进行哨兵配置,填写内容
3.启动配置
sentinel.conf配置
我们还是在myredis目录下进行创建,输入以下命令
sentinel monitor mymaster 127.0.0.1 6379 1
这段代码含义:
sentinel:哨兵
monitor:监视器
mymaster :自己随便取名,我这就叫mymaster
127.0.0.1 6379:是我这里的主服务器,你可以根据自己的情况自动修改
1:址少有多少个哨兵统一迁移的数量,这里可以根据你的实际情况填写
sentinel.conf启动
启动命令:
redis-sentinel sentinel.conf
测试前提:
我们老规矩,默认主机是6379,从机6380、6381
如何实现看哨兵的功能呢?
我们先把主服务器关闭,然后看看哨兵的变化,以及哪一台服务器自动从 从服务器变成了主服务器实现步骤:
1.关闭主服务器6379
2.静静等待结果
3.可能遇到的问题
如果你用info replication 一直查看不到状态改变,或者有提示【206:X 14 Mar 2022 11:19:12.883 # +failover-state-select-slave master mymaster 127.0.0.1 6379
3206:X 14 Mar 2022 11:19:12.967 # -failover-abort-no-good-slave master mymaster 127.0.0.1 6379
3206:X 14 Mar 2022 11:19:13.040 # Next failover delay: I will not start a failover before Mon Mar 14 11:25:13 2022
】
可能需要有以下原因:
1.未打开26379的端口防护墙
解决如下:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
service firewalld restart
2.哨兵监视器未设置主机的访问密码
在sentinel monitor下面加上这一句
sentinel auth-pass mymaster 123456
再次重新启动下配置文件,或者原来的步骤重新开始
到这我们算成功了一小步。此刻我们来看原来设置sentinel.conf文件,发现它变了样子
sentinel monitor mymaster 127.0.0.1 6380 1
sentinel auth-pass mymaster 123456
# Generated by CONFIG REWRITE
protected-mode no
port 26379
user default on nopass sanitize-payload ~* &* +@all
dir "/root/microservice/myredis"
sentinel myid 15a8a11a6c571369834a5cb9aebabda405ea4d42
sentinel config-epoch mymaster 9
sentinel leader-epoch mymaster 9
sentinel current-epoch 9
sentinel known-replica mymaster 127.0.0.1 6379
sentinel known-replica mymaster 127.0.0.1 6381
它新增了很多东西
有没有思考过一个问题:6379主机挂了之后,哨兵会自动选择一个从机来作为主机,那么如果6379重新恢复后,它是否能重新成为主机?还是?
带着疑问我们来测试下,恢复6379
恢复步骤
redis-server redis6379.conf
启动链接
redis-cli -p 6379 -a 123456
查看状态
info replication
发现它已经变成了6380的从机了。也就是说主机挂了之后,再次恢复,不再是主机了,只能变成新主机的从机
如果你不好理解上面的话语,举个简单例子:宋代老皇帝被俘虏,新皇帝即位,即使老皇帝回来了,它也不再是皇帝了,得向新皇帝称臣。明白否?
故障恢复机制:
多个从服务器将其转成主服务器,选择条件依次为:
1.选择优先级靠前的
优先级在redis.conf中默认:replica-priority 100 值越小优先级越高
2.选择偏移量最大的
偏移量是指获得原主机数据最全的
3.选择runid最小的服务器
每个redis实例启动后都会随机生成一个40位的runid
挑选出来的新服务器之后sentinel向源服务器的从服务器发送slave of 新主服务器命令,复制新的master
当已下线的服务重新上显示,sentinel会向其发送slaveof命令,让其成为新主的从