Redis系列(三):深入解读Redis主从同步机制(下)

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: Redis系列(三):深入解读Redis主从同步机制(下)

如何配置主从从架构呢

  1. 安装和配置主服务器(Master):
  • 安装Redis主服务器并确保主服务器正常运行。
  • 在主服务器的配置文件(redis.conf)中开启持久化(通常使用RDB快照或AOF日志)和监听端口,确保配置项如下:
port 6379
save 900 1
appendonly yes  # 如果使用AOF日志
  • 如果需要对外提供访问,确保防火墙或网络设置允许访问主服务器的6379端口。
  1. 安装和配置第一个从服务器(Slave1):
  • 在从服务器1上安装Redis数据库。
  • 在从服务器1的配置文件中配置主从关系。在配置文件中添加类似如下的内容,其中 masterauth是主服务器的密码, master是主服务器的IP和端口:
slaveof master_ip master_port
masterauth your_master_password
  • 重启从服务器1使配置生效。
  1. 安装和配置第二个从服务器(Slave2):
  • 在从服务器2上安装Redis数据库。
  • 在从服务器2的配置文件中配置主从关系,与从服务器1相似。确保配置项不冲突。
  • 重启从服务器2使配置生效。
  1. 重启主服务器:
  • 在主服务器上查看主服务器的信息,如IP和端口。通常使用以下命令:
INFO server
  1. 测试主从从架构:
  • 在主服务器上进行写操作,如插入、更新或删除数据。
  • 查看从服务器1和从服务器2是否同步了主服务器的数据。

需要注意的是,Redis的主从从架构在部署和配置上与主从架构类似,只是需要在从服务器上再次配置主从关系。另外,Redis还可以配置更多高可用性的功能,如哨兵(Sentinel)和集群(Cluster),以实现更强大的架构。具体配置细节可能会因版本和需求而有所不同,建议参考官方文档或相关资源进行详细了解和配置。

主从库间网络断了怎么办?

在 Redis 2.8 之前,如果主从库在命令传播时出现了网络闪断,那么,从库就会和主库重新进行一次全量复制,开销非常大。

2.8之后呢是支持增量同步的,那么Redis是怎么实现增量同步的呢? 当Redis主从库之间的网络断开后,网络恢复时从库需要进行增量同步,以获取在网络断开期间主库中的更新数据。Redis实现增量同步的方式是通过Redis复制机制,具体流程如下:

  1. 保存主服务器的数据: 主服务器会将更新的数据写入内存,并在内存中保存一份副本。同时,主服务器会将更新的数据写入AOF(Append-Only File)日志文件,以便在断电或宕机情况下能够进行数据恢复。
  2. 记录复制偏移量: 在主服务器的复制过程中,主服务器会记录一个复制偏移量(replication offset),表示从服务器在主服务器中的数据位置。这个偏移量会随着数据的更新而递增。
  3. 网络恢复: 当网络恢复时,从服务器会尝试连接主服务器并请求进行复制。
  4. 发送SYNC命令: 从服务器会发送SYNC命令给主服务器。如果是初次连接复制,从服务器发送的SYNC命令中不包含任何参数。如果是增量同步,从服务器会发送带有偏移量参数的SYNC命令。
  5. 全量复制或部分复制:根据情况,主服务器会执行全量复制或部分复制:
  • 全量复制(初次连接): 如果是初次连接复制,主服务器会执行全量复制。它会创建一个RDB快照(数据库快照),将数据库中的数据快照发送给从服务器。这样从服务器就能够拥有主服务器的完整数据集。
  • 部分复制(增量同步): 如果是增量同步,主服务器会从记录的偏移量处开始,将从偏移量后的所有更新数据发送给从服务器。这样从服务器就能够获取在断开网络期间主服务器的更新数据。
  1. 复制数据传输: 主服务器会将全量数据或增量数据通过网络传输给从服务器。从服务器会接收并处理这些数据,更新自己的数据集。
  2. 复制过程继续: 一旦复制数据传输完成,从服务器会持续地与主服务器保持连接,接收来自主服务器的增量更新。这样,主从库之间的数据保持同步。

需要注意的是,当网络断开时间较长或断开期间数据更新较大时,增量同步可能会导致从服务器落后于主服务器。在网络恢复后,从服务器需要足够的时间来接收和处理更新数据,以保持与主服务器的数据同步。

一般的排查流程

  1. 检查网络连接问题: 首先,确保网络连接问题的确是造成主从库通信中断的原因。检查网络配置、防火墙规则、路由等设置,确保主从库之间可以互相访问。
  2. 重新连接网络: 如果网络问题是暂时的,你可以尝试恢复网络连接,让主从库之间恢复通信。
  3. 检查主从状态: 在主从库网络连接恢复后,使用INFO replication命令检查主从库的同步状态。确保主库已将数据同步到从库。
  4. 手动重新同步:如果主从库之间的网络断开时间较长,可以考虑进行手动重新同步:
  • 在从库上,使用 SLAVEOF NO ONE命令解除从库状态。
  • 在从库上,删除持久化文件(RDB文件或AOF文件)。
  • 在从库上,执行 SLAVEOF master_ip master_port命令,将其重新设置为主库的从库。
  • 在主库上,执行 SLAVEOF NO ONE命令解除主库状态。
  • 在主库上,执行 SLAVEOF slave_ip slave_port命令,将其重新设置为从库的主库。
  1. 手动复制数据: 如果网络断开时间较长且重新同步不可行,你可能需要手动复制数据。在主库上导出数据,并在从库上导入数据。
  2. 备份和恢复: 如果网络问题无法解决,你可能需要在网络恢复后考虑从主库重新备份数据,然后在从库上进行数据恢复。

总结

文章中介绍了Redis主从库架构以及如何配置、维护和解决主从库网络断开的问题。以下是文章中涉及到的主要内容:

  1. Redis主从库架构及其保证的高可靠性:
  • Redis主从库的目的是实现高可靠性,通过数据持久化、主从复制、Sentinel哨兵和Cluster集群等方式来保障数据的安全性和可用性。
  1. 如何保证副本数据一致:
  • Redis通过全量复制和部分复制(增量同步)来保证主从库之间的数据一致性。复制偏移量和复制积压缓冲区等机制用于记录和传输数据。
  1. 主从库第一次同步的过程:
  • 主从库之间的第一次同步涉及主服务器创建RDB快照,发送给从服务器,以及记录期间的写操作进行命令传播。
  1. PSYNC命令和增量同步:
  • PSYNC命令用于主从库网络断开后的增量同步。完全同步用于初次连接,部分同步用于增量同步,从而减少数据传输量。
  1. 主从从架构及其优势:
  • 主从从架构是在主从架构基础上的扩展,通过级联的方式减轻主服务器的复制压力,实现更高的可用性和负载均衡。
  1. 配置主从从架构的步骤:
  • 安装和配置主服务器,从服务器1和从服务器2。
  • 重启主服务器,查看主服务器信息。
  • 进行测试,验证主从库之间是否同步。
  1. 解决主从库间网络断开问题:
  • 检查网络连接问题,确保主从库之间可以互相访问。
  • 重新连接网络,恢复通信。
  • 检查主从状态,确保同步。
  • 手动重新同步,尝试恢复数据一致性。
  • 手动复制数据或备份恢复数据。

本文由 mdnice 多平台发布

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
21天前
|
缓存 运维 NoSQL
Redis主从模式部署
Redis主从模式部署
37 4
|
9天前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
32 0
|
12天前
|
缓存 NoSQL Redis
Redis主从架构
当看到图示中红色标记的,就代表从节点挂载成功了。
12 0
|
13天前
|
NoSQL Java 关系型数据库
考考你Redis主从,就知道有没深入Redis
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天继续给大家带来新的一篇Java进阶指南。如果是单机版的数据库,像MySQL、Redis,看起来实现并不复杂。只要支持保存一条数据,同时要能够查询出来。但如果是多机版的数据库呢,各个节点的配合联调是比较复杂的过程,看起来就不是那么简单喽。要考你对Redis深不深入理解,问问Redis多机版相关的问题就知道了。我们今天就来指南下Redis主从架构。
考考你Redis主从,就知道有没深入Redis
|
3天前
|
安全 NoSQL Java
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
|
5天前
|
NoSQL 算法 Linux
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
8 0
|
7天前
|
NoSQL Redis 数据安全/隐私保护
大事件后端项目35——登录优化_redis_主动失效机制实现
大事件后端项目35——登录优化_redis_主动失效机制实现
|
11天前
|
存储 缓存 JSON
Redis-持久化-淘汰机制-IO策略
Redis-持久化-淘汰机制-IO策略
|
2月前
|
存储 缓存 NoSQL
Redis与数据库同步指南:订阅Binlog实现数据一致性
本文由开发者小米分享,探讨分布式系统中的一致性问题,尤其是数据库和Redis一致性。文章介绍了全量缓存策略的优势,如高效读取和稳定性,但也指出其一致性挑战。为解决此问题,提出了通过订阅数据库的Binlog实现数据同步的方法,详细解释了工作原理和步骤,并分析了优缺点。此外,还提到了异步校准方案作为补充,以进一步保证数据一致性。最后,提醒在实际线上环境中需注意日志记录、逐步优化和监控报警。
78 3
|
17天前
|
存储 NoSQL 算法
Redis分片机制
Redis分片机制