【redis】复制配置

1.建立复制 

默认建立的节点是主节点,主从中数据从主节点流向从节点。
配置复制的方式有三种:
(1)在配置文件中加入 slaveof {masterIP} {masterPort}随redis启动生效。
(2)在redis-server启动命令后加入 --slaveof {masterIP} {masterPort}
(3)直接使用命令 :slaveof {masterIP} {masterPort} 生效。

slaveof命令可以可以运行期间动态配置,也可以提前写到配置文件中。
[root@oracle1 data]# redis-cli -h 192.168.1.7 -p 6380
192.168.1.7:6380> slaveof 192.168.1.7 6379
OK

--主库日志。
2672:M 23 Jun 12:18:30.716 * Slave 192.168.1.7:6380 asks for synchronization
2672:M 23 Jun 12:18:30.716 * Partial resynchronization not accepted: Replication ID mismatch (Slave asked for '81260cb47795c4342ad564aeb99d596ed4597954', my replication IDs are 'ff7c2dc5093d9e5915696605b39bb4d51bfdbe8d' and '0000000000000000000000000000000000000000')
2672:M 23 Jun 12:18:30.716 * Starting BGSAVE for SYNC with target: disk
2672:M 23 Jun 12:18:30.720 * Background saving started by pid 33470
33470:C 23 Jun 12:18:30.727 * DB saved on disk
33470:C 23 Jun 12:18:30.728 * RDB: 6 MB of memory used by copy-on-write
2672:M 23 Jun 12:18:30.792 * Background saving terminated with success
2672:M 23 Jun 12:18:30.792 * Synchronization with slave 192.168.1.7:6380 succeeded

--主库
192.168.1.7:6379> set myname xsq
OK
--从库
192.168.1.7:6380> get myname
"xsq"

slaveof本身是异步命令,执行slaveof命令时,节点只保存主节点信息后返回,
后续复制流程在节点内部异步执行。

--查看复制状态。
192.168.1.7:6380> info replication
# Replication
role:slave
master_host:192.168.1.7
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:421
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:d4f0ba751140789d45451d9a3a7cc916fa1526d3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:421
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:421

192.168.1.7:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.7,port=6380,state=online,offset=449,lag=0
master_replid:d4f0ba751140789d45451d9a3a7cc916fa1526d3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:449
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:449

2.断开复制

slaveof命令不但可以建立复制,还可以在从节点执行slaveof on one来断开与
主节点复制关系。

192.168.1.7:6380> slaveof no one
OK
--主库日志。
2672:M 23 Jun 13:27:13.847 # Connection with slave 192.168.1.7:6380 lost.
--从节点。
33465:M 23 Jun 13:27:13.846 # Setting secondary replication ID to d4f0ba751140789d45451d9a3a7cc916fa1526d3, valid up to offset: 5770. New replication ID is b9398938c3d797f4e6f7f2847f29e3295ba3e271
33465:M 23 Jun 13:27:13.846 # Connection with master lost.
33465:M 23 Jun 13:27:13.847 * Caching the disconnected master state.
33465:M 23 Jun 13:27:13.847 * Discarding previously cached master state.
33465:M 23 Jun 13:27:13.847 * MASTER MODE enabled (user request from 'id=3 addr=192.168.1.7:54340 fd=7 name= age=4146 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=slaveof')



断开流程:
(1)断开与主节点复制关系
(2)从节点晋升主节点。

从节点断开复制后并不会抛弃原有数据,只是无法再获取主节点上数据变化。
通过slaveof 命令还可以实现切主操作,所谓切主操作是指把当前从节点
对主节点的复制切换到另一个主节点。执行 slaveof {IP PORT}
;
切主流程如下:
(1)断开与旧主节点复制关系
(2)与新主节点建立复制关系 
(3)删除从节点当前所有数据
(4)对新主节点进行复制操作。

切主后从节点会清空之前的所有数据,线上人工操作需要小心slaveof在错误的节点上
执行或者指向错误的节点 。

3.安全性 

对于数据比较重要的节点,主节点会通过设置requirepass 参数进行密码验证,
这时所有的客户端访问都必须使用auth命令实行校验。从节点与主节点的复制连接
是通过一个特殊标识的客户端来完成,因此需要配置从节点 masterauth 参数与 
主节点密码保持一致,这样从节点才可以正确的连接到主节点并发起复制流程。

4.只读 

默认情况下,从节点使用slave-read-only=yes 配置为只读模式。由于复制只能从
主节点到从节点,对于从节点的任何修改主节点都无法感知,修改从节点会造成
主从数据不一致。因此建议线上不要修改从节点的只读模型。

5.传输延迟 

主从节点一般部署在不同机器上,复制时的网络延迟就成为需要考虑的问题,
redis为我们提供了repl-disable-tcp-nodelay参数用于控制是否关闭 TCP-NODELAY 
,默认为no,即开启tcp-nodelay功能。

repl-disable-tcp-nodelay=yes:不开启:TCP-NODELAY 功能。
当关闭时,主节点产生的命令数据无论大小都会及时地发送给从节点,这样主从 
之间延迟会变小,但增加了网络带宽的消耗。适用于主从之间的网络环境良好的
场景,如同机架或同机房部署。

repl-disable-tcp-nodelay=no:开启:TCP-NODELAY 功能
当前开启时,主节点会合并较小的TCP数据从而节省带宽。默认发送时间间隔取决于
linux的内核,一般默认为40ms,这种配置节省了带宽但增大主从之间的延迟。
适用于主从网络环境复杂或带宽禁止场景,如跨级部署。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值