Redis replication 是一种 master-slave 模式的复制机制,这种机制使得 slave 节点可以成为与 master 节点完全相同的副本。数据流是单向的,master到slave
replication 主要用于解决两个问题:
1. 读扩展
一个 master 用于写,多个 slave 用于分摊读的压力。
2. 高可用
如果 master 挂掉了,可以提升(promote)一个 slave 为新的 master,进而实现故障转移(failover)。
redis replication完整流程
(1)slave node启动,仅仅保存master node的信息,包括master node的host和ip,但是复制流程没开始(master host和ip在redis.conf里面的slaveof配置)。
(2)slave node内部有个定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node建立socket网络连接
(3)slave node发送ping命令给master node
(4)口令认证,如果master设置了requirepass,那么salve node必须发送masterauth的口令过去进行认证
(5)master node第一次执行全量复制,将所有数据发给slave node
(6)master node后续持续将写命令,异步复制给slave node
核心机制
第一次slave连接msater的时候,执行的全量复制。
(1)offset
master会在自身不断累加offset,slave也会在自身不断累加offset。
slave每秒都会上报自己的offset给master,同时master也会保存每个slave的offset。
(2)backlog
master node有一个backlog,默认是1MB大小。
master node给slave node复制数据时,也会将数据在backlog中同步写一份。
backlog主要是用来做全量复制中断候的增量复制的。
(3)master run id
info server,可以看到master run id。
如果根据host+ip定位master node,是不靠谱的,如果master node重启或者数据出现了变化,那么slave node应该根据不同的run id区分,run id不同就做全量复制。
如果需要不更改run id重启redis,可以使用redis-cli debug reload命令。
(4)psync
从节点使用psync从master node进行复制,psync runid offset。
master node会根据自身的情况返回响应信息,可能是FULLRESYNC runid offset触发全量复制,可能是CONTINUE触发增量复制。
实操
参考Redis系列(一)-CentOS7下Redis单机安装+自启动 在两台器安装redis。
服务器列表
- Master node1(192.168.2.221)
- Slave node2(192.168.2.230)
1. 配置Master的redis配置文件
开启安全认证
requirepass 123456
2.配置Slave的redis配置文件
slaveof node1 6379
slave-read-only yes 默认开启
启用安全认证
masterauth redis
3.验证
在Master添加数据
在Slave节点查询
主从部署成功。
说明:
若失败请检查:
1.关闭防火墙
2.redis配置远程访问
3.开发redis端口