Redis主从复制
前提:有两台或两台以上安装Redis的服务器
1.db01插入测试命令
for i in {1..1000};do redis-cli set key_${i} v_${i} && echo "${i} is ok";done
2.配置主从复制
方法一: 临时生效
redis-cli -h 10.0.0.52 slaveof 10.0.0.51 6379
方法二: 写进配置文件永久生效
[root@db02 ~]# vim /opt/redis_6379/conf/redis_6379.conf 添加
slaveof 10.0.0.51 6379
错误排查:
1.在db01上执行了命令
2.配置文件里的密码没删掉
3.配置文件里的重命名参数没删掉
4.用户id和组id冲突
5.没有rsync
3.主从复制的流程
1.从节点发送同步请求到主节点
2.主节点接收到从节点的请求之后,做了如下操作
- 立即执行bgsave将当前内存里的数据持久化到磁盘上
- 持久化完成之后,将rdb文件发送给从节点
3.从节点从主节点接收到rdb文件之后,做了如下操作
- 清空自己的数据
- 载入从主节点接收的rdb文件到自己的内存里
4.后面的操作就是和主节点实时的了
4.取消复制
SLAVEOF no one
5.主从复制注意
1)从节点只读不可写
> set k1 v1
(error) READONLY You can't write against a read only slave.
2)主节点宕机从节点不会自动故障转移,它会一直尝试同步主节点,并且依然不可写
3)主从复制故障转移需要人工介入
修改代码指向新主的IP 或者 从节点需要执行SLAVEOF no one
4)从库建⽴同步时会清空⾃⼰的数据,,如果同步的对象写错了,就会导致数据丢失
5)从库和主库后续的同步依靠的是redis的SYNC协议,而不是RDB文件,RDB文件只是第一次建立同步时使用。
6)从库也可以正常的rdb持久化文件
6.安全的操作
无论是同步,无论是主节点还是从节点,请先备份一下数据