聊聊Redis6中的主從復(fù)制架構(gòu),看看它有何特點(diǎn)!

本篇文章帶大家了解redis6中的主從復(fù)制架構(gòu),介紹一下redis6主從復(fù)制有何特點(diǎn),希望對(duì)大家有所幫助!

聊聊Redis6中的主從復(fù)制架構(gòu),看看它有何特點(diǎn)!

主從復(fù)制的介紹

主從復(fù)制,是指將一臺(tái)Redis服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器。前者為主節(jié)點(diǎn)(master),后者成為從節(jié)點(diǎn)(slave);數(shù)據(jù)的復(fù)制都是單向的,只能由主節(jié)點(diǎn)到從節(jié)點(diǎn)。默認(rèn)情況下,每臺(tái)Redis服務(wù)器都是一個(gè)主節(jié)點(diǎn),且一個(gè)主節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)(或者沒(méi)有從節(jié)點(diǎn)),但一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn)。【相關(guān)推薦:Redis視頻教程

使用主從復(fù)制的好處:讀寫(xiě)分離,能夠擴(kuò)展主節(jié)點(diǎn)的讀能力,給主節(jié)點(diǎn)分擔(dān)壓力。容災(zāi)恢復(fù),一旦主節(jié)點(diǎn)宕機(jī),可以在從節(jié)點(diǎn)作為主節(jié)點(diǎn)的備份隨時(shí)可以頂上來(lái)。

架構(gòu)介紹

從節(jié)點(diǎn)復(fù)制了主節(jié)點(diǎn)的數(shù)據(jù),復(fù)制之后我們就可以做一個(gè)讀寫(xiě)分離。如果是單節(jié)點(diǎn)的話,應(yīng)用程序的請(qǐng)求都集中在主節(jié)點(diǎn),但有了從節(jié)點(diǎn)之后可以承擔(dān)部分的讀壓力。主節(jié)點(diǎn)就可以做讀寫(xiě)操作,而從節(jié)點(diǎn)只做讀操作。這樣便給主節(jié)點(diǎn)分擔(dān)壓力了。

Redis主從復(fù)制,一主二從架構(gòu)環(huán)境準(zhǔn)備

說(shuō)了那么多概念咱們就開(kāi)始動(dòng)手部署Redis的主從復(fù)制架構(gòu)吧,這次我們部署的是一主二從的架構(gòu)。

#創(chuàng)建文件 mkdir?-p?/data/redis/master/data mkdir?-p?/data/redis/slave1/data mkdir?-p?/data/redis/slave2/data  #從節(jié)點(diǎn)開(kāi)啟只讀模式(默認(rèn)) replica-read-only?yes  #從節(jié)點(diǎn)訪問(wèn)主節(jié)點(diǎn)的密碼,和requirepass?樣 masterauth?123456 ???? #哪個(gè)主節(jié)點(diǎn)進(jìn)?復(fù)制 replicaof?8.129.113.233?6379

首先創(chuàng)建一個(gè)主節(jié)點(diǎn),在data/redis/master/data目錄下touch一個(gè)redis.conf文件,編輯redis.conf文件

bind?0.0.0.0 port?6379 daemonize?yes requirepass?"123456" logfile?"/usr/local/redis/log/redis1.log" dbfilename?"xdclass1.rdb" dir?"/usr/local/redis/data" appendonly?yes appendfilename?"appendonly1.aof" masterauth?"123456"

接著創(chuàng)建從節(jié)點(diǎn)1,在data/redis/slave1/data目錄下建redis.conf

bind?0.0.0.0 port?6380 daemonize?yes requirepass?"123456" logfile?"/usr/local/redis/log/redis2.log" dbfilename?"xdclass2.rdb" dir?"/usr/local/redis/data" appendonly?yes appendfilename?"appendonly2.aof" replicaof?8.129.113.233?6379 masterauth?"123456"

創(chuàng)建從節(jié)點(diǎn)2,在data/redis/slave2/data目錄下建redis.conf

bind?0.0.0.0 port?6381 daemonize?yes requirepass?"123456" logfile?"/usr/local/redis/log/redis3.log" dbfilename?"xdclass3.rdb" dir?"/usr/local/redis/data" appendonly?yes appendfilename?"appendonly3.aof" replicaof?8.129.113.233?6379 masterauth?"123456"

注意:防火墻記得關(guān)閉,阿里云服務(wù)器記得開(kāi)放網(wǎng)絡(luò)安全組。

創(chuàng)建好后就開(kāi)始啟動(dòng)已經(jīng)配置好的節(jié)點(diǎn)

啟動(dòng)方式:

#啟動(dòng)主 ./redis-server/data/redis/master/data/redis.conf #啟動(dòng)從1 ./redis-server/data/redis/slave1/data/redis.conf #啟動(dòng)從2 ./redis-server/data/redis/slave2/data/redis.conf

使用info replication可以查看當(dāng)前節(jié)點(diǎn)的狀態(tài)

主從復(fù)制和讀寫(xiě)驗(yàn)證

1.在主節(jié)點(diǎn)創(chuàng)建一個(gè)key set?name?jack 2.在兩個(gè)從節(jié)點(diǎn)測(cè)試是否能拿到主節(jié)點(diǎn)的數(shù)據(jù) get?name 3.在從節(jié)點(diǎn)set?key是失敗的,因?yàn)閺墓?jié)點(diǎn)只支持讀操作

Redis6主從架構(gòu)-復(fù)制讀寫(xiě)分離原理解析

主從復(fù)制分為兩種:一種是主從剛開(kāi)始連接的時(shí)候,進(jìn)行全量同步;另一種是全同步結(jié)束后,進(jìn)行增量同步。

全量復(fù)制:master服務(wù)器會(huì)開(kāi)啟一個(gè)后臺(tái)的進(jìn)程用于將Redis的數(shù)據(jù)生成一個(gè)rdb文件,主服務(wù)器會(huì)緩存所有接受到的來(lái)自客戶端的寫(xiě)命令,當(dāng)后臺(tái)保存進(jìn)程后,會(huì)將rdb文件傳遞給slave服務(wù)器,這時(shí)候slave服務(wù)器就有了master服務(wù)器的數(shù)據(jù)了。在此之后,master服務(wù)器會(huì)將在此期間把緩存過(guò)來(lái)的命令通過(guò)redis傳輸協(xié)議發(fā)送給slave服務(wù)器,然后slave服務(wù)器再將這些命令依次用于自己本地上,最終達(dá)到數(shù)據(jù)的一致性

增量復(fù)制:主節(jié)點(diǎn)會(huì)有不斷的命令寫(xiě)進(jìn)來(lái),slave完成初始化后開(kāi)始工作時(shí)主服務(wù)器發(fā)送寫(xiě)的操作同步到服務(wù)器的過(guò)程就叫增量復(fù)制。增量復(fù)制是服務(wù)器每執(zhí)行一個(gè)寫(xiě)命令就會(huì)向從服務(wù)器發(fā)送相同的寫(xiě)命令,從服務(wù)器接受并執(zhí)行收到的寫(xiě)命令。

主從復(fù)制有何特點(diǎn):

主從復(fù)制對(duì)于主/從 服務(wù)器來(lái)說(shuō)都是非阻塞的,所有在同步數(shù)據(jù)期間都可以正常處理外界的請(qǐng)求,一個(gè)主節(jié)點(diǎn)可以包含有多個(gè)從節(jié)點(diǎn),每個(gè)從節(jié)點(diǎn)可以接受來(lái)自其他從節(jié)點(diǎn)的連接。從節(jié)點(diǎn)不會(huì)讓key過(guò)期,而是在主節(jié)點(diǎn)的key過(guò)期刪除后,發(fā)送刪除命令給從節(jié)點(diǎn)進(jìn)行刪除。

加速?gòu)?fù)制:在節(jié)點(diǎn)完成重新同步的時(shí)候需要在磁盤(pán)上創(chuàng)建一個(gè)RDB文件,然后加載這個(gè)文件來(lái)為從服務(wù)器發(fā)送數(shù)據(jù),但如果磁盤(pán)的速率比較低呢?這就會(huì)導(dǎo)致主節(jié)點(diǎn)與從節(jié)點(diǎn)的數(shù)據(jù)不一致。在新版的Redis中,支持無(wú)磁盤(pán)的復(fù)制,直接將RBD文件通過(guò)網(wǎng)絡(luò)發(fā)送的形式給從服務(wù)器,不在使用磁盤(pán)作為中間件。

如果主從連接斷開(kāi)的話,重新連接后可以從中斷的地方繼續(xù)進(jìn)行復(fù)制,而不用重新同步。在2.8版本后,重新同步的這個(gè)新特性使用PSYNC命令,而舊的使用SYNC命令

更多編程相關(guān)知識(shí),請(qǐng)?jiān)L問(wèn):Redis視頻教程!!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享