Redis(3)--高可用的实现
1.实验前提
- 需要配置好redis的主从复制,并且准备好三台虚拟机用于模拟
- 此处与redis主从复制准备的虚拟机相同
2.redis实现高可用的原理
- redis提供了Redis Sentinel(哨兵)架构来解决无法自动更改主节点的问题。
1>什么是主观下线
- 每隔一秒,每个哨兵节点会向主节点、从节点和其余哨兵节点操作一条ping的命令来做心跳检测,
- 当这些节点超过一定时间没有进行有效的回复时,哨兵节点会对该节点作失败判定,
- 这个行为叫主观下线,由该哨兵节点独自判定
2>什么是客观下线
- 当哨兵节点主观下线的节点是主节点时,该哨兵节点会向其他的哨兵节点询问对主节点的判定结果,
- 若失败的判定结果超过某个设定的个数,意味着多数哨兵节点都同意这个主节点下线,
- 于是该哨兵节点认为主节点确实应该下线,此时该哨兵节点会作出客观下线的决定
3>领导者哨兵(Sentinel)节点选举规则
- 若某哨兵节点最先完成客观下线,那它会向其他哨兵节点发送命令,请求成为领导者哨兵,
- 收到命令的其他哨兵节点如果没有同意过其他哨兵节点的请求,那么就会同意该哨兵节点的请求,否则拒绝,
- 当该哨兵节点发现自己的票数大于等于某个设定值时,它将成为领导者哨兵
4>新主节点选举规则
- 领导者哨兵在节点列表中选取一个节点作为新的主节点,
- 这个节点要与上个主节点复制的相似度最高,
- 领导者哨兵会命令其余从节点成为新的主节点的从节点,
- 哨兵节点集合会将原来的主节点更新为从节点,并在其恢复后命令它成为新的主节点的从节点
3.操作步骤
- number1为主master,number2和number3为slave
-
- redis自动提供master和slave的主备角色,还提供两者之间的切换
- 配置number3
-
scp -r redis-5.0.3 [email protected]:/root/
#将number1中的内容上传一份到number3中
-
cd redis-5.0.3/
#切换到解压目录下 make install
-
cd utils/
#切换到此目录下 -
./install_server.sh
#编译时一直按回车 -
netstat -antlp
#查看端口信息 -
vim /etc/redis/6379.conf
#编辑文件更改端口信息,使得所有人都可以连接,添加slave的信息 -
/etc/init.d/redis_6379 restart
#重新启动redis -
netstat -antlp
#查看端口信息 - 测试
- 同步了master的数据,但不能自己设置数据
配置哨兵机制 - 在master,number1上
cd redis-5.0.3
-
cp sentinel.conf /etc/redis/
#复制 cd /etc/redis/
-
vim sentinel.conf
#编辑文件 - 关闭保护模式
- 2表示投票机制,至少有两个节点认为master下线才会切换
- 默认master下线后,多少秒后会切换,单位为ms
- 将改好的配置文件发送给slave
scp sentinel.conf [email protected]:/etc/redis/
scp sentinel.conf [email protected]:/etc/redis/
- 注意: 同时更改完配置文件才能启动
-
redis-server /etc/redis/sentinel.conf --sentinel
#启动哨兵 - 在msater和slave中都要启动
测试
- 另外开启一个master的命令框
- 26379为哨兵的端口
- 将master的redis断开连接,发现出现新的master,即为172.25.254.3
- 注意:
vim /etc/redis/6379.conf
- 219~222行:表示数据从内存保存到硬盘的频率