前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 主从同步

Redis 主从同步

作者头像
一个架构师
发布2022-06-20 19:54:31
4680
发布2022-06-20 19:54:31
举报

Redis的主从配置可以说是哨兵或者集群模式的最简单元.今天我们就来看下Redis是如何做主从同步,以及要注意什么.

一. 主从配置

配置方式有两种:

(1) 配置Redis.conf

代码语言:javascript
复制
#slaveof <masterip> <masterport>
slaveof 172.17.0.2 6379

(2) 使用slaveof命令配置

代码语言:javascript
复制
SLAVEOF 172.17.0.2 6379

二. 全量同步

主从节点数据同步流程如下:

可见主从同步会有两个主要过程

1. 同步全量RDB信息

2. 同步增量repl_back_buffer信息,buffer的默认大小为1M,可以通过redis.conf中repl-backlog-size配置修改

通过主从节点的日志了解数据同步过程

主节点日志

代码语言:javascript
复制
1:M 19 May 02:30:25.225 * Slave 172.17.0.3:6380 asks for synchronization
1:M 19 May 02:30:25.226 * Partial resynchronization not accepted: Replication ID mismatch (Slave asked for '225ce4bd8f8cebae2035325e51123099852bb7dd', my replication IDs are 'e0aafc1924a836d84d1a1643b07bef6d085e6d63' and '0000000000000000000000000000000000000000')
1:M 19 May 02:30:25.226 * Starting BGSAVE for SYNC with target: disk
1:M 19 May 02:30:25.228 * Background saving started by pid 36
36:C 19 May 02:30:25.233 * DB saved on disk
36:C 19 May 02:30:25.235 * RDB: 0 MB of memory used by copy-on-write
1:M 19 May 02:30:25.323 * Background saving terminated with success
1:M 19 May 02:30:25.324 * Synchronization with slave 172.17.0.3:6380 succeeded

从节点日志

代码语言:javascript
复制
1:M 19 May 02:29:03.020 * Ready to accept connections
1:S 19 May 02:30:24.898 * Before turning into a slave, using my master parameters to synthesize a cached master: I may be able to synchronize with the new master with just a partial transfer.
1:S 19 May 02:30:24.898 * SLAVE OF 172.17.0.2:6379 enabled (user request from 'id=3 addr=127.0.0.1:36280 fd=7 name= age=46 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:S 19 May 02:30:25.220 * Connecting to MASTER 172.17.0.2:6379
1:S 19 May 02:30:25.221 * MASTER <-> SLAVE sync started
1:S 19 May 02:30:25.221 * Non blocking connect for SYNC fired the event.
1:S 19 May 02:30:25.223 * Master replied to PING, replication can continue...
1:S 19 May 02:30:25.224 * Trying a partial resynchronization (request 225ce4bd8f8cebae2035325e51123099852bb7dd:1).
1:S 19 May 02:30:25.229 * Full resync from master: e8063053a7483b6356511217e29c5db13d483ef4:0
1:S 19 May 02:30:25.229 * Discarding previously cached master state.
1:S 19 May 02:30:25.324 * MASTER <-> SLAVE sync: receiving 187 bytes from master
1:S 19 May 02:30:25.324 * MASTER <-> SLAVE sync: Flushing old data
1:S 19 May 02:30:25.324 * MASTER <-> SLAVE sync: Loading DB in memory
1:S 19 May 02:30:25.324 * MASTER <-> SLAVE sync: Finished with success

三. 增量同步

1. 从节点发送psync master_runid offset请求

2. 主节点判断runid是否和本机的id一致, offset是否超过了buffer缓存区大小;

3. 如果runid不一致,或者offset超过缓存区大小,返回FULLRESYNC runid offset,进行全量同步.

4. 如果runid一致,offset不超过缓存区大小,则返回CONTINUE信息,并向从节点发送增量数据.

四. 主从节点同步状态

使用info 命令,可以观察到主从节点的同步状态

主节点信息

代码语言:javascript
复制
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6380,state=online,offset=15114,lag=0
master_replid:e8063053a7483b6356511217e29c5db13d483ef4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:15114
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:15114

从节点信息

代码语言:javascript
复制
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:15170
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:e8063053a7483b6356511217e29c5db13d483ef4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:15170
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:15170

五. 注意事项

1. 主从同步会有延迟

2. repl_back_buffer设置不能太小,会影响正常全量同步以及网络闪断时的增量同步.

3. 主从配置要一致

maxmemory不一致,可能会造成丢失数据

数据结构优化参数不一致,会造成主从内存不一致

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从码农的全世界路过 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档