redis主从

简介

  1. 主从服务器的功能区别。
  2. 主从服务器的连接建立。
  3. 主从服务器之间的数据同步流程。
  4. 连接建立时的全量数据同步。
  5. 主从状态同步后的增量同步更新。

主从服务器的功能

  1. 主服务器接受读写请求,从服务器只接受读请求。通常如果是主从模式,client会通过proxy来访问redis,proxy会对请求进行解析,如果是写请求,转发给master_redis,如果是读请求,则转发给slave_redis。


    redis主从关系图

主从服务器的连接建立

前提:通过github下载了最新的redis源码,并且通过make的方式编译好了可执行文件。切到redis/src/路径下。

  1. 启动所有的redis服务器,包括master和slave服务器。假设以如下方式启动了3个redis-server。
./redis-server --port 6377
./redis-server --port 6378
./redis-server --port 6379

其中以6377服务器作为master。

  1. 通过redis-cli分别连接到从服务器6378和6379,输入以下命令。
./redis-cli -p 6378
./redis-cli -p 6379
  1. 在redis-cli中输入以下命令将6378和6379设为slave服务器。
slaveof 127.0.0.1 6378
slaveof 127.0.0.1 6379

此时会看到6377的master_redis服务器输出了以下日志:


master的日志
  1. 测试主从效果,连接主redis 6377,输入set master 6377。分别连接6378和6379,输入get master可获得"6377"
  2. slave服务器和主断开连接成为新的主,命令:
slaveof no one
  1. 总结:通过使用redis原生的主从功能,可以发现,主从机制可以有效的分散来自客户端的数据读取的压力,但是写数据依然是瓶颈并且未突破单机上限,总的存储功能受限于所在的主机的内存和磁盘。而且需要通过客户端手动配置主从,非常的落后,还需要健全的配套设施辅助主从功能。

主从服务器的数据同步流程

  1. 从服务器首次连到主服务器时,主服务器将数据全量的同步到从服务器中,通常使用RDB的方式,将内存数据以RDB的方式打包,然后通过网络传输到从服务器中。
  2. 当从服务器收到了主服务器通过过来的全量数据后,后续的数据采用增量的方式将数据同步给slave服务器。
  3. 主从服务器状态一致性的判定。
  4. 主从服务器网络波动导致状态不一致时,断线重连。

主从服务器的连接建立和同步全量数据

slave服务器:

  1. 连接建立。在serverCron中定期执行replicationCron,调用connectWithMaster和master服务器建立连接。
  2. 在syncWithMaster 刚建立连接时通过该处理函数来做一些信息同步。
  3. 在readSyncBulkPayload 建立连接后 首先需要同步一次全量的主的数据 通过该函数来接受master的RDB文件,之后再replicationCreateMasterClient 承接上一步在这里一路设置处理函数为下面的readQueryFromClient。
  4. 后续网络事件处理函数都调用readQueryFromClient进行处理。由于后续Master会把写命令同步给slave服务器,因此从服务器可以把master服务器作为客户端进行处理,处理其传输过来的每一个命令。
    master服务器:
  5. 始终使用通用的readQueryFromClient处理函数处理网络消息,将Slave服务器作为特殊的客户端进行处理。

主从服务器增量同步数据更新

  1. master定时发送 "REPLCONF GETACK"获取slave服务器的一些信息。
  2. slave服务器调用replconfCommand命令处理replconf请求,该函数会回发 "REPLCONF ACK c->reploff" 返回其已经接收到的包的字节数。
  3. master收到slave的ack后,修改slave服务器收到的字符的长度,后续已收到的字节将不再发送给slave。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350