Redis哨兵Sentinel

WellBay 2月前


標籤:python   dir   disco   redis3   工作   狀態   多少   monit   mil   

一、Sentinel說明

在主從複製中,master 掛掉了,那麼整個就崩掉了,因為 slave 不能寫資料。

所以哨兵的作用就是讓 Redis 的主從複製高可用

在 master 掛掉後,Sentinel 在選一個 slave 當做 master,就算之前的那個 master 啟動起來了,也只能當 slave。

工作流程:

  1. 多個 Sentinel 發現並確認 master 有問題
  2. 選舉一個 Sentinel 作為領導
  3. 選取一個 slave 作為新的 master
  4. 通知其餘 slave 成為新的 master 的 slave
  5. 通知客戶端主從變化
  6. 等待老的 master 復活成為新的 master 的 slave

二、配置

1、這裡以一主兩從的形式配置,以三個程序的方式演示,先啟動三個 Redis 配置如下:

主配置檔案

pidfile /var/run/redis.pid
dir "/root/redis/data"
logfile "6379.log"
daemonize yes
port 6379

從配置檔案1

pidfile /var/run/redis2.pid
dir "/root/redis/data2"
logfile "6380.log"
daemonize yes
port 6380
slaveof 127.0.0.1 6379
slave-read-only yes

從配置檔案2

pidfile /var/run/redis3.pid
dir "/root/redis/data3"
logfile "6381.log"
daemonize yes
port 6381
slaveof 127.0.0.1 6379
slave-read-only yes

啟動三個Redis

redis-server redis_6379.conf
redis-server redis_6380.conf
redis-server redis_6381.conf

2、搭建哨兵,哨兵也可以當做一個 Redis 伺服器,分別建立三個哨兵配置檔案:sentinel_26379.conf sentinel_26380.conf sentinel_26381.conf

配置檔案:sentinel_26379.conf

port 26379
daemonize yes
dir "/root/redis/sentinel_data"
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel.log"

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

配置檔案:sentinel_26380.conf

port 26380
daemonize yes
dir "/root/redis/sentinel2_data"
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel2.log"

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

配置檔案:sentinel_26381.conf

port 26381
daemonize yes
dir "/root/redis/sentinel3_data"
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel3.log"

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

啟動三個哨兵

redis-sentinel sentinel_26379.conf
redis-sentinel sentinel_26380.conf
redis-sentinel sentinel_26381.conf

3、哨兵更多配置引數

sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 30000sentinel parallel-syncs mymaster 1sentinel failover-timeout mymaster 180000sentinel monitor <master-name> <ip> <redis-port> <quorum># 告訴sentinel去監聽地址為ip:port的一個master,這裡的master-name可以自定義,quorum是一個數字,指明當有多少個sentinel認為一個master失效時,master才算真正失效        sentinel auth-pass <master-name> <password># 設定連線master和slave時的密碼,注意的是sentinel不能分別為master和slave設定不同的密碼,因此master和slave的密碼應該設定相同。sentinel down-after-milliseconds <master-name> <milliseconds> # 這個配置項指定了需要多少失效時間,一個master才會被這個sentinel主觀地認為是不可用的。 單位是毫秒,預設為30秒sentinel parallel-syncs <master-name> <numslaves> # 這個配置項指定了在發生failover主備切換時最多可以有多少個slave同時對新的master進行 同步,這個數字越小,完成failover所需的時間就越長,但是如果這個數字越大,就意味著越 多的slave因為replication而不可用。可以通過將這個值設為 1 來保證每次只有一個slave 處於不能處理命令請求的狀態。sentinel failover-timeout <master-name> <milliseconds>"""failover-timeout 可以用在以下這些方面:     1. 同一個sentinel對同一個master兩次failover之間的間隔時間。   2. 當一個slave從一個錯誤的master那裡同步資料開始計算時間。直到slave被糾正為向正確的master那裡同步資料時。    3.當想要取消一個正在進行的failover所需要的時間。    4.當進行failover時,配置所有slaves指向新的master所需的最大時間。不過,即使過了這個超時,slaves依然會被正確配置為指向master,但是就不按parallel-syncs所配置的規則來了。"""

三、python客戶端連線哨兵

import redisfrom redis.sentinel import Sentinel# 連線哨兵伺服器(主機名也可以用域名)sentinel = Sentinel([(‘127.0.0.1‘, 26379),                     (‘127.0.0.1‘, 26380),                     (‘127.0.0.1‘, 26381)		     ],                    socket_timeout=5)print(sentinel)# 獲取主伺服器地址master = sentinel.discover_master(‘mymaster‘)print(master)# 獲取從伺服器地址slave = sentinel.discover_slaves(‘mymaster‘)print(slave)

Redis哨兵Sentinel

標籤:python   dir   disco   redis3   工作   狀態   多少   monit   mil   

原文地址:https://www.cnblogs.com/XiaoYang-sir/p/15068757.html


上一篇:你有沒有亂用“leader”,擔當是個好東西
下一篇:整理下部分基礎的Redis面試題