redis 主從設(shè)置
配飾redis主從備份操作很簡單。在master中綁定服務(wù)器的ip,再在slave中設(shè)置slaveof即可
例如master:192.168.206.200 slave:192.168.206.201
配置如下:
#master配置
bind 192.168.206.200
port 6379
#############################
#slave 配置
slaveof 192.168.206.200 6379
slave-serve-stale-data yes #yes:設(shè)置master掛了之后slave仍然提供已經(jīng)存在是數(shù)據(jù)。no:提示同步中
slave-read-only yes # 設(shè)置slave只讀逐工,2.6之后默認(rèn)是只讀
還有就是配置diskless ,但是此種方式在redis官方的說法上面是還在實(shí)驗(yàn)階段爹袁。
master可選配置
min-slaves-to-write 3 # 配置至少有 3個(gè)slave連接正常的時(shí)候才同步數(shù)據(jù)
min-slaves-max-lag 10 # 最大延時(shí)少于 10s
slave可選配置
slave-announce-ip 5.5.5.5
slave-announce-port 1234
此配置的目的在于向master申明自己的ip和端口
注意:當(dāng)master節(jié)點(diǎn)掛了時(shí)候,我們從服務(wù)同步就會(huì)失敗砸抛,一般使用sentinel做主從同步監(jiān)控和切換
redis 主從特性
- redis的主從同步時(shí)異步進(jìn)行的评雌。redis 2.8開始,slave告知周期性(acknowledge )同步流中處理的數(shù)據(jù)數(shù)量直焙。
- 一個(gè)master可以有多個(gè)slave
- slave也可以連接到其他的salve景东,形成一個(gè)流狀(cascading-like)結(jié)構(gòu)
- redis的復(fù)制是非阻塞的,也就是說master在給一個(gè)或者多個(gè)同步數(shù)據(jù)的時(shí)候仍然可以處理客戶端的請求
- redis的復(fù)制在slave上面也是非阻塞的奔誓,slave可以利用之前的老數(shù)據(jù)處理請求斤吐,同步完成跟新老數(shù)據(jù)
- 復(fù)制可以用于可擴(kuò)展性,以便為只讀查詢擁有多個(gè)從站(例如丝里,可以將慢速O(N)操作卸載到從站)曲初,或簡單地用于數(shù)據(jù)冗余
- 主從備份可以避免master把所有數(shù)據(jù)都持久化,可以設(shè)置master不持久化杯聚,讓多個(gè)slave中的一臺做持久化臼婆。但是這中設(shè)置一定要小心,重啟master會(huì)是空數(shù)據(jù)幌绍,這個(gè)時(shí)候如果slave同步了颁褂,數(shù)據(jù)就丟失了。所有重啟時(shí)要利用slave持久化的數(shù)據(jù)重啟傀广。
工作原理
當(dāng)建立一個(gè)從機(jī)器的時(shí)候颁独,會(huì)嘗試發(fā)從一條psync命令。主機(jī)會(huì)檢測這是不是第一次鏈接伪冰。如果不是誓酒,主機(jī)就只會(huì)發(fā)送差異性數(shù)據(jù)。其他情況就是同步全部數(shù)據(jù)贮聂。
當(dāng)全部同步出發(fā)的時(shí)候靠柑,主機(jī)啟動(dòng)后臺保存功能產(chǎn)生rdb文件,同時(shí)開啟緩沖區(qū)接受新的寫入吓懈。當(dāng)保存工作完成后歼冰,然后把rdb文件發(fā)送給從機(jī)器,接著把緩沖區(qū)的指令也發(fā)給從機(jī)器耻警,實(shí)現(xiàn)同步隔嫡。
下一節(jié),總結(jié)下如何建立高可用(High Availability)的redis服務(wù)