redis 主从复制

主从复制架构
主从模式(master/slave),可以实现Redis数据的跨主机备份。
程序端连接到高可用负载的VIP,然后连接到负载服务器设置的Redis后端realserver,此模式不需要在 程序里面配 置Redis服务器的真实IP地址,当后期Redis服务器IP地址发生变更只需要更改redis 相应的 后端real server即可, 可避免更改程序中的IP地址设置。

主从复制特点
一个master可以有多个slave
一个slave只能有一个master
数据流向是单向的, master到slave

Redis Slave 也要开启持久化并设置和master同样的连接密码,因为后期slave会有提升为master的可 能,Slave 端切换master同步后会丢失之前的所有数据,而通过持久化可以恢复数据
一旦某个Slave成为一个master的slave, Redis Slave服务会清空当前redis服务器上的所有数据并将 master的数据导入到自己的内存,但是如果只是断开同步关系后,则不会删除当前已经同步过的数据

当配置Redis复制功能时,强烈建议打开主服务器的持久化功能。否则的话,由于延迟等问题,部署的 服务应该要避免自动启动。

参考案例: 导致主从服务器数据全部丢失
1.假设节点A为主服务器,并且关闭了持久化。并且节点B和节点c从节点A复制数据
2.节点A崩溃,然后由自动拉起服务重启了节点A.由于节点A的持久化被关闭了,所以重启之后没有任何数据
3.节点B和节点c将从节点A复制数据,但是A的数据是空的,于是就把自身保存的数据副本删除。

在关闭主服务器上的持久化,并同时开启自动拉起进程的情况下,即便使用Sentinel来实现Redis的高可 用性,也是非常危险的。因为主
服务器可能拉起得非常快,以至于Sentinel在配置的心跳时间间隔内没有检测到主服务器已被重启,然 后还是会执行上面的数据丢失的流程。无论何时,数据安全都是极其重要的,所以应该禁止主服务器关 闭持久化的同时自动启动。

命令行配置
启用主从同步
默认redis 状态为master,需要转换为slave角色并指向master服务器的IP+PORT+Password
REPLICAOF MASTER_IP PORT 指令可以启用主从同步复制功能,早期版本使用 SLAVEOF 指令

127.0.0.1:6379> REPLICAOF MASTER_IP PORT
127.0.0.1:6379> CONFIG SET masterauth <masterpass>

 

修改配置文件实现永久主从 命令行修改重启服务主从同步不保存

vim /etc/redis.conf
.......
# replicaof <masterip> <masterport>
replicaof 10.0.0.3 6379 #指定master的IP和端口号
# masterauth <master-password>
masterauth 123456 #如果密码需要设置
.......
systemctl restart redis

 

删除主从同步
REPLIATOF NO ONE 指令可以取消主从复制
取消复制 ,在slave上执行REPLIATOF NO ONE,会断开和master的连接不再主从复制 , 但不会清除slave 上已有的数据
127.0.0.1:6379> REPLICAOF no one

查看主从同步状态
info replication

 slave 状态只读无法写入数据

posted @ 2022-03-15 20:07  45645+56  阅读(113)  评论(0)    收藏  举报