3,redis主從複製跟哨兵機制

意思就是把數據從master複製到slave
目的是實現一個讀寫分離的機制,master負責寫入,slave負責讀
1,一個master可以擁有多個slave
2, slave不光可以連接到master,還可以連接到其他的slave(很少這麼幹,一般是一主多從)
3,在進行主從複製的時候,不影響master跟client進行交互。也就是說master在任何時候都是不阻塞的。

主從複製過程
1,slave與master建立連接,發送sync同步命令
2,master會開啓一個後臺進程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存。
3,後臺完成保存後,將文件發送給slave
4,slave將此文件保存在硬盤上面

主從複製配置,修改slave配置文件(master的配置不需要改變)
1,slaveof masterip masterport
2,masterauth password

=======================================

redis有ha的解決方案,當master掛掉後,會有slave裏面變爲master的角色,這是一個哨兵的概念,哨兵發現master掛了,馬上從slave節點中選舉一個當新的master。

哨兵的作用:
1,監控主從數據庫是否正常運行
2,主數據庫出現故障時,可以自動將slave數據庫轉換爲master

實現步驟
哨兵是一個獨立的程序,不需要跟slave配置到同一臺機器上面。因爲哨兵是監測master節點的,master節點知道自己的slave,哨兵自然就知道了。

1.sentinel監聽端口,默認是26379,可以修改。

port 26379

2.sentinel monitor
告訴sentinel去監聽地址爲ip:port的一個master,這裏的master-name可以自定義,quorum是一個數字,指明當有多少個sentinel認爲一個master失效時,master纔算真正失效。master-name只能包含英文字母,數字,和“.-_”這三個字符需要注意的是master-ip 要寫真實的ip地址而不要用迴環地址(127.0.0.1)。
配置示例:

sentinel monitor mymaster 192.168.0.5 6379 2

3.sentinel auth-pass
設置連接master和slave時的密碼,注意的是sentinel不能分別爲master和slave設置不同的密碼,因此master和slave的密碼應該設置相同。
配置示例:

sentinel auth-pass mymaster 0123passw0rd

4.sentinel down-after-milliseconds
這個配置項指定了需要多少失效時間,一個master纔會被這個sentinel主觀地認爲是不可用的。 單位是毫秒,默認爲30秒
配置示例:

sentinel down-after-milliseconds mymaster 30000

5.sentinel parallel-syncs
這個配置項指定了在發生failover主備切換時最多可以有多少個slave同時對新的master進行 同步,這個數字越小,完成failover所需的時間就越長,但是如果這個數字越大,就意味着越 多的slave因爲replication而不可用。可以通過將這個值設爲 1 來保證每次只有一個slave 處於不能處理命令請求的狀態。
配置示例:

sentinel parallel-syncs mymaster 1

6.sentinel failover-timeout
failover-timeout 可以用在以下這些方面:
6.1.同一個sentinel對同一個master兩次failover之間的間隔時間。
6.2.當一個slave從一個錯誤的master那裏同步數據開始計算時間。直到slave被糾正爲向正確的master那裏同步數據時。
6.3.當想要取消一個正在進行的failover所需要的時間。
6.4.當進行failover時,配置所有slaves指向新的master所需的最大時間。不過,即使過了這個超時,slaves依然會被正確配置爲指向master,但是就不按parallel-syncs所配置的規則來了。
配置示例:

sentinel failover-timeout mymaster1 20000

7.sentinel的notification-script和reconfig-script是用來配置當某一事件發生時所需要執行的腳本,可以通過腳本來通知管理員,例如當系統運行不正常時發郵件通知相關人員。對於腳本的運行結果有以下規則:
若腳本執行後返回1,那麼該腳本稍後將會被再次執行,重複次數目前默認爲10
若腳本執行後返回2,或者比2更高的一個返回值,腳本將不會重複執行。
如果腳本在執行過程中由於收到系統中斷信號被終止了,則同返回值爲1時的行爲相同。
一個腳本的最大執行時間爲60s,如果超過這個時間,腳本將會被一個SIGKILL信號終止,之後重新執行。
1).sentinel notification-script
通知型腳本:當sentinel有任何警告級別的事件發生時(比如說redis實例的主觀失效和客觀失效等等),將會去調用這個腳本,這時這個腳本應該通過郵件,SMS等方式去通知系統管理員關於系統不正常運行的信息。調用該腳本時,將傳給腳本兩個參數,一個是事件的類型,一個是事件的描述。如果sentinel.conf配置文件中配置了這個腳本路徑,那麼必須保證這個腳本存在於這個路徑,並且是可執行的,否則sentinel無法正常啓動成功。
配置示例:
sentinel notification-script mymaster /var/redis/notify.sh

2).sentinel client-reconfig-script
當一個master由於failover而發生改變時,這個腳本將會被調用,通知相關的客戶端關於master地址已經發生改變的信息。以下參數將會在調用腳本時傳給腳本:

目前總是“failover”, 是“leader”或者“observer”中的一個。 參數 from-ip, from-port, to-ip, to-port是用來和舊的master和新的master(即舊的slave)通信的。這個腳本應該是通用的,能被多次調用,不是針對性的。

啓動哨兵,兩種方式都可以,建議用第二種,見名知義

 redis-server sentinel.conf --sentinel &
 redis-sentinel sentinel.conf &

想查看哨兵的信息

redis-cli -h localhost -p 26379 info sentinel

關閉哨兵

當master掛點,然後手動啓動後,會自動變爲slave節點。哨兵程序會自動修改主從節點的配置文件。

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