Redis支持主从模式,用来提高Redis服务的负载能力。一个服务器作为主服务器,接受“写”数据(添加,修改和删除),其它服务器支持读数据,主服务器自动同步给从服务器。

复制原理

  • 每次联通后,都会给主机发送sync指令。
  • 主机接受命令后,立刻进行存盘操作,然后发送RDB文件给从机。
  • 从机收到RDB,进行全盘加载。
  • 之后每次主机的写操作,都会立即发送给从机,从机执行相同的命令。

一主一从

从服务器配置参数

  • slaveof ip:port(主服务器ip+端口)    #连接主服务器
  • slave-read-only yes    #从服务器只支持读操作
  • ./redis-cli: info replication:可以查看当前服务的角色和连接情况

薪火相传

  • 上一个slave可以是下一个slave的master,该slave可以减轻master的写压力,去中心化降低风险。
  • 配置参数slaveof ip:port
  • 中途变更master,会清空之前的数据,重新建立拷贝。
  • 坏处是,一旦中间层的slave宕机,后面的slave将无法同步数据。

反客为主

当一个master宕机后,后面的slave通过命令:

slaveof no one   #将从机变为主机

哨兵模式:反客为主的自动版

后台自动监控主机是否故障,如发生故障,则更加选举将从库变为主库(心跳,选举机制)。

配置sentinel.conf文件:

  • 新建sentinel.conf文件
  • 输入内容:sentinel monitor mymaster ip port 1    #哨兵的名称+ip+port+至少有几个哨兵同意迁移的数量

启动哨兵:

  • redis-sentinel /conf/sentinel.conf
  • redis-server sentinel.conf --sentinel    #windows启动命令

配置详细链接:https://www.php.cn/windows-417893.html

故障恢复运行机制

更换主机

  • 主机异常下线,从从机中选取一个成为新的主机,选择条件是
  • 选择优先级靠前的,配置slave-priority 10来设置优先级,越小优先级越高。
  • 选择偏移量最大的,是指获取数据最多的。
  • 选择runid最小的,服务启动时,会随机生成40位的runid。
  • 主机对内存和读写要求都比较高。

确认从属关系

确定新的主机后,sentinel会向其它从机发送slaveof 新主机的命令,其它从机会复制新主机的数据。

旧主上线

旧的主机,重新上线,sentinel会向其发送slaveof命令,让其成为新主机的从机。