Redis-主从复制
需求
单机版的Redis服务器在运行过程中,如果发生宕机会导致缓存服务直接中断,缺乏高可用性,目前的解决方法是搭建多台Redis服务器,主从复制就是来解决这个问题的。
- 其中一台作为主服务器(主机),主要用于接受用户的写命令。
- 其它的作为从机,主要用于用户读取数据,其数据来源就是直接复制主机内的数据集。
使用方法
- 区别:主机和从机的主要区别在于配置上,原生都是Redis服务器
- 配置方法:
前提刚要:注意用vmware开多台虚拟机玩主从复制,先把主机的防火墙关了,或者像下面这样给主机的端口号设置到防火墙的白名单上(设置好之后,一般重启虚拟机之后就会失效,有时候从机连接不上主机基本都是这个问题)
![Alt
-
一劳永逸:在配置文件中配置主机的IP地址和端口号,以及主机的访问密码。
-
临时起意:通过在客户端的命令直接配置主机IP地址(需要提前在配置文件中配置好主机的访问密码),不过,关闭掉从机再重启,连接的主机就会失效,具体查看常用命令中的“连接主机”。
常用命令
- 查看主从复制信息:INFO replication。
- 连接主机:slaveof 主机IP地址+端口号(配置文件里配好主机访问密码)。
- 从机恢复成主机:slaveof no one ,兽人永不为奴。
日志
-
设置日志路径:
-
主从复制成功样例(日志文件中查看):
注意事项
- 从机会复制主机当前缓存中所有的数据,包括从机之前还没有连接上主机时,主机存入缓存的数据。
- 主机宕机之后,从机会停止工作,直到主机上线,主从关系仍然保持。
复制原理和大致工作流程
-
主机接受从机的sync(同步)请求,开始准备数据。
-
从机接受来自主机的RDB快照和新的修改命令(缓存),开始全量复制,就是直接把数据完完整整搬到从机里面。
-
保持主从机之间的通信,默认是每隔10秒,确认一次主机或从机是否在正常工作。
-
开始主从机的日常工作,主机接受到了啥写命令(修改操作)就传到slave(从机)那里,完成数据同步。
-
如果从机宕机了,从机是如何恢复数据的?
首先,这里要先了解,主机和从机都会维护一个offset(偏移量),存储在backlog中,offset类似数据的时间坐标,主机每次从机同步了n字节的数据,offset = offset + n,从机每次从主机同步了n字节的数据也会更新偏移量,即offset = offset + n,offset主要用于判断主机和从机之间的数据库状态是否保持一致。
然后,从机宕机一段时间之后,偏移量和主机发送不一致,从机重新启动的时候,会从当前偏移量开始复制数据(数据大小不超出复制缓存积压区),
优点
- 读写分离
- 容灾恢复(容灾概念:容灾(Disaster Tolerance),就是在自然灾害、设备故障、人为操作破坏等的灾难发生时,在保证生产系统的数据尽量少丢失的情况下,保持生存系统的业务不间断地运行。)
- 数据备份
- 水平扩容支持高并发
缺点
- 主机寄了,从机不会自己上位,直接开始摆烂,需要靠人工去管控,直到主机上线,从机才上班。
- 从机多了,跟主机之间的通信就多了,会导致主机性能的下降