Redis主從復(fù)制

Redis主從復(fù)制是什么?

行話:也就是我們所說(shuō)的主從復(fù)制技潘,主機(jī)數(shù)據(jù)更新后根據(jù)配置和策略粮呢,

自動(dòng)同步到備機(jī)的master/slaver機(jī)制,Master以寫為主嫩痰,Slave以讀為主剿吻。

Redis主從復(fù)制能干些什么?

(1)讀寫分離

(2)容災(zāi)恢復(fù)

Redis配置主從復(fù)制(1主2從)

知識(shí)注意:

(1)配從(庫(kù))不配主(庫(kù))

(2)從庫(kù)配置:slaveof 主庫(kù)IP 主庫(kù)端口

(3)info replication查看當(dāng)前redis節(jié)點(diǎn)信息(是主還是從等等)

redis配置1主2從

開(kāi)始配置:

這里做演示是裝在一臺(tái)機(jī)器上串纺,方便學(xué)習(xí)(生產(chǎn)環(huán)境是裝在不同機(jī)器上的)

我們這里并不安裝三個(gè)redis和橙,而是已copy三個(gè)配置文件來(lái)區(qū)分。

分別是:redis6379.conf造垛,redis6380.conf魔招,redis6381.conf

修改配置文件內(nèi)容:(這里的修改都是為了區(qū)分不同機(jī)器,6379就是端口號(hào))

daemonize yes:開(kāi)啟后臺(tái)啟動(dòng)

pid?/var/run/redis6379.pidpid文件以端口號(hào)來(lái)區(qū)分

P ort 6379指定端口

logfile "redis6379.log"指定log文件名字

dbfilename dump6379.rdb這里使用的是rdb持久化方式五辽,那么就修改rdb快照文件名

(每個(gè)配置文件都需要修改)


修改好配置文件后办斑,分別啟動(dòng)三個(gè)redis進(jìn)程:

../bin/redis-server redis6379.conf

../bin/redis-server redis6380.conf

../bin/redis-server redis6381.conf


查看是否啟動(dòng)成功:

可以看到redis三個(gè)進(jìn)程分別在6380,6381,6379三個(gè)端口號(hào)啟動(dòng)了。

分別連接這三個(gè)redis進(jìn)程杆逗,查看當(dāng)前redis狀態(tài):

6379端口:

6380端口:

6381端口:

現(xiàn)在可以看到乡翅,三個(gè)redis進(jìn)程狀態(tài)都是master,都沒(méi)有slave罪郊。


開(kāi)始主從復(fù)制配置:

一個(gè)master蠕蚜,兩個(gè)slave。

定義:6379當(dāng)master悔橄,6380和6381都為slave

可以看到我們只是注意的地方:配從(庫(kù))不配主(庫(kù))

好的靶累,分別在6380和6381上的redis去關(guān)聯(lián)6379的redis:

slaveof 127.0.0.1 6379

(注意:我們這里是以命令方式去關(guān)聯(lián)主的腺毫,當(dāng)前redis關(guān)閉即失效。如果想要重新啟動(dòng)還能關(guān)聯(lián)主挣柬,那么需要再配置文件中配置潮酒。)


然后我們?cè)俨榭?380和6381端口redis的狀態(tài):

可以看到兩臺(tái)主機(jī)都已經(jīng)改成slave了,而且還標(biāo)識(shí)出master的信息邪蛔。

如果已經(jīng)出現(xiàn)以上圖片顯示急黎,那么代表1主2從配置成功了。


測(cè)試redis的1主2從

(1)slave1侧到、slave2是從頭開(kāi)始復(fù)制還是從切入點(diǎn)開(kāi)始復(fù)制?當(dāng)前主機(jī)器上已經(jīng)有了k1 k2 k3了勃教,從機(jī)器才關(guān)聯(lián)過(guò)來(lái),那么在從機(jī)器上能拿到k1 k2 k3嗎匠抗?

測(cè)試:

主服務(wù)器先寫key

從服務(wù)再去關(guān)聯(lián)主服務(wù)器故源,去拿key

答案是可以的!8昕取!分析一下壕吹,應(yīng)該是從機(jī)器關(guān)聯(lián)主機(jī)器時(shí)著蛙,會(huì)將主機(jī)器所有key都copy一份給從機(jī)器


(2)從機(jī)是否可以寫?set可否耳贬?主服務(wù)器是否可以讀呢踏堡?get可否

測(cè)試:

在從機(jī)上寫:redis會(huì)提示你只是一個(gè)從機(jī),是只能讀不能寫咒劲。

在主機(jī)上讀:可以讀顷蟆,主機(jī)可讀可寫

(3)主機(jī)shutdown后情況如何?從機(jī)是上位還是原地待命

測(cè)試:

主機(jī)shutdown:

查看從機(jī)狀態(tài):

可以看到腐魂,從機(jī)狀態(tài)還是沒(méi)有改變帐偎,從機(jī)是在原地待命


(4)主機(jī)又回來(lái)了后,主機(jī)新增記錄蛔屹,從機(jī)還能否順利復(fù)制削樊?

測(cè)試:

從新啟動(dòng)主機(jī),寫入一個(gè)k5

在從機(jī)上獲取k5:

從機(jī)上獲取k5成功兔毒。

得出結(jié)論:

主機(jī)回來(lái)后并且新增記錄漫贞,從機(jī)能順利復(fù)制主機(jī)上的數(shù)據(jù)。



5其中一臺(tái)從機(jī)down后情況如何育叁?依照原有它能跟上大部隊(duì)嗎迅脐?

測(cè)試:

關(guān)閉從機(jī),重新啟動(dòng)從機(jī)豪嗽。

主機(jī)寫入k6谴蔑,從機(jī)上獲取k6豌骏,會(huì)發(fā)現(xiàn)是不行的。

為什么呢树碱?安裝的時(shí)候已經(jīng)說(shuō)了:

(注意:我們這里是以命令方式去關(guān)聯(lián)主的肯适,當(dāng)前redis關(guān)閉即失效。如果想要重新啟動(dòng)還能關(guān)聯(lián)主成榜,那么需要再配置文件中配置框舔。)

如果不相信可以去看下當(dāng)前從機(jī)的狀態(tài),它已經(jīng)變成master了赎婚。

這里就不貼截圖了刘绣。


薪火相傳

什么是薪火相傳?

上一個(gè)slave可以是下一個(gè)slave的master挣输,slave同樣可以接收其他

slaves的連接和同步請(qǐng)求纬凤,那么該slave作為了鏈條中下一個(gè)的master,

可以有效減輕master的寫壓力。

?

注意:

中途變更轉(zhuǎn)向:會(huì)清除之前的數(shù)據(jù)撩嚼,重新建立拷貝最新的

?

設(shè)置薪火相傳

slaveof 新主庫(kù)IP 新主庫(kù)端口

?

我這里還是拿之前配好的6379,6380,6381來(lái)做案例停士。

主機(jī):6379

從機(jī):6380,6381

?

將6381指向6380,。6380還是指向6379(不變)完丽。

6381端口redis信息:

6380端口redis信息:

可以看到6380端口的redis還是slave恋技,但是它底下有一個(gè)slave,正是6381逻族,好的現(xiàn)在我們已經(jīng)配置成功了蜻底。


測(cè)試一下:在6379下修改個(gè)值,6380上一定是可以取到的聘鳞,看看6381上能不能取到

ok薄辅,6381上也是可以拿到值的,那么薪火相傳成功?倭АU境!搏嗡!


反客為主

什么是反客為主源请?

當(dāng)主機(jī)中宕機(jī)了,那么我們可以手動(dòng)的停止從機(jī)與主機(jī)的同步彻况,將從機(jī)轉(zhuǎn)成主機(jī)谁尸。再將其他的從機(jī)與當(dāng)前這臺(tái)主機(jī)同步數(shù)據(jù),另成一個(gè)體系纽甘。


命令介紹:

slaveof no one使當(dāng)前數(shù)據(jù)庫(kù)停止與其他數(shù)據(jù)庫(kù)的同步良蛮,轉(zhuǎn)成主數(shù)據(jù)庫(kù)。

?

反客為主案例:

假如現(xiàn)在主機(jī)掛掉了:這里是人為手動(dòng)關(guān)閉悍赢,模擬掛掉

查看從機(jī)狀態(tài):

這里可以發(fā)現(xiàn)master的狀態(tài)是down决瞳,那么現(xiàn)在將80端口redis設(shè)置為主機(jī)货徙,81端口redis做80端口的從機(jī):

slaveof no one使當(dāng)前數(shù)據(jù)庫(kù)停止與其他數(shù)據(jù)庫(kù)的同步,轉(zhuǎn)成主數(shù)據(jù)庫(kù)皮胡。

Info replication查看當(dāng)前redis的一個(gè)信息痴颊,可以發(fā)現(xiàn)當(dāng)前已經(jīng)是master了

再將81關(guān)聯(lián)到80上,再查看當(dāng)前81上的信息屡贺,就可以看到關(guān)聯(lián)的master是80的redis了蠢棱。

slaveof 127.0.0.1 6380


測(cè)試主從復(fù)制是否成功:

測(cè)試成功!甩栈!在80上寫數(shù)據(jù)泻仙,在81上可以讀取到。

Redis主從復(fù)制原理

全量復(fù)制:

slave啟動(dòng)成功連接到master后會(huì)發(fā)送一個(gè)sync命令

master接到命令啟動(dòng)后臺(tái)的存盤進(jìn)程量没,同時(shí)收集所有接收到的用于修改數(shù)據(jù)集命令玉转,

在后臺(tái)進(jìn)程執(zhí)行完畢之后,master將傳送整個(gè)數(shù)據(jù)文件到slave,以完成一次完全同步

而slave服務(wù)在接收到數(shù)據(jù)庫(kù)文件數(shù)據(jù)后殴蹄,將其存盤并加載到內(nèi)存中究抓。

?

增量復(fù)制:

master繼續(xù)將新的所有收集到的修改命令依次傳給slave,完成同步袭灯。

?

注意:

但是只要是重新連接master刺下,回自動(dòng)執(zhí)行一次完全同步(全量復(fù)制)


哨兵模式(sentinel)

什么是哨兵模式?

反客為主的自動(dòng)版妓蛮,能夠后臺(tái)監(jiān)控主機(jī)是否故障怠李,如果故障了根據(jù)投票數(shù)自動(dòng)將從庫(kù)轉(zhuǎn)換為主庫(kù)圾叼。


實(shí)現(xiàn)哨兵模式

我們還是使用6379,6380,6381機(jī)器來(lái)演示蛤克。

(先調(diào)回1主2從情況,這里就不演示了夷蚊。)

主機(jī):6379

從機(jī):6380构挤,6381

(1)在/usr/local/redis/conf下創(chuàng)建一個(gè)名為sentinel.conf的文件,并寫入內(nèi)容

sentinel monitor?被監(jiān)控?cái)?shù)據(jù)庫(kù)名字(自己起一個(gè)名字) 127.0.0.1 6379 1

上面最后一個(gè)數(shù)字1惕鼓,表示主機(jī)掛掉后salve投票看讓誰(shuí)接替成為主機(jī)筋现,得票數(shù)多的redis成為主機(jī)

注意:這里要監(jiān)控的是主機(jī)

(2)啟動(dòng)哨兵

這是我的目錄:

bin下面就是redis的一些啟動(dòng)腳本。

config下是我copy出來(lái)的redis配置文件和剛剛創(chuàng)建的sentinel.conf

到config目錄下執(zhí)行命令啟動(dòng)哨兵:

../bin/redis-sentinel sentinel.conf

注意:這里的命令根據(jù)不同的redis安裝目錄也是會(huì)不相同的箱歧。

好的矾飞,如果看到以上打印出得圖就是啟動(dòng)成功⊙叫希可以看到已經(jīng)在監(jiān)控6379了洒沦,而且還找到了6379的從機(jī)器6380和6381。


哨兵測(cè)試

(1)原有的master掛了价淌,會(huì)怎么樣申眼?

好的瞒津,我們測(cè)試一下,我們手動(dòng)讓6379掛掉括尸,看下哨兵會(huì)怎么處理巷蚪。


模擬6379宕機(jī):(手動(dòng)讓6379宕掉)

稍等一會(huì),看到哨兵日志:

這里已經(jīng)檢測(cè)到6379主機(jī)宕機(jī)濒翻,那么就會(huì)投票選出一個(gè)主機(jī)屁柏,這里可以看到的是選出的主機(jī)是6380。

?

我們?nèi)タ聪?380和6381的信息

6380:

6381:

以上截圖已經(jīng)可以看到肴焊,6380已經(jīng)成了主機(jī)前联,而且6381已經(jīng)改變了關(guān)聯(lián)的主機(jī),改成選舉出來(lái)的6380了娶眷。

總結(jié)出:如果主機(jī)掛掉了似嗤,那么會(huì)在從機(jī)上投票選舉出主機(jī),并且修改剩余的從機(jī)關(guān)聯(lián)到新的主機(jī)中届宠。


2如果之前的master重啟回來(lái)烁落,會(huì)不會(huì)雙master沖突?

測(cè)試開(kāi)始:

重新啟動(dòng)6379端口的redis豌注,查看它的信息伤塌,看一看是什么情況:

可以看到6379變成了slave,主機(jī)是6380轧铁。

?

而且啟動(dòng)6379時(shí)每聪,哨兵打印出了一條日志:

意思:將從機(jī)6379關(guān)聯(lián)到6380上。

總結(jié):之前的master重新啟動(dòng)后齿风,并不會(huì)沖突药薯,會(huì)以從機(jī)的身份來(lái)關(guān)聯(lián)主機(jī)。

注意:一組sentinel能同時(shí)監(jiān)控多個(gè)Master

復(fù)制的缺點(diǎn)

復(fù)制的延遲:

由于所有的寫操作都是先在master上操作救斑,然后同步更新到slave上童本,所以從master同步到slave機(jī)器有一定的延遲,當(dāng)系統(tǒng)很繁忙的時(shí)候脸候,延遲問(wèn)題會(huì)更加嚴(yán)重穷娱,slave機(jī)器數(shù)量的增加也會(huì)使這個(gè)問(wèn)題更加嚴(yán)重。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末运沦,一起剝皮案震驚了整個(gè)濱河市泵额,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌携添,老刑警劉巖嫁盲,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異薪寓,居然都是意外死亡亡资,警方通過(guò)查閱死者的電腦和手機(jī)澜共,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)锥腻,“玉大人,你說(shuō)我怎么就攤上這事瘦黑。” “怎么了匹摇?”我有些...
    開(kāi)封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)甲葬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)经窖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任画侣,我火速辦了婚禮冰悠,結(jié)果婚禮上配乱,老公的妹妹穿的比我還像新娘。我一直安慰自己搬泥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布西疤。 她就那樣靜靜地躺著休溶,像睡著了一般扰她。 火紅的嫁衣襯著肌膚如雪徒役。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天杉女,我揣著相機(jī)與錄音,去河邊找鬼速勇。 笑死坎拐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的都伪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼陨晶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帝璧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谆膳,我...
    開(kāi)封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤漱病,失蹤者是張志新(化名)和其女友劉穎把曼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體注盈,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叙赚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年震叮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尉间。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哲嘲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眠副,到底是詐尸還是另有隱情侦啸,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布庞萍,位于F島的核電站忘闻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏私恬。R本人自食惡果不足惜炼吴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一硅蹦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涮瞻,春花似錦假褪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)异剥。三九已至,卻和暖如春歹苦,著一層夾襖步出監(jiān)牢的瞬間殴瘦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工丰歌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屉凯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓晓勇,卻偏偏與公主長(zhǎng)得像灌旧,于是被迫代替她去往敵國(guó)和親枢泰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容