6.1、配置

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用的。复制也是Redis日常运维的常见维护点。因此深刻理解复制的工作原理与使用技巧对我们日常开发运维非常有帮助。本章内容如下:

  • 介绍复制的使用方式:如何建立或断开复制、安全性、只读等。

  • 说明复制可支持的拓扑结构,以及每个拓扑结构的适用场景。

  • 分析复制的原理,包括:建立复制、全量复制、部分复制、心跳等。

  • 介绍复制过程中常见的开发和运维问题:读写分离、数据不一致、规避全量复制等。

配置

  1. 建立复制

    参与复制的Redis实例划分为主节点(master)和从节点(slave)。默认情况下,Redis都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。配置复制的方式有以下三种:

    1)在配置文件中加入slaveof{masterHost{ {masterPort}随Redis启动生效。

    2)在redis-server启动命令后加入--slaveof {masterHost} {masterPort}

    3)直接使用命令:slaveof {masterHost} {masterPort}生效。

    综上所述,slaveof命令在使用时,可以运行其动态配置,也可以提前写到配置文件中。例如本地启动两个端口为6379和6380的Redis节点,在127.0.0.1:6380执行如下命令:

    127.0.0.1:6380> slaveof 127.0.0.1:6379
    

    slaveof配置都是从节点发起,这时6379作为主节点,6380作为从节点。复制关系建立后执行如下命令测试:

    127.0.0.1:6380> set hello redis
    OK
    127.0.0.1:6380> get hello
    "redis"
    127.0.0.1:6380> hello
    "redis"
    

    从运行结果中看到复制已经工作了,针对主节点6379的任何修改都可以同步到从节点6380中。

    slaveof本身是异步命令,执行slaveof命令时,节点只保存主节点信息后返回,后续复制流程在节点内部异步执行,具体细节见之后复制原理小节。主从节点复制成功建立后,可以使用info replication命令查看复制相关状态,如下所示:

    1)主节点6379复制状态信息:

    127.0.0.1:6380> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=127.0.0.1=6379,state=online,offset=43,lag=0
    

    2)从节点6380复制状态信息:

    127.0.0.1:6380> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6380
    master_link_status:up
    master_last_io_seconds_ago:4
    master_sync_in_progress:0
    ...
    
  2. 断开复制

    slaveof命令不但可以建立复制,还可以在从节点执行slaveof no one来断开与主节点复制关系。例如在6380节点上执行slaveof no one来断开复制。

    断开复制主要流程:

    1)断开与主节点复制关系

    2)从节点晋升为主节点。

    从节点断开复制后并不会抛弃原有数据,只是无法再获取主节点上的数据变化。

    通过slaveof命令还可以实现切主操作,所谓切主操作是指把当前从节点对主节点的复制切换到另一个主节点。执行slaveof {newMasterIp} {newMasterPort}命令即可,例如把6380节点从原来的复制6379节点变为复制6381节点。

    切主操作流程如下:

    1)断开与旧主节点复制关系。

    2)与新主节点建立复制关系。

    3)删除从节点当前所有数据。

    4)对新主节点进行复制操作。

    运维提示:切主后从节点会清空之前所有的数据,线上人工操作时小心slaveof在错误的节点上执行或者指向错误的主节点。

  3. 安全性

    对于数据比较重要的节点,主节点会通过设置requirepass参数进行密码验证,这是所有的客户端访问必须使用auth命令实行校验。从节点与主节点的复制链接是通过一个特殊标识的客户端来完成,因此需要配置从节点的masterauth参数与主节点密码保持一致,这样从节点才可以正确地连接到主节点并发起复制流程。

  4. 只读

    默认情况下,从节点使用slave-read-only-yes配置为只读模式。由于复制只能从主节点到从节点,对于从节点的任何修改主节点都无法感知,修改从节点会造成主从数据不一致。因此建议不要修改从节点的只读模式。

  5. 传输延迟

    主从节点一般部署在不同机器上,复制时的网络延迟就成为需要考虑的问题,Redis为我们提供了repl-disable-tcp-nodelay参数用于口控制是否关闭TCP_NODELAY,默认关闭,说明如下:

    • 当关闭时,主节点产生的命令数据无论大小都会及时地发送给从节点,这样主从之间延迟会变小,但增加了网络带宽的消耗。适用于主从之间的网络环境良好的场景,如同机架或同机房部署。

    • 当开启时,主节点会合并较小的TCP数据包从而节省带宽。默认发送时间间隔取决于Linux的内核,一般默认为40秒。这种配置节省了带宽但增大了主从之间的延迟。适用于主从网络环境复杂或带宽紧张的场景,如跨机房部署。

    运维提示:部署主从节点时需要考虑网络延迟、带宽使用率、防灾级别等因素,如要求低延迟时,建议同机架会同机房部署并关闭repl-disable-tcp-nodelay;如果考虑高容灾性,可以同城跨机房部署并开启repl-disable-tcp-nodelay.

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

推荐阅读更多精彩内容

  • 本篇就一下方面展开分析 如何使用主从复制? 主从复制的原理(重点是全量复制和部分复制、以及心跳机制) 实际应用中需...
    lucode阅读 994评论 0 5
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,291评论 0 36
  • Redis Sentinel 介绍与部署 1. Sentinel介绍 1.1 主从复制的问题 Redis主从复制可...
    56c60a7e3495阅读 1,016评论 0 1
  • 周末,由于面临失去工作的压力,不愿轻易对孩子发脾气的我,在宝贝撒娇任性的不愿洗手吃饭去上早教的时候,心中的...
    创造与希望阅读 324评论 0 1
  • 满满回忆的一道菜,做法很简单。买一个豆豉鲮鱼的罐头,买一些油麦菜。油麦菜洗净,从中间掐两段,不用刀。 锅里放油,可...
    郝江龙阅读 222评论 0 1