redis主從加哨兵模式的實踐
redis是一個基於記憶體的kv資料庫,其吞吐效能可想而知,隨著redis應用得越來越廣泛,以及對它的依賴程度越來越高,它的高可用便成了需要考慮的一個很重要的點。
於是今天在自己電腦上實踐了一下redis的主從模式和哨兵監控。
基本架構:一主二從,加一哨兵
先為master和slave編輯配置檔案:
為它們配置ip和埠,這裡6379是master,6380和6381為slave。
這裡順便看了一些redis的持久化,分為兩種,預設開啟的是rdb模式,達到一定條件則進行持久化。而aof則是通過操作日誌的方式進行持久化。aof的一致性更好,但效能則不如rdb。
配置完之後,開啟這三個redis例項:
jeffrey$ ./redis-server ../etc/redis6379.conf
jeffrey$ ./redis-server ../etc/redis6380.conf
jeffrey$ ./redis-server ../etc/redis6381.conf
這個時候其實它們三個還沒有主從關係,我先在6379上設定一對kv。
然後我在6380上設定其為6379的slave
發現redis從master同步了資料到slave
6380也確實把剛剛在6379上設定的資料同步了過來,6381同6380
現在來試一下主從資料同步:
資料成功同步了過來
然後我試一下在slave上寫入資料,發現:
看來redis主從模式是做了讀寫分離的。
然後我在6379的client上進行shutdown,模擬master宕機,下圖可知,從機工作一切正常,但並沒有頂替master的位置。
於是該如何讓slave在master宕機的情況下,自動的接管master的位置,那就需要用到哨兵。
為哨兵編輯配置檔案,然後啟動哨兵
jeffrey$ ./redis-sentinel ../etc/sentinel6379.conf
然後將6379shutdown
在上圖倒數第四行,發現master從6379切換為了6380,這其中其實發生了一個投票的過程,具體這裡不多說了。
6380確實變為了master
6381依舊是slave,只不過它的master變為了6380,見上圖。