前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊redis的主从复制实现与同步过程

聊聊redis的主从复制实现与同步过程

原创
作者头像
1014803
修改2020-02-24 10:27:32
1.3K0
修改2020-02-24 10:27:32
举报
文章被收录于专栏:redis深入学习专栏

我们在业务中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等要求

下面总结介绍下:

1,主从复制的配置

2,复制的过程和原理

主从配置的配置实现

默认情况下redis都是master,每个从节点只能有一个master,但主节点同时可有多个slave。复制的数据流是单向的,只能由主节点复制到从节点,且是异步复制(主节点只负责将要复制的数据发出,至于从节点是否有接收或者同步完成,主节点不关心),配置复制(从节点)方式有以下三种:

1,redis的配置文件redis.conf 中加入 slaveof masterHost masterPort 重启redis生效

2,启动redis启动时候指定参数 redis-server启动命令后增加 --slaveof masterHost masterPort

3,redis-cli 下直接使用命令 slaveof masterHost masterPort

开启主从复制,主实例 bind 127.0.0.1 需要注释或者bind 0.0.0.0 ,并将protected-mode 保护模式配置为no

redis-cli下命令info replication 可查看主从状态复制的状态信息。

断开复制:从节点redis-cli 下执行slave no one 即可断开。另外尝试连接从节点不会主动终止,连接失败会持续重试。

复制的过程

在从节点执行slaveof后,复制过程便开始运作,整个复制过程大致分为6个阶段

  • 主从建立socket连接,从库随机端口发起到主库的连接,用与后面的数据同步
  • 发送ping命令

socket连接建立后,从节点发送ping请求进行首次通信,ping的主要目的在于 检测主从之前网络连接是否可用检测主节点当前是否可接受处理命令,如果发送ping命令后,从节点没有收到主节点pong回复或者超市(如网络超时、主节点在阻塞中无法响应命令),从节点会断开复制连接,下次定时发起重连(每隔1s,轮询重试)

  • 权限验证

如果主节点master的redis.conf 有配置requirepass 123456,从节点的配置项主节点密码需保持一致masterauth 123456。如果验证失败复制将终止,从节点重新发起复制流程。

  • 数据同步
  1. 全量复制(redis大于2.8版本都是psync)

一般用于初次复制的场景

psync runid offset

runid是从节点保存的主节点的runid,没有默认则为?。runid作为节点唯一ID,主节点发生重启,runid会发生改变。在主从关系中,若从节点没有关闭slaveof的情况下,主节点发生重启,会导致从节点数据全部重写(如果主节点清空数据并做重启操作,会导致从节点数据也清空)

offset是值参与复制的节点各自所维护的自身复制偏移量,主节点在处理完写入命令后,会对offset做记录更新,从节点也会每秒上报自身复制偏移量给主节点,同时每接收完数据会更新自身的复制偏移量。

复制客户端缓冲区

从节点在接收主节点发送的rdb文件的期间,主节点会正常响应业务请求,这期间的命令写入会保存在复制客户端缓冲区内,当从节点完成rdb文件加载后,主节点再把缓冲区数据发送给从节点,从而保证双方数据一致。

对应的配置项为 client-output-buffer-limit salve 256MB 64MB 60 (如果缓冲区数据持续60s大于64M,或直接大于256M,则主节点将直接关闭复制客户端连接,造成全量同步失败)。若主节点数据写入量大的情况,需根据情况调整此参数。

2. 部分复制

复制积压缓冲区

此缓冲区在主节点有连接的从节点时候会被创建,默认大小为1M,主节点在响应业务写入时,除了将数据同步给从节点,同时也会将其写入复制积压缓冲区,区内的数据为先进先出,只保留最新的。

部分复制发生在已经建立主从关系的双方由于各种原因出现中断时,如果超过repl-timeout配置时间(默认为60s),主节点会中断复制连接。

最后,腾讯云的redis高可用也是采用主从的方式,当redis实例很不幸发生物理机异常等情况,能切换从实例读写,减少由于此种情况对业务的影响~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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