redis的主從複製和哨兵模式

Redis主從複製是什麼?

行話:也就是咱們所說的主從複製,主機數據更新後根據配置和策略,redis

自動同步到備機的master/slaver機制,Master以寫爲主,Slave以讀爲主數據庫

 

Redis主從複製能幹些什麼?

(1)讀寫分離服務器

(2)容災恢復學習

 

Redis配置主從複製(1主2從)

知識注意:測試

(1)配從(庫)不配主(庫)3d

(2)從庫配置:slaveof 主庫IP 主庫端口日誌

(3)info replication查看當前redis節點信息(是主仍是從等等)server

 

redis配置1主2從

開始配置:blog

這裏作演示是裝在一臺機器上,方便學習(生產環境是裝在不一樣機器上的)進程

咱們這裏並不安裝三個redis,而是已copy三個配置文件來區分。

分別是:redis6379.conf,redis6380.conf,redis6381.conf

 

 

修改配置文件內容:(這裏的修改都是爲了區分不一樣機器,6379就是端口號

daemonize yes開啓後臺啓動

pid /var/run/redis6379.pidpid文件以端口號來區分

P ort 6379指定端口

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

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

(每一個配置文件都須要修改)

 

修改好配置文件後,分別啓動三個redis進程:

../bin/redis-server redis6379.conf

../bin/redis-server redis6380.conf

../bin/redis-server redis6381.conf

 

查看是否啓動成功:

能夠看到redis三個進程分別在6380,6381,6379三個端口號啓動了。

 

分別鏈接這三個redis進程,查看當前redis狀態:

6379端口:

 

6380端口:

 

 

6381端口:

 

如今能夠看到,三個redis進程狀態都是master,都沒有slave。

 

開始主從複製配置:

一個master,兩個slave。

定義:6379當master,6380和6381都爲slave

能夠看到咱們只是注意的地方:配從(庫)不配主(庫)

好的,分別在6380和6381上的redis去關聯6379的redis:

slaveof 127.0.0.1 6379

(注意:咱們這裏是以命令方式去關聯主的,當前redis關閉即失效。若是想要從新啓動還能關聯主,那麼須要再配置文件中配置。)

 

而後咱們再查看6380和6381端口redis的狀態:

能夠看到兩臺主機都已經改爲slave了,並且還標識出master的信息。

若是已經出現以上圖片顯示,那麼表明1主2從配置成功了。

 

測試redis的1主2從

 

(1)slave一、slave2是從頭開始複製仍是從切入點開始複製?當前主機器上已經有了k1 k2 k3了,從機器才關聯過來,那麼在從機器上能拿到k1 k2 k3嗎?

測試:

主服務器先寫key

 

從服務再去關聯主服務器,去拿key

答案是能夠的!!!分析一下,應該是從機器關聯主機器時,會將主機器全部key都copy一份給從機器

 

(2)從機是否能夠寫?set能否?主服務器是否能夠讀呢?get能否

測試:

在從機上寫:redis會提示你只是一個從機,是隻能讀不能寫。

 

在主機上讀:能夠讀,主機可讀可寫

 

 

(3)主機shutdown後狀況如何?從機是上位仍是原地待命

測試:

主機shutdown:

查看從機狀態:

能夠看到,從機狀態仍是沒有改變,從機是在原地待命

 

(4)主機又回來了後,主機新增記錄,從機還可否順利複製?

測試:

重新啓動主機,寫入一個k5

在從機上獲取k5:

從機上獲取k5成功。

得出結論:

主機回來後而且新增記錄,從機能順利複製主機上的數據。

 

 

5其中一臺從機down後狀況如何?依照原有它能跟上大部隊嗎?

測試:

關閉從機,從新啓動從機。

主機寫入k6,從機上獲取k6,會發現是不行的。

爲何呢?安裝的時候已經說了:

(注意:咱們這裏是以命令方式去關聯主的,當前redis關閉即失效。若是想要從新啓動還能關聯主,那麼須要再配置文件中配置。)

若是不相信能夠去看下當前從機的狀態,它已經變成master了。

這裏就不貼截圖了。

 

薪火相傳

什麼是薪火相傳?

上一個slave能夠是下一個slave的master,slave一樣能夠接收其餘

slaves的鏈接和同步請求,那麼該slave做爲了鏈條中下一個的master,

能夠有效減輕master的寫壓力

 

注意:

中途變動轉向:會清除以前的數據,從新創建拷貝最新的

 

設置薪火相傳

slaveof 新主庫IP 新主庫端口

 

我這裏仍是拿以前配好的6379,6380,6381來作案例。

主機:6379

從機:6380,6381

 

將6381指向6380,。6380仍是指向6379(不變)。

6381端口redis信息:

 

6380端口redis信息:

能夠看到6380端口的redis仍是slave,可是它底下有一個slave,正是6381,好的如今咱們已經配置成功了。

 

測試一下:在6379下修改個值,6380上必定是能夠取到的,看看6381上能不能取到

 

ok,6381上也是能夠拿到值的,那麼薪火相傳成功!!!!

 

反客爲主

什麼是反客爲主?

當主機中宕機了,那麼咱們能夠手動的中止從機與主機的同步,將從機轉成主機。再將其餘的從機與當前這臺主機同步數據,另成一個體系。

 

命令介紹:

slaveof no one使當前數據庫中止與其餘數據庫的同步,轉成主數據庫

 

反客爲主案例:

假如如今主機掛掉了:這裏是人爲手動關閉,模擬掛掉

查看從機狀態:

 

這裏能夠發現master的狀態是down,那麼如今將80端口redis設置爲主機,81端口redis作80端口的從機:

slaveof no one使當前數據庫中止與其餘數據庫的同步,轉成主數據庫

Info replication查看當前redis的一個信息,能夠發現當前已是master了

 

再將81關聯到80上,再查看當前81上的信息,就能夠看到關聯的master是80的redis了。

slaveof 127.0.0.1 6380

測試主從複製是否成功:

 

測試成功!!在80上寫數據,在81上能夠讀取到。

 

Redis主從複製原理

全量複製:

slave啓動成功鏈接到master後會發送一個sync命令

master接到命令啓動後臺的存盤進程,同時收集全部接收到的用於修改數據集命令,

在後臺進程執行完畢以後,master將傳送整個數據文件到slave,以完成一次徹底同步

而slave服務在接收到數據庫文件數據後,將其存盤並加載到內存中。

 

增量複製:

master繼續將新的全部收集到的修改命令依次傳給slave完成同步

 

注意:

可是隻要是從新鏈接master,回自動執行一次徹底同步(全量複製)

 

哨兵模式(sentinel)

什麼是哨兵模式?

反客爲主的自動版,可以後臺監控主機是否故障,若是故障了根據投票數自動將從庫轉換爲主庫

 

實現哨兵模式

咱們仍是使用6379,6380,6381機器來演示。

(先調回1主2從狀況,這裏就不演示了。)

主機:6379

從機:6380,6381

(1)在/usr/local/redis/conf下建立一個名爲sentinel.conf的文件,並寫入內容

sentinel monitor 被監控數據庫名字(本身起一個名字) 127.0.0.1 6379 1

上面最後一個數字1,表示主機掛掉後salve投票看讓誰接替成爲主機,得票數多redis成爲主機

注意:這裏要監控的是主機

 

(2)啓動哨兵

這是個人目錄:

bin下面就是redis的一些啓動腳本。

config下是我copy出來的redis配置文件和剛剛建立的sentinel.conf

到config目錄下執行命令啓動哨兵:

../bin/redis-sentinel sentinel.conf

注意:這裏的命令根據不一樣的redis安裝目錄也是會不相同的。

好的,若是看到以上打印出得圖就是啓動成功。能夠看到已經在監控6379了,並且還找到了6379的從機器6380和6381。

 

 哨兵測試

(1)原有的master掛了,會怎麼樣?

好的,咱們測試一下,咱們手動讓6379掛掉,看下哨兵會怎麼處理。

 

模擬6379宕機:(手動讓6379宕掉)

 

稍等一會,看到哨兵日誌:

這裏已經檢測到6379主機宕機,那麼就會投票選出一個主機,這裏能夠看到的是選出的主機是6380。

 

咱們去看下6380和6381的信息

6380:

 

6381:

以上截圖已經能夠看到,6380已經成了主機,並且6381已經改變了關聯的主機,改爲選舉出來的6380了。

總結出:若是主機掛掉了,那麼會在從機上投票選舉出主機,而且修改剩餘的從機關聯到新的主機中。

 

2若是以前的master重啓回來,會不會雙master衝突?

測試開始:

從新啓動6379端口的redis,查看它的信息,看一看是什麼狀況:

 

能夠看到6379變成了slave,主機是6380。

 

並且啓動6379時,哨兵打印出了一條日誌:

 

意思:將從機6379關聯到6380上。

 

總結:以前的master從新啓動後,並不會衝突,會以從機的身份來關聯主機。

注意:一組sentinel能同時監控多個Master

複製的缺點

複製的延遲:

因爲全部的寫操做都是先在master上操做,而後同步更新到slave上,因此從master同步到slave機器有必定的延遲,當系統很繁忙的時候,延遲問題會更加嚴重,slave機器數量的增長也會使這個問題更加嚴重。

 

 好的。到了這裏主從複製和哨兵模式完成!!!

相關文章
相關標籤/搜索