参与复制的Redis实例划分为主节点(master)和从节点(slave)。默认情况下, Redis都是主节点。每个从节点只能有
一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。
配置复制的方式有以下三种:
- 在配置文件中加入slaveof (masterHost) (masterPort)随Redis启动生效。
- 在redis-server启动命令后加入–slaveof (masterHost} (asterPort)生效。
- 直接使用命令:slaveof (masterHost) (masterPort)生效。
环境 :单台多实例
方法一:配置文件开启 slaveof
实例1:6379
修改配置文件
cd /usr/local/redis/conf
cp redis.bak redis_6379.conf
redis_6379.conf:
daemonize yes ##开启守护进程
pidfile /data/redis/redis_6379.pid ##pid文件路径
logfile "/data/redis/redis_6379.log" ##日志路径
dbfilename dump_6379.rdb ##库名
dir /data/redis/ ##路径
实例2:6380
复制配置文件
cp redis_6379.conf redis_6380.conf
redis_6380.conf:
port 6380
daemonize yes ##开启守护进程
pidfile /data/redis/redis_6380.pid ##pid文件路径
logfile "/data/redis/redis_6380.log" ##日志路径
dbfilename dump_6380.rdb ##库名
dir /data/redis/ ##路径
slaveof 127.0.0.1 6379 ##REPLICATION 下开启 slaveof ip port
开启三个shell 登录 redis-cli -p 端口号
输入命令 INFO replication
6379:
role:master #角色
connected_slaves:1 #从数量
slave0:ip=127.0.0.1,port=6380,state=online,offset=196,lag=0 #从信息
6380:
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
验证6379与6380
set 一个值 在6381上查看是否复制过去
方法二 命令行输入 slaveof
实例3:6381
复制配置文件
cp redis_6379.conf redis_6381.conf
redis_6380.conf:
port 6381
daemonize yes ##开启守护进程
pidfile /data/redis/redis_6381.pid ##pid文件路径
logfile "/data/redis/redis_6381.log" ##日志路径
dbfilename dump_6381.rdb ##库名
dir /data/redis/ ##路径
6381 输入slaveof 127.0.0.1 6379
keys * 查看是否复制成功
断开连接:slaveof no one
一些原理
传输延迟
主从节点一般部署在不同机器上,复制时的网络延迟就成为需要考虑的问题, Redis为我们提供了repl-disable-tcpnodelay参数用于控制是否关闭TCP_NODELAY,默认关闭,说明如下:
1.当关闭时,主节点产生的命令数据无论大小都会及时地发送给从节点,这样主从之间延迟会变小,但增加了网络带宽的消耗。适用于主从之间的网络环境良好的场景,如同机架或同机房部署。
2.当开启时、主节点会合并较小的TCP数据包从而节省带宽。默认发送时间间隔取决于Linux的内核,一般默认为40毫秒。这种配置节省了带宽但增大主从之间的延迟。适用于主从网络环境复杂或带宽紧张的场景,如跨机房部署。
复制过程的原理
1.保存主节点信息(master)信息
2.从节点内部通过每秒运行的定时任务维护,来复制相关的逻辑,当定时任务发现存在的新的主节点,从节点会尝试与该新主节点建立网络连接;从节点会建立一个socket套接字,专门用于接受主节点发送的复制命令。
从节点无法建立链接,定时任务会无限重复,直到链接成功,或执行 slaveof no one
查看节点失败的原因 命令:Info replication 查看master_link_down_since_seconds 记录着与主节点连接失败的系统时间
3.连接成功时,从节点发送ping命令,请求进行首次通信
1).检测主从间网络套接字是否可用
2).检测主节点当前是否接受处理命令 如果发送ping命令后,从节点没有收到主节点的pong回复
时,比如网络超时或者主节点正在阻塞无法响应命令,从节点会断开复制连接,下次定时任务
会发起重连。
4).执行权限的验证,密码验证
5).同步数据集 psync同步,主节点全部发送给从节点
6).命令持续复制