Redis主从架构复制

Redis在分布式系统中,为了提高可用性,主节点故障可转移到从节点,会把数据复制到多个从节点机器中。

建立主从复制

主节点可以拥有多个从节点,redis为每个启动后的实例动态分配一个40位的十六进制runId,作为唯一识别标志。注意redis重启后,runId会改变。
可以使用debug reload重新加载RDB并保持runId不变。
在从节点启动时,加上配置参数 slaveof {masterHost} {masterPort},可建立与主节点的关系。
通过info replication命令查看节点当前复制配置内容

断开复制

从节点使用slaveof no one命令断开与主节点的连接,切换到新主节点会清空当前从节点数据,再进行全量复制。

密码验证

主节点配置requirepass参数进行密码验证,从节点连接时需要配置masterauth参数与主节点密码一致。

只读

从节点一般设置slave-read-only=true开启只读模式,只复制主节点过来的命令。

传输延迟

主从节点通过网络连接,可能会存在延迟,通过参数repl-disavle-tcp-nodelay控制TCP_NODELAY,默认为no即开启。

  • 当关闭时,主节点的数据会及时发送给从节点,增加带宽消耗,在同一机房中适用
  • 当开启时,主节点的数据发送由系统控制,会合并成数据包再发送,发送时间间隔一般是40ms,能节省带宽

主从拓扑结构

一般分为一主一从、一主多从、树形结构(从节点作为中间节点向下传播数据)

复制流程及原理

  1. slaveof保存主节点内容
  2. 主从节点建立socket连接
  3. 从节点发送ping命令检测是否一切正常,主节点返回pong命令回应
  4. 权限验证,如果配置了密码那就需要验证
  5. 同步数据集,开始复制(2.8版本后使用psync进行同步)
    同步需要了解主从节点命令字节偏移量(offset:节点保存当前复制的位置,通过info replication查看)、复制积压缓冲区(写命令同时保存到缓冲区队列)、runId(唯一识别节点标志)
    • 从节点发送psync {runId | ?} {offset}
    • 主节点根据runId是否相同返回3种响应
      • FULLRESYNC: 全量复制,主节点执行bgsave,保存RDB文件到本地,然后发送给从节点。如果RDB文件从创建到发送完毕耗时超过repl-timeout(默认60s),会导致全量复制失败。
        对于从节点开始接受RDB文件到接受完成,主节点响应写命令后会写入复制客户端缓冲区,当从节点加载RDB完成后,再发送缓存区内容。可以通过client=output-buffer-limit 256MB 64MB 60配置。从节点加载完成后,根据AOF设置可能会发起AOF持久化命令。
      • CONTINUE: 部分复制,主节点根据接收的命令中{offset}从复制积压缓冲区查找后续命令补发给从节点。若在repl-backlog-buffer找不到{offset}会升级为全量复制。
      • ERR: 无法识别psync命令,从节点将发送sync触发全量复制流程。
  6. 主节点持续发送写命令给从节点保持数据一致

心跳检查

主从连接在建立复制后,维护着长连接并彼此发送心跳命令。

  • 通过client list查看节点信息,主节点连接状态flags=M,从节点连接状态flags=S
  • 主节点每隔10秒发送ping命令判断从节点的存活性,通过repl-ping-slave-period控制
  • 从节点每隔1秒发送replconf ack {offset}上报复制偏移量。通过min-slaves-to-write,min-slaves-max-lag(lag是主从最后一次通信延迟的秒数)配置

复制需要注意的地方

  • 复制数据延迟:宽带延迟和主节点fork阻塞可能会导致数据延迟,从从节点读数据时,最新数据可能不存在
  • 读到过期数据:过期键是通过主节点惰性删除、定时删除(快、慢),再发送删除命令给从节点
  • 主从配置不一致:如maxmemory,maxmemory-poricy或压缩参数不一致时,会导致主从节点数据不一致
  • 全量复制:会严重消耗机器资源,需要尽量避免,如第一次建立复制,切换主节点,复制积压缓冲区过小等会导致全量复制。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容