redis主从复制
主服务器:10.0.0.101
从服务器:10.0.0.102
1快速部署第二台redis服务器
[root@elk102 opt]# ssh-keygen
[root@elk102 opt]# ssh-copy-id 10.0.0.101
[root@elk102 opt]# rsync -avz 10.0.0.101:/opt/redis_6379 /opt/
[root@elk102 opt]# rsync -avz 10.0.0.101:/usr/local/bin/redis* /usr/local/bin/
[root@elk102 opt]# rsync -avz 10.0.0.101:/usr/lib/systemd/system/redis.service /usr/lib/systemd/system/
[root@elk102 opt]# sed -i 's#101#102#g' /opt/redis_6379/conf/redis_6379.conf
[root@elk102 opt]# mkdir -p /data/redis_6379
[root@elk102 opt]# groupadd redis -g 2000
[root@elk102 opt]# useradd redis -u 2000 -g 2000 -M -s /sbin/nologin
[root@elk102 opt]# chown -R redis.redis /opt/redis*
[root@elk102 opt]# chown -R redis.redis /data/redis*
[root@elk102 opt]# systemctl daemon-reload
[root@elk102 opt]# systemctl start redis
2主从复制配置
方法1:临时生效
[root@elk102 ~]# redis-cli
127.0.0.1:6379> SLAVEOF 10.0.0.101 6379
方法2:将配置写进配置文件中
[root@elk102 redis_6379]# cat /opt/redis_6379/conf/redis_6379.conf
SLAVEOF 10.0.0.101 6379
3检查复制进度
127.0.0.1:6379> ROLE
127.0.0.1:6379> INFO replication
4取消主从复制
127.0.0.1:6379> SLAVEOF no one
5主从复制流程
1.从节点发送同步请求到主节点
2.主节点接收到从节点的请求之后,做了如下操作 - 立即执行bgsave将当前内存里的数据持久化到磁盘上 - 持久化完成之后,将rdb文件发送给从节点
3.从节点从主节点接收到rdb文件之后,做了如下操作 - 清空自己的数据 - 载入从主节点接收的rdb文件到自己的内存里
4.后面的操作就是和主节点实时的了
6主从复制注意事项
1.从节点只读不可写
2.从节点不会自动故障转移,他会一直尝试同步主节点,并且依然不可写
3.主从复制故障转移需要介入的地方 - 修改代码指向新主的IP - 从节点需要执行slaveof no one
4.从库建立同步时会清空自己的数据,如果同步对象写错了,就清空了
5.从库也可以正常的RDB持久化