濮阳杆衣贸易有限公司

主頁 > 知識庫 > Redis主從配置和底層實現(xiàn)原理解析(實戰(zhàn)記錄)

Redis主從配置和底層實現(xiàn)原理解析(實戰(zhàn)記錄)

熱門標(biāo)簽:山東外呼銷售系統(tǒng)招商 魔獸2青云地圖標(biāo)注 十堰營銷電銷機器人哪家便宜 鄭州人工智能電銷機器人系統(tǒng) 北京400電話辦理收費標(biāo)準(zhǔn) 日本中國地圖標(biāo)注 宿遷便宜外呼系統(tǒng)平臺 超呼電話機器人 貴州電銷卡外呼系統(tǒng)

我們使用Redis的時候往往都是主從模式或者集群架構(gòu),不會使用單臺Redis服務(wù)。

一、Redis主從配置實戰(zhàn)

我們使用master節(jié)點寫輸入,然后將數(shù)據(jù)同步到slave節(jié)點,從節(jié)點可以提供讀取或者備份的功能,分擔(dān)master節(jié)點壓力。

redis主從架構(gòu)搭建,配置從節(jié)點步驟

1、 復(fù)制一份redis.conf文件為redis-6380.conf

cp ./redis.conf ./conf/redis-6380.conf

2、打開redis-6380.conf配置文件,將相關(guān)配置修改為如下值:

port 6380
pidfile /var/run/redis_6380.pid # 把pid進程號寫入pidfile配置的文件
logfile "6380.log"
dir /usr/local/redis‐5.0.3/data/6380 # 指定數(shù)據(jù)存放目錄
# 需要注釋掉bind
# bind 127.0.0.1(bind綁定的是自己機器網(wǎng)卡的ip,如果有多塊網(wǎng)卡可以配多個ip,代表允許客戶端通過機器的哪些網(wǎng)卡ip去訪問,內(nèi)網(wǎng)一般可以不配置bind,注釋掉即可)

3、在redis-6380.conf中配置主從復(fù)制

replicaof 192.168.0.60 6379 # 從本機6379的redis實例復(fù)制數(shù)據(jù),Redis 5.0之前使用slaveof. 這里的IP是redis服務(wù)IP
replica‐read‐only yes # 配置從節(jié)點只讀

注意: 如果的時候發(fā)現(xiàn)從節(jié)點中始終是空,即沒有同步到主節(jié)點的數(shù)據(jù),可能是192.168.0.60的設(shè)置問題,如果是主從都在一臺服務(wù)器上,可以試試改成127.0.0.1.
4、啟動從節(jié)點

注意一下命令,我這里是相對路徑。

 ./src/redis-server ./conf/redis-6380.conf 

然后我們查看redis服務(wù)實例,發(fā)現(xiàn)6379和6380都已經(jīng)啟動了。

5、連接從節(jié)點

[root@localhost redis-6.2.3]# ./src/redis-cli -p 6380
127.0.0.1:6380>

查看是否同步了數(shù)據(jù):

127.0.0.1:6380> keys *
1) "test3"
2) "tul2"
3) "tul"
4) "tul3"
5) "test1"
6) "yaolao"
7) "test2"
127.0.0.1:6380> 

注意: 如果的時候發(fā)現(xiàn)從節(jié)點中始終是空,即沒有同步到主節(jié)點的數(shù)據(jù),可能是192.168.0.60的設(shè)置問題,如果是主從都在一臺服務(wù)器上,可以試試改成127.0.0.1試試。、

6、測試在6379實例上寫數(shù)據(jù),6380實例是否能及時同步新修改數(shù)據(jù)

7、可以自己再配置一個6381的從節(jié)點

至此。,我們的主從配置就完成了。我們可以自己去配置多個從節(jié)點。

二、主從實現(xiàn)原理

如果你為master配置了一個slave,不管這個slave是否是第一次連接上Master,它都會發(fā)送一個PSYNC命令給master請求復(fù)制數(shù)據(jù)。

master收到PSYNC命令后,會在后臺進行數(shù)據(jù)持久化通過bgsave生成最新的rdb快照文件,持久化期間,master會繼續(xù)接收客戶端的請求,它會把這些可能修改數(shù)據(jù)集的請求緩存在內(nèi)存中。當(dāng)持久化進行完畢以后,master會把這份rdb文件數(shù)據(jù)集發(fā)送給slave,slave會把接收到的數(shù)據(jù)進行持久化生成rdb,然后再加載到內(nèi)存中。然后,master再將之前緩存在內(nèi)存中的命令發(fā)送給slave。

當(dāng)master與slave之間的連接由于某些原因而斷開時,slave能夠自動重連Master,如果master收到了多
個slave并發(fā)連接請求,它只會進行一次持久化,而不是一個連接一次,然后再把這一份持久化的數(shù)據(jù)發(fā)送
給多個并發(fā)連接的slave。

主從復(fù)制(全量復(fù)制)流程圖

psync命令是redis底層的C語言實現(xiàn)的。

數(shù)據(jù)部分復(fù)制

當(dāng)master和slave斷開重連后,一般都會對整份數(shù)據(jù)進行復(fù)制。但從redis2.8版本開始,redis改用可以支持部分?jǐn)?shù)據(jù)復(fù)制的命令PSYNC去master同步數(shù)據(jù),slave與master能夠在網(wǎng)絡(luò)連接斷開重連后只進行部分?jǐn)?shù)據(jù)復(fù)制(斷點續(xù)傳)。

master會在其內(nèi)存中創(chuàng)建一個復(fù)制數(shù)據(jù)用的緩存隊列,緩存最近一段時間的數(shù)據(jù),master和它所有的slave都維護了復(fù)制的數(shù)據(jù)下標(biāo)offset和master的進程id,因此,當(dāng)網(wǎng)絡(luò)連接斷開后,slave會請求master繼續(xù)進行未完成的復(fù)制,從所記錄的數(shù)據(jù)下標(biāo)開始。如果master進程id變化了,或者從節(jié)點數(shù)據(jù)下標(biāo)offset太舊,已經(jīng)不在master的緩存隊列里了,那么將會進行一次全量數(shù)據(jù)的復(fù)制。

主從復(fù)制(部分復(fù)制,斷點續(xù)傳)流程圖:

如果slave節(jié)點掛了之后,只想同步新增的數(shù)據(jù)(不需要同步全部)。

最新的命令redis會寫到repl backlog buffer(默認(rèn)大小是1MB)這個緩沖區(qū)中。

offset是偏移量,即上次復(fù)制產(chǎn)生的偏移量,再一次復(fù)制新的數(shù)據(jù)的時候只需要從這個偏移量后面開始復(fù)制即可。注意,這種只適合幾分鐘之內(nèi)的。

如果從緩沖區(qū)沒有找到傳過來的這個偏移量,說明從節(jié)點可能掛了非常久的時間,這時候需要做全量復(fù)制,而不是斷點續(xù)傳了。

緩解主從復(fù)制風(fēng)暴

如果有很多從節(jié)點,為了緩解主從復(fù)制風(fēng)暴(多個從節(jié)點同時復(fù)制主節(jié)點導(dǎo)致主節(jié)點壓力過大),可以做如下架構(gòu),讓部分從節(jié)點與從節(jié)點(與主節(jié)點同步)同步數(shù)據(jù),即配置主從的ip地址可以寫某個從節(jié)點的,而不是都寫mast節(jié)點的IP.

到此這篇關(guān)于Redis主從配置和底層實現(xiàn)原理解析(實戰(zhàn)記錄)的文章就介紹到這了,更多相關(guān)Redis主從配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • WINDOWS中REDIS主從配置實現(xiàn)代碼解析
  • Docker下redis的主從配置教程詳解
  • redis的主從配置方法詳解

標(biāo)簽:果洛 江蘇 北京 朝陽 吉安 大慶 楊凌 臺州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis主從配置和底層實現(xiàn)原理解析(實戰(zhàn)記錄)》,本文關(guān)鍵詞  Redis,主從,配置,和,底層,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis主從配置和底層實現(xiàn)原理解析(實戰(zhàn)記錄)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Redis主從配置和底層實現(xiàn)原理解析(實戰(zhàn)記錄)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    富源县| 抚顺市| 枣强县| 邵阳县| 高州市| 沐川县| 怀化市| 仙游县| 嘉义县| 襄汾县| 北辰区| 鄂州市| 忻州市| 天长市| 平远县| 昌邑市| 邵武市| 措美县| 墨脱县| 台前县| 类乌齐县| 桐柏县| 龙里县| 旺苍县| 宾阳县| 小金县| 塔城市| 丰原市| 金沙县| 荔波县| 蒲江县| 陆河县| 明星| 蓬溪县| 金湖县| 江华| 奈曼旗| 电白县| 南投县| 德令哈市| 宣城市|