一. 配置
1.建立复制
配置复制的方式三种:
- 在配置文件中加入slaveof{masterHost}{masterPort}随Redis启动生效。
- 在redis-server启动命令后加入--slaveof{masterHost}{masterPort}生效
- 直接使用命令: slaveof{masterHost}{masterPort}生效。
2.断开复制
在从节点执行slaveof no one来断开与主节点复制关系;
断开复制主要流程:
1) 断开与主节点复制关系。
2) 从节点晋升为主节点。
从节点断开复制后并不会抛弃原有数据, 只是无法再获取主节点上的数据变化。
3.切主操作
通过执行slaveof{newMasterIp} {newMasterPort}命令还可以实现切主操作, 切主是指把当前从节点对主节点的复制切换到另一个主节点。
切主操作流程如下:
1) 断开与旧主节点复制关系。
2) 与新主节点建立复制关系。
3) 删除从节点当前所有数据。
4) 对新主节点进行复制操作
切主后从节点会清空之前所有的数据;
4. 安全性
主节点会通过设置requirepass参数进行密码验证, 这时所有的客户端访问必须使用auth命令实行校验。
这时从节点与需要配置masterauth参数与主节点密码保持一致, 这样从节点才可以正确地连接到主节点并发起复制流程。
5 . 只读
由于复制只能从主节点到从节点, 对于从节点的任何修改主节点都无法感知, 修改从节点会造成主从数据不一致。 因此建议线上不要修改从节点的只读模式;
从节点可以使用slave-read-only=yes配置为只读模式。
6. 传输延迟
主从节点一般部署在不同机器上, 复制时的网络延迟就成为需要考虑的问题, Redis为我们提供了repl-disable-tcp-nodelay参数用于控制是否关闭TCP_NODELAY, 默认关闭;
- 当关闭时, 主节点产生的命令数据无论大小都会及时地发送给从节点, 这样主从之间延迟会变小, 但增加了网络带宽的消耗。 适用于主从之间的网络环境良好的场景, 如同机架或同机房部署。
- 当开启时, 主节点会合并较小的TCP数据包从而节省带宽。 默认发送时间间隔取决于Linux的内核, 一般默认为40毫秒。 这种配置节省了带宽但增大主从之间的延迟。 适用于主从网络环境复杂或带宽紧张的场景, 如跨机房部署。
二 原理
1.复制过程
复制过程大致分为6个过程:
三 搭建
目标:搭建一个主节点,两个从节点的 主从复制结构;拓扑结构如图所示:
1.启动主节点
配置主节点:
port 6379
dir "/usr/local/redis/redis-6379/data"
daemonize yes
启动:
redis-server redis-6379.conf
2. 启动两个从节点
配置6480从节点:
#redis-6480.conf:
port 6480
daemonize yes
logfile "6380.log"
dbfilename "dump-6480.rdb"
dir "/opt/soft/redis/data/"
slaveof 127.0.0.1 6379
#redis-6481.conf:
port 6481
daemonize yes
logfile "6481.log"
dbfilename "dump-6481.rdb"
dir "/opt/soft/redis/data/"
slaveof 127.0.0.1 6379
启动:
redis-server redis-6480.conf
redis-server redis-6481.conf
3 搭建完成,验证
连上6379端口服务器,执行info命令查看;成功返回从节点信息