redis學習三,Redis主從複製和哨兵模式

Redis主從複製

1.Master可以擁有多個slave

2.多個slave可以連接同一個Master外,還可以連接到其他的slave

3.主從複製不會阻塞Master在主從複製時,Master可以處理client請求。

4.提供系統的伸縮性。

關注公衆號,我們一起學java
關注公衆號,我們一起學java

主從複製的過程

1.slave與Master建立連接,發送sync同步命令。

也就是說當用戶在Master寫入一條命令後,他們之間會通過一些算法把數據同步到每一個slave上。

2.Msater會開啓一個後臺進程,將數據庫快照保存到文件中。同時Master主進程會開始收集新的寫命令並緩存。

3.後臺完成保存後,就將文件發送給slave

4.slave將此文件保存在硬盤上。

主從複製的配置

我們創建三臺linux服務器,一臺作爲主服務器Master,ip爲192.168.1.10另外兩臺作爲slave,ip分別爲192.168.1.11和192.168.1.12.

三臺服務器分別安裝redis,當然這裏我們要確保三臺服務器之間是能進行互相通信的,即互相可以ping通。然後Master服務器不需要做什麼配置,將11和12兩臺服務器的redis.conf配置文件進行修改之後,redis就會自動的爲我們實現主從複製。

 

修改兩臺slave的redis.conf這個配置文件。

如果主服務器沒有設置密碼,那麼我們只要找到slaveof <masterip> <masterport>,這裏我們的主服務器ip是192.168.1.10,redis端口是6379,那麼我們只需要在redis.conf配置文件中加入slaveof 192.168.1.10 6379,然後保存即可。

如果主服務器設置了密碼,我們還需要修改masterauth <master-password>(主服務器的密碼)這個配置項。

 

然後同時啓動三臺服務器 進入到redis-cli客戶端用info命令進行查看狀態(此處我的Master的ip是192.168.1.231,slave的ip分別爲229和230)

我們看到上面的role顯示此臺機器是master,有兩個slave,還可以看到對應的ip和端口。

 

此時我們在slave只能進行讀操作,只能通過master進行寫操作。並且我們每次的寫操作會發現在每一臺服務器上面都是同步的。

 

簡單的說Redis主從複製,假設我們有三臺Redis服務器,一臺主服務器Master,兩臺從服務器slave,slave中只能做讀操作。Master可做讀寫操作,每次對Master進行寫操作之後,首先Master會將數據存儲在硬盤中,然後通過sync同步命令將每一個slave的數據進行更新,然後每一個slave都將更新的數據寫在自己的硬盤中,這樣就保證了數據的一致性。

Redis哨兵模式

如果我們在使用主從複製的情況下,Master服務器進行了down機的情況,我們的系統就不能再進行寫的操作,所以此時redis在2.6版本引入了哨兵模式,但是並不穩定,2.8版本之後哨兵模式才穩定了起來。

顧名思義Redis的哨兵模式就是對redis系統進行實時的監控,其主要功能有下面兩點

1.監測主數據庫和從數據庫是否正常運行。

2.當我們的主數據庫出現故障的時候,可以自動將從數據庫轉換爲主數據庫,實現自動的切換。


實現步驟

這裏我們還是使用上面的redis服務器的ip,Master的ip爲192.168.1.229,slave1爲:192.168.1.230,slave2爲:192.168.1.231

在其中一臺服務器配置sentinel.conf(比如192.168.1.230)

1.進入解壓的redis文件夾中使用cp命令將sentinel.conf文件copy到你的redis中的etc文件夾。

2.修改sentinel.conf這個配置文件

打開這個文件 我們注意到哨兵使用的端口號是26379.

 

dir "/usr/local/redis/etc"這個dir相當於哨兵的一些日誌,我們修改他的路徑,讓他存放在我們想要保存的目錄中。

 

sentinel monitor mymaster 192.168.1.229 6379 1 對應的分別是 名稱,ip,端口,投票選舉的次數(那麼我們哨兵監聽的肯定是master的ip然後端口是6379,1說明當master主服務器down機之後,剩下的服務器要進行一個投票選舉出一個主服務器)

 

sentinel down-after-milliseconds mymaster 5000 這個配置代表哨兵0.5ms進行一次檢查這個集羣。

 

sentinel parallel-syncs mymaster 2這個配置代表你的幾個從節點將支持轉換爲主服務器的這個事情。

 

需要修改的幾乎就這幾個配置。

然後 我們分別啓動三臺redis服務器

輸入bin/redis-server etc/sentinel.conf --sentinel &這個命令啓動哨兵

/usr/local/redis/bin/redis-cli -h 192.168.1.230 -p 26379 info sentinel這個命令是查看哨兵的狀態

我們看到我的主服務器現在是229現在有兩個slave

 

這樣我們的哨兵模式就已經開啓了,此時我們可以試圖關閉229的redis,然後看哨兵會不會去從兩個從服務器中選舉一臺充當主服務器。

關注公衆號,我們一起學java
關注公衆號,我們一起學java
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章