詳解Redis主從復(fù)制(自動(dòng)同步到備機(jī)的master/slaver機(jī)制)
[重要通告]如您遇疑難雜癥,本站支持知識(shí)付費(fèi)業(yè)務(wù),掃右邊二維碼加博主微信,可節(jié)省您寶貴時(shí)間哦!
概念:
主從復(fù)制就是主機(jī)數(shù)據(jù)更新后,根據(jù)配置和策略,自動(dòng)同步到備機(jī)的master/slaver機(jī)制,Master以寫為主,Slave以讀為主。
配置:
(1)“一主二仆”策略
準(zhǔn)備三臺(tái)redis服務(wù)器:主服務(wù)器A,從服務(wù)器B1、從服務(wù)器B2。服務(wù)器B1、B2同步A數(shù)據(jù),A1負(fù)責(zé)寫操作,B1、B2負(fù)責(zé)讀操作。
A服務(wù)器IP:168.7.5.74,端口6379
B1服務(wù)器IP:168.7.5.75,端口6379
B2服務(wù)器IP:168.7.5.76,端口6379
- 使用命令
在服務(wù)器B1、B2上分別執(zhí)行如下命令,成為A服務(wù)器的從庫(kù):
slaveof 168.7.5.74?6379
使用命令可查看當(dāng)前庫(kù)role、master_host、manter_port、connected_slaves相關(guān)配置信息:
info replication
注意:
a、當(dāng)主庫(kù)宕機(jī)后,從庫(kù)仍是slave角色,仍負(fù)責(zé)接受讀操作;
b、當(dāng)主庫(kù)恢復(fù)服務(wù)后,從庫(kù)B1、B2繼續(xù)同步主庫(kù)A的數(shù)據(jù),服務(wù)照舊;
c、當(dāng)從庫(kù)與master斷開連接后,如果使用的是命令配置,需要重新使用命令才能連接到主庫(kù);
d、當(dāng)從庫(kù)連接master后,master會(huì)先一次性將當(dāng)前數(shù)據(jù)全量同步到salve上,后續(xù)增量同步。
從庫(kù)復(fù)制原理:
Slave 啟動(dòng)成功后連接到 master 后,將發(fā)送一條sync命令,master接收到命令后,在后臺(tái)啟動(dòng)存盤進(jìn)程,同時(shí)收集所有接收到的用于修改數(shù)據(jù)集的命令,在后臺(tái)進(jìn)程執(zhí)行完畢后,master將傳送整個(gè)數(shù)據(jù)文件到slave,以完成一次全量同步。只要重新連接master,將自動(dòng)執(zhí)行一次全量復(fù)制(完全同步)。
- 使用配置文件
??在需要成為從庫(kù)的redis配置文件中添加配置"replicaof 10.7.5.74 6379"即可。與命令配置不同的是,從庫(kù)重啟服務(wù)后將自動(dòng)同步主庫(kù),無需額外操作。
? ? ? ? ?
(2)“薪火相傳”策略
準(zhǔn)備三臺(tái)redis服務(wù)器:服務(wù)器A,服務(wù)器B、服務(wù)器C。將服務(wù)器B設(shè)置為服務(wù)器A的從庫(kù),將服務(wù)器C設(shè)置為服務(wù)器B的從庫(kù):masterA <-- slaverB <-- slaverC。
A服務(wù)器IP:168.7.5.74,端口6379
B服務(wù)器IP:168.7.5.75,端口6379
C服務(wù)器IP:168.7.5.76,端口6379
執(zhí)行如下命令進(jìn)行該策略配置:
在服務(wù)器B上執(zhí)行:slaveof 168.7.5.74?6379
在服務(wù)器C上執(zhí)行:slaveof 168.7.5.75 6379
注意:
a、服務(wù)器A的角色為 master,服務(wù)器B和C的角色為 slaver;
b、當(dāng)主庫(kù)A宕機(jī)后,在從庫(kù)B上執(zhí)行命令?slaverof no one?將從庫(kù)B角色變?yōu)?salve ,從庫(kù)C無需操作,將繼續(xù)使用同步B;
c、當(dāng)A重啟服務(wù)器后,與BC庫(kù)組成的體系毫無關(guān)系,需重新執(zhí)行命令加入;
d、salverof no one :是當(dāng)前數(shù)據(jù)庫(kù)停止與其他數(shù)據(jù)庫(kù)的同步,并轉(zhuǎn)換為主數(shù)據(jù)庫(kù)。
優(yōu)點(diǎn):去除“一主二仆”策略的中心化,減輕master庫(kù)寫的壓力。
缺點(diǎn):從庫(kù)存在備份延遲
(3)哨兵模式
原理:在后臺(tái)自動(dòng)監(jiān)控主機(jī)是否故障,如果故障了,根據(jù)投票自動(dòng)將從庫(kù)轉(zhuǎn)為主庫(kù)。
?配置:
?a、創(chuàng)建哨兵模式配置文件。在redis.conf目錄下創(chuàng)建文件?sentinel.conf?(名稱固定),內(nèi)容如下:
sentinel monitor hostname 127.0.0.1 6379 1??
hostname 127.0.0.1 6379?:分別是被監(jiān)控主機(jī)的主機(jī)名、IP及端口號(hào)
1指定策略:主機(jī)宕機(jī)后,slave投票決定誰(shuí)接替主機(jī)
b、啟動(dòng)哨兵模式
?redis-sentinel /usr/redis/sentinel.conf
注意:
a、若當(dāng)前master宕機(jī)后,服務(wù)將在從庫(kù)中選出新的master;
b、若舊master重啟后,它將自動(dòng)成為新的master的slave;
c、一個(gè)哨兵(sentinel)可以監(jiān)控多個(gè)master。
應(yīng)用:
讀寫分離、容災(zāi)備份
主從復(fù)制的缺點(diǎn):
復(fù)制的延遲,寫操作都在master上,然后同步到slave上,所以會(huì)有一定的延遲,同時(shí)slave機(jī)器數(shù)量的增加也會(huì)使延遲問題更加嚴(yán)重。
問題未解決?付費(fèi)解決問題加Q或微信 2589053300 (即Q號(hào)又微信號(hào))右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當(dāng)無敷衍,落筆求簡(jiǎn)潔。 以所舍,求所獲;有所依,方所成!