redis主从复制

本文详细介绍了Redis主从复制的配置方法,包括通过配置文件、启动命令和命令行设置主从关系。同时,讨论了如何查看复制状态、断开主从连接以及在主从切换场景下的操作。注意点包括默认从节点的只读模式、主从复制的偏移量管理和ID变化对复制的影响。此外,还提到了全量同步、部分复制以及可能遇到的如读到过期数据和避免复制风暴等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主从复制配置方法:
  1. 配置文件中添加 加入 slaveof ip port, 重启生效;
  2. 启动命令加入–slaveof redis-server --slaveof ip port
  3. 在命令中 slaveof ip port
查看复制状态:info replication
断开主从复制:在slave节点,执行6380:>slaveof no one

环境准备

参考redis搭建,搭建一个redis服务并启动

查看主redis

127.0.0.1:6379> 
127.0.0.1:6379> keys *
 1) "count"
 2) "test2"
 3) "testm"
 4) "test_inter"
 5) "mylist"
 6) "myset:__rand_int__"
 7) "test4"
 8) "test3"
 9) "user"
10) "testm2"
11) "key:__rand_int__"
12) "counter:__rand_int__"
13) "test1"
127.0.0.1:6379> 

未配置前从redis

127.0.0.1:6399> keys *
(empty list or set)
127.0.0.1:6399> 

配置主从复制:
在从服务器一条命令搞定:

127.0.0.1:6399> SLAVEOF 192.168.137.18 6379
OK
127.0.0.1:6399>

查看从节点keys

127.0.0.1:6399> keys *
 1) "count"
 2) "key:__rand_int__"
 3) "testm2"
 4) "test3"
 5) "user"
 6) "counter:__rand_int__"
 7) "myset:__rand_int__"
 8) "test_inter"
 9) "test2"
10) "test4"
11) "testm"
12) "test1"
13) "mylist"

主节点设置一个key值

127.0.0.1:6379> set salvetest 'this is ok'
OK
127.0.0.1:6379> 

从节点获取:

127.0.0.1:6399> get salvetest
"this is ok"

主节点查看信息,可以看到一个slave

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.137.19,port=6399,state=online,offset=139,lag=1
master_repl_offset:139
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:138

从节点停止复制:

127.0.0.1:6399> slaveof no one
OK

主节点查看信息, 显示0个slave

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:209
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:208
127.0.0.1:6379> 

从节点查看keys, 发现keys仍然在。

127.0.0.1:6399> keys *
 1) "count"
 2) "salvetest"
 3) "key:__rand_int__"
 4) "testm2"
 5) "test3"
 6) "user"
 7) "counter:__rand_int__"
 8) "myset:__rand_int__"
 9) "test_inter"
10) "test2"
11) "test4"
12) "testm"
13) "test1"
14) "mylist"
127.0.0.1:6399> 

场景: 主从切换,

先将从节点slaveof no one
停止完成后
将原来的主节点slaveof ip port (ip为原来从节点ip, port为原来从节点port)


简要介绍及注意点
  1. 默认情况下从节点使用slave-read-only=yes配置为只读模式, 可以进行读写分离, 减小主节点的压力

  2. 一个主redis可以有多个从redis

  3. 一个redis挂多个从redis可能会消耗主redis的带宽, 消耗性能, 可以使用多层的树状结构进行, 也可以指定一个从服务器,然后其他从服务器从第一个从服务器复制

  4. 参与主从复制的节点都会维护自身复制偏移量, 主节点处理完写入命令后, 会把命令字节长度累加记录,统计在info replication中的master_repl_offset 中, 而从节点slave则上报自身复制偏移量给主节点,主节点会保存丛节点的复制偏移量

  5. redis启动都都会动态分配一个运行ID, 主节点重启,id将会变化,从节点基于偏移量复制将是不安全的,因此当ID发生改变,则从节点将会做全量复制

  6. 如果配置修改。或者其他的优化,重新加载redis 可以使用debug reload进行,这样ID不会变化

  7. 主从建立成功后,从节点发送ping命令,请求首次通信

  8. 主从复制连接建立正常通信后, 首次建立的场景, 主节点会将所有数据发送给从节点, 2.8版本之后使新复制命令psync进行复制

  9. 复制分为,全量同步和部分复制

  10. psync 实际上,主节点会保存rdb文件到本地,再将rdb文件发送从节点
    在rdb保存及传输过程中主节点的产生的数据,会放入客户端缓冲区中,传输完毕后,发送给从节点,

  11. 主从建立, 主从之间维护着心跳命令


主从复制应用及可能的问题
  1. 可以进行读写分离,

  2. 可能读到过期数据 , 这是由于删除策略: 惰性删除和定时删除, 存在一定的延时, 从节点自身不会去删除超时数据,
    除非是主节点发送del 命令,由于某些原因导致从节点未及时删除,则可能读到过期数据

  3. 主从配置不一致

  4. 避免复制风暴
    例如主节点恢复重启后,大量从节点发起全量复制,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值