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中

Redis(3)--高可用的实现

  • cd redis-5.0.3/ #切换到解压目录下
  • make install
  • cd utils/ #切换到此目录下
  • ./install_server.sh #编译时一直按回车
  • netstat -antlp #查看端口信息
    Redis(3)--高可用的实现Redis(3)--高可用的实现Redis(3)--高可用的实现
  • vim /etc/redis/6379.conf #编辑文件更改端口信息,使得所有人都可以连接,添加slave的信息
  • /etc/init.d/redis_6379 restart #重新启动redis
  • netstat -antlp #查看端口信息
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现
  • 测试
  • 同步了master的数据,但不能自己设置数据
    Redis(3)--高可用的实现
    配置哨兵机制
  • 在master,number1上
  • cd redis-5.0.3
  • cp sentinel.conf /etc/redis/ #复制
  • cd /etc/redis/
  • vim sentinel.conf #编辑文件
  • 关闭保护模式
    Redis(3)--高可用的实现
  • 2表示投票机制,至少有两个节点认为master下线才会切换
    Redis(3)--高可用的实现
  • 默认master下线后,多少秒后会切换,单位为ms
    Redis(3)--高可用的实现
  • 将改好的配置文件发送给slave
  • scp sentinel.conf [email protected]:/etc/redis/
  • scp sentinel.conf [email protected]:/etc/redis/
  • 注意: 同时更改完配置文件才能启动
  • redis-server /etc/redis/sentinel.conf --sentinel #启动哨兵
  • 在msater和slave中都要启动
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现

测试

  • 另外开启一个master的命令框
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现
  • 26379为哨兵的端口
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现
  • 将master的redis断开连接,发现出现新的master,即为172.25.254.3
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现
    Redis(3)--高可用的实现
  • 注意:
  • vim /etc/redis/6379.conf
  • 219~222行:表示数据从内存保存到硬盘的频率

Redis(3)--高可用的实现