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命令,让其成为新主机的从机。