Redis的主從復(fù)制功能很強(qiáng)大匙瘪,一個(gè)master可以有多個(gè)slave铆铆,而一個(gè)slave又可以有多個(gè)slave,如此下去丹喻,形成了強(qiáng)大的多級(jí)服務(wù)器集群架構(gòu)薄货。下面介紹一下Redis的主從特點(diǎn)。
1.master可以擁有多個(gè)slave
2.除了多個(gè)slave連到相同的master外碍论,slave還可以連接到其他slave形成圖狀結(jié)構(gòu)
3.主從復(fù)制不會(huì)堵塞master谅猾。也就是說當(dāng)一個(gè)或多個(gè)slave和master進(jìn)行同步數(shù)據(jù)的時(shí)候,master還可以繼續(xù)處理client發(fā)來的請求鳍悠;相反税娜,slave在同步開始時(shí),不會(huì)處理client發(fā)送的請求藏研。
4.主從復(fù)制可以用來提高系統(tǒng)的可伸縮性敬矩,我們可以用多個(gè)slave用于client的讀請求,也可以用來做簡單的數(shù)據(jù)冗余處理
5.可以在master禁用數(shù)據(jù)持久化蠢挡,只需要注釋掉master 配置文件中的所有save配置弧岳,然后只在slave上配置數(shù)據(jù)持久化
下面介紹下主從復(fù)制的過程
當(dāng)設(shè)置好slave服務(wù)器后,slave會(huì)建立和master的連接业踏,然后發(fā)送sync命令禽炬。無論是第一次同步建立的連接還是連接斷開后的重新連 接,master都會(huì)啟動(dòng)一個(gè)后臺(tái)進(jìn)程勤家,將數(shù)據(jù)庫快照保存到文件中瞎抛,同時(shí)master主進(jìn)程會(huì)開始收集新的寫命令并緩存起來。后臺(tái)進(jìn)程完成寫文件 后却紧,master就發(fā)送文件給slave桐臊,slave將文件保存到磁盤上,然后加載到內(nèi)存恢復(fù)數(shù)據(jù)庫快照到slave上晓殊。接著master就會(huì)把緩存的命 令轉(zhuǎn)發(fā)給slave断凶。而且后續(xù)master收到的寫命令都會(huì)通過開始建立的連接發(fā)送給slave。從master到slave的同步數(shù)據(jù)的命令和從 client發(fā)送的命令使用相同的協(xié)議格式巫俺。當(dāng)master和slave的連接斷開時(shí)slave可以自動(dòng)重新建立連接认烁。如果master同時(shí)收到多個(gè) slave發(fā)來的同步連接命令,只會(huì)使用啟動(dòng)一個(gè)進(jìn)程來寫數(shù)據(jù)庫鏡像介汹,然后發(fā)送給所有slave却嗡。
下面我演示下怎樣在多臺(tái)服務(wù)器上進(jìn)行Redis數(shù)據(jù)主從復(fù)制。我假設(shè)有兩臺(tái)服務(wù)器嘹承,一臺(tái)是Linux操作系統(tǒng)(局域網(wǎng)IP:192.168.1.100窗价,master服務(wù)器),一臺(tái)是Linux操作系統(tǒng)(局域網(wǎng)IP:192.168.1.200叹卷,slave服務(wù)器)
配置slave服務(wù)器很簡單撼港,只需要在配置文件(redis.conf)中加入如下配置
bind? 192.168.1.200(從服務(wù)器,此處默認(rèn)是127.0.0.1糊识,請修改成本機(jī)的IP地址弧烤,要不然鸟悴,客戶端無法進(jìn)行訪問)
slaveof 192.168.1.100 6379? (映射到主服務(wù)器上)
如果是在一臺(tái)機(jī)器上面配置主從關(guān)系秋麸,那么還需要修改從服務(wù)器的默認(rèn)端口號(hào)赌渣,同樣也在redis.conf中進(jìn)行修改