一扳还、Redis集群主從復(fù)制(一主兩從)
Redis 集群對(duì)節(jié)點(diǎn)使用了主從復(fù)制功能: 集群中的每個(gè)節(jié)點(diǎn)都有 1 個(gè)至 N 個(gè)復(fù)制品(replica)靖诗, 其中一個(gè)復(fù)制品為主節(jié)點(diǎn)(master), 而其余的 N-1 個(gè)復(fù)制品為從節(jié)點(diǎn)(slave)航揉。
簡(jiǎn)單的來(lái)說(shuō)就是一個(gè)主節(jié)點(diǎn)master可以擁有一個(gè)甚至多個(gè)從節(jié)點(diǎn)的slave,而一個(gè)slave又可以擁有多個(gè)slave,如此下去徙缴,形成了強(qiáng)大的多級(jí)服務(wù)器集群架構(gòu)。
其中主節(jié)點(diǎn)以寫(xiě)為主(可寫(xiě)也可以讀)嘁信,從節(jié)點(diǎn)只能讀不可寫(xiě)入于样!【讀寫(xiě)分離場(chǎng)景】
其中主節(jié)點(diǎn)寫(xiě)入的數(shù)據(jù)會(huì)同步(不是準(zhǔn)實(shí)時(shí)的)到salve上,這樣如果主節(jié)點(diǎn)出現(xiàn)故障潘靖,數(shù)據(jù)丟失穿剖,則可以通過(guò)salve進(jìn)行恢復(fù)∝砸纾【容災(zāi)恢復(fù)場(chǎng)景糊余,注:因?yàn)閿?shù)據(jù)不是實(shí)時(shí)同步的,可能會(huì)存在從salve恢復(fù)數(shù)據(jù)后有數(shù)據(jù)丟失問(wèn)題】
綜上:下面是關(guān)于redis主從復(fù)制的一些特點(diǎn):
1.一個(gè)master可以有多個(gè)slave
2.除了多個(gè)slave連到相同的master外单寂,slave也可以連接其他slave形成圖狀結(jié)構(gòu)
3.主從復(fù)制不會(huì)阻塞master贬芥。也就是說(shuō)當(dāng)一個(gè)或多個(gè)slave與master進(jìn)行初次同步數(shù)據(jù)時(shí),master可以繼續(xù)處理client發(fā)來(lái)的請(qǐng)求凄贩。相反slave在初次同步數(shù)據(jù)時(shí)則會(huì)阻塞不能處理client的請(qǐng)求誓军。
4.主從復(fù)制可以用來(lái)提高系統(tǒng)的可伸縮性,我們可以用多個(gè)slave 專門(mén)用于client的讀請(qǐng)求,比如sort操作可以使用slave來(lái)處理疲扎。也可以用來(lái)做簡(jiǎn)單的數(shù)據(jù)冗余
5.可以在master禁用數(shù)據(jù)持久化昵时,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數(shù)據(jù)持久化椒丧。
6.可以用于讀寫(xiě)分離和容災(zāi)恢復(fù)壹甥。
二、Redis主從復(fù)制的常用的幾種方式
一主二仆 A(B壶熏、C) 一個(gè)Master兩個(gè)Slave
薪火相傳(去中心化)A - B - C 句柠,B既是主節(jié)點(diǎn)(C的主節(jié)點(diǎn)),又是從節(jié)點(diǎn)(A的從節(jié)點(diǎn))
反客為主(主節(jié)點(diǎn)down掉后棒假,手動(dòng)操作升級(jí)從節(jié)點(diǎn)為主節(jié)點(diǎn)) & 哨兵模式(主節(jié)點(diǎn)down掉后溯职,自動(dòng)升級(jí)從節(jié)點(diǎn)為主節(jié)點(diǎn))
三、Redis主從復(fù)制的搭建(一主二仆)
一主二仆帽哑,和反客為主模式谜酒。
- 修改redis.windows.conf配置
6381文件夾,修改如下:
slaveof <masterip> <masterport>
slaveof 127.0.0.1 6380
6382文件夾:
port 6382
slaveof 127.0.0.1 6380
- 創(chuàng)建腳本start-server.bat
redis-server redis.windows.conf
- 啟動(dòng)測(cè)試
啟動(dòng)規(guī)則:先啟動(dòng)主節(jié)點(diǎn)妻枕,然后在啟動(dòng)從節(jié)點(diǎn)僻族!
6380:
D:\6380>start-server.bat
6381:
6382:
-
查看主從信息
主從信息
四粘驰、一主二仆測(cè)試
-
測(cè)試讀寫(xiě),【主節(jié)點(diǎn)可讀可寫(xiě)述么,從節(jié)點(diǎn)只能讀不可寫(xiě)】
讀寫(xiě)測(cè)試 -
測(cè)試當(dāng)主節(jié)點(diǎn)shutdown后蝌数,從節(jié)點(diǎn)的狀態(tài)【從節(jié)點(diǎn)可讀,從節(jié)點(diǎn)也不會(huì)升級(jí)為主節(jié)點(diǎn)】
不會(huì)升級(jí)
- 測(cè)試當(dāng)主節(jié)點(diǎn)重新啟動(dòng)后度秘,從節(jié)點(diǎn)的狀態(tài)【從節(jié)點(diǎn)依然可以連接主節(jié)點(diǎn)】
-
反客為主
測(cè)試當(dāng)主節(jié)點(diǎn)shutdown后顶伞,使用slaveof no one 是的6380成為主節(jié)點(diǎn),但是也只是主節(jié)點(diǎn),沒(méi)有任何從節(jié)點(diǎn)敷钾!
主機(jī)關(guān)閉
使用slaveof no one命令變?yōu)橹鳌?/p>
(error) ERR unknown command 'slave'
127.0.0.1:6382> slave no one
(error) ERR unknown command 'slave'
127.0.0.1:6382> slaveof no one
OK
127.0.0.1:6382> info replication
五枝哄、Redis主從復(fù)制的原理
當(dāng)設(shè)置好slave服務(wù)器后,slave會(huì)建立和master的連接,然后發(fā)送sync命令阻荒。
Master接到命令啟動(dòng)后臺(tái)的存盤(pán)進(jìn)程挠锥,同時(shí)收集所有接收到的用于修改數(shù)據(jù)集命令,在后臺(tái)進(jìn)程執(zhí)行完畢之后侨赡,master將傳送整個(gè)數(shù)據(jù)文件到slave,以完成一次完全同步蓖租。
全量復(fù)制:而slave服務(wù)在接收到數(shù)據(jù)庫(kù)文件數(shù)據(jù)后,將其存盤(pán)并加載到內(nèi)存中羊壹。(第一次全量)
增量復(fù)制:Master繼續(xù)將新的所有收集到的修改命令依次傳給slave,完成同步蓖宦。(之后增量)
但是只要是重新連接master,一次完全同步(全量復(fù)制)將被自動(dòng)執(zhí)行。
當(dāng)設(shè)置好slave服務(wù)器后油猫,slave會(huì)建立和master的連接稠茂,然后發(fā)送sync命令。無(wú)論是第一次同步建立的連接還是連接斷開(kāi)后的重新連接情妖,master都會(huì)啟動(dòng)一個(gè)后臺(tái)進(jìn)程睬关,將數(shù)據(jù)庫(kù)快照保存到文件中,同時(shí)master主進(jìn)程會(huì)開(kāi)始收集新的寫(xiě)命令并緩存起來(lái)毡证。后臺(tái)進(jìn)程完成寫(xiě)文件 后电爹,master就發(fā)送文件給slave,slave將文件保存到磁盤(pán)上料睛,然后加載到內(nèi)存恢復(fù)數(shù)據(jù)庫(kù)快照到slave上丐箩。接著master就會(huì)把緩存的命令轉(zhuǎn)發(fā)給slave。而且后續(xù)master收到的寫(xiě)命令都會(huì)通過(guò)開(kāi)始建立的連接發(fā)送給slave恤煞。從master到slave的同步數(shù)據(jù)的命令和從 client發(fā)送的命令使用相同的協(xié)議格式屎勘。當(dāng)master和slave的連接斷開(kāi)時(shí)slave可以自動(dòng)重新建立連接。如果master同時(shí)收到多個(gè) slave發(fā)來(lái)的同步連接命令居扒,只會(huì)使用啟動(dòng)一個(gè)進(jìn)程來(lái)寫(xiě)數(shù)據(jù)庫(kù)鏡像挑秉,然后發(fā)送給所有slave。
六苔货、Redis主從復(fù)制(一主兩從/一主多從)的分析
- IO劇增
每次slave斷開(kāi)以后(無(wú)論是主動(dòng)斷開(kāi)犀概,還是網(wǎng)路故障)再連接master都要將master全部dump出來(lái)rdb,在aof夜惭,即同步的過(guò)程都要重新執(zhí)行一遍姻灶;所以要記住多臺(tái)slave不要一下都啟動(dòng)起來(lái),否則master可能IO劇增(間隔1-2分) - 復(fù)制延遲
由于所有的寫(xiě)操作都是先在Master上操作诈茧,然后同步更新到Slave上产喉,所以從Master同步到Slave機(jī)器有一定的延遲,當(dāng)系統(tǒng)很繁忙的時(shí)候敢会,延遲問(wèn)題會(huì)更加嚴(yán)重曾沈,Slave機(jī)器數(shù)量的增加也會(huì)使這個(gè)問(wèn)題更加嚴(yán)重。 - 可用性不高
當(dāng)有主節(jié)點(diǎn)發(fā)生異常情況鸥昏,就會(huì)導(dǎo)致不能寫(xiě)入塞俱,導(dǎo)致業(yè)務(wù)出錯(cuò)!