1. 程式人生 > 其它 >[喵咪Redis]Redis-Sentinel

[喵咪Redis]Redis-Sentinel

[喵咪Redis]Redis-Sentinel

前言

redis-Sentinel 是我們這次來一同學習 redis 的重點,在我們現在的系統已經離不開 redis 的時候 , redis 掛掉了或者是一些其他問題都是致命的 , 那麼怎麼做到 redis 的高可用呢 , 官方有提供一個管理 redis 叢集自動容災的一個應用 Redis-Sentinel .那麼我們就來一同搭建一個 redis 高可用的 redis 叢集.

附上:

喵了個咪的部落格:w-blog.cn

Redis官網:http://redis.io/

Redis Sentinel文件:http://redis.io/topics/sentinel

1. 瞭解Sentinel

Sentinel可以用於管理多個Redis服務,並且會執行三個任務:

  1. 監控(Monitoring): Sentinel 會不斷地檢查你的主伺服器和從伺服器是否運作正常。
  2. 提醒(Notification): 當被監控的某個 Redis 伺服器出現問題時, Sentinel 可以通過 API 向管理員或者其他應用程式傳送通知。
  3. 自動故障遷移(Automatic failover): 當一個主伺服器不能正常工作時, Sentinel 會開始一次自動故障遷移操作, 它會將失效主伺服器的其中一個從伺服器升級為新的主伺服器, 並讓失效主伺服器的其他從伺服器改為複製新的主伺服器; 當客戶端試圖連線失效的主伺服器時, 叢集也會向客戶端返回新主伺服器的地址, 使得叢集可以使用新主伺服器代替失效伺服器。

Redis Sentinel 是一個分散式系統, 你可以在一個架構中執行多個 Sentinel 程序(progress), 這些程序使用流言協議(gossip protocols)來接收關於主伺服器是否下線的資訊, 並使用投票協議(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪個從伺服器作為新的主伺服器。

雖然 Redis Sentinel 釋出為一個單獨的可執行檔案 redis-sentinel , 但實際上它只是一個執行在特殊模式下的 Redis 伺服器, 你可以在啟動一個普通 Redis 伺服器時通過給定 --sentinel 選項來啟動 Redis Sentinel 。

2. 準備工作

我們準備2臺 Liunx 伺服器內網 IP 分別為 192.168.0.20 和 192.168.0.21

然在兩臺伺服器上面各配置好兩個 redis 例項為:

  1. 192.168.0.20:6379
  2. 192.168.0.20:6380
  3. 192.168.0.21:6381
  4. 192.168.0.21:6382

然後我們配置好主從關係把192.168.0.20:6379作為主redis其餘作為從Redis

在我們redis編譯完成的目錄中src目錄下有一個 redis-sentinel 的程式,我們把他 cp 到 /usr/local/bin/ 下面就可以直接使用 redis-sentinel 命令了

3. 配置Sentinel

我們分別在2臺伺服器上建立4個 Sentinel 例項我們先配置 192.168.0.20 這臺伺服器

cd /etc/redis/

vim sentinel_6379.config

port 26379
sentinel monitor master1 192.168.0.20 6379 2
sentinel down-after-milliseconds master1 60000
sentinel failover-timeout master1 180000
sentinel parallel-syncs master1 1
sentinel auth-pass master1 testpassword
  1. 第一行 監聽的埠號
  2. 第二行 配置指示 Sentinel 去監視一個名為 mymaster的主伺服器,這個主伺服器的IP地址為 192.168.0.20,埠號為 6379 , 而將這個主伺服器判斷為失效至少需要 2 個 Sentinel 同意 (只要同意 Sentinel 的數量不達標,自動故障遷移就不會執行)。
  3. 第三行 down-after-milliseconds 選項指定了 Sentinel 認為伺服器已經斷線所需的毫秒數。
  4. 第四行 failover-timeout 設定故障恢復時間 , 也就是當故障了切換了主了之後多久去檢測原來的主伺服器是否可以用並且進行處理的毫秒數
  5. 第五行 parallel-syncs 選項指定了在執行故障轉移時, 最多可以有多少個從伺服器同時對新的主伺服器進行同步, 這個數字越小, 完成故障轉移所需的時間就越長。
  6. 第六行 配置連線主庫的密碼,如果主庫有密碼沒有設定此項則會無法聯通

然後以同樣的配置配置好埠為 192.168.0.20:26380 , 192.168.0.21:26381 和 192.168.0.21:26382

然後我們使用 redis-sentinel 分表在2臺伺服器上面

redis-sentinel sentinel_6379.config
redis-sentinel sentinel_6380.config
redis-sentinel sentinel_6381.config
redis-sentinel sentinel_6382.config

我們觀察終端的語句會出現如下輸出

+slave <instance details> :一個新的從伺服器已經被 Sentinel 識別並關聯。
+sentinel <instance details> :一個監視給定主伺服器的新 Sentinel 已經被識別並新增。

看到2個子例項都繫結上了 , 4個 sentinel 也都顯示了這個時候就證明已經配置好了 redis-sentinel 然後我們在主服務上面執行如下語句

service redis_6379 stop

這個時候就可以看到在終端中在列印了一些轉換的語句,我們在檢查主從設定的時候就已經自動轉意到了莫一個 redis 子例項上了,當我們重新把主執行起來之後,主例項會自動成為子例項

4. 總結

本節主要介紹了怎麼配置一個 redis 叢集,以及怎麼把 redis-sentinel 跑起來來達到高可用容災切換的問題,更多的操作可以參考 sentinel 官方文件來了解更多的關於 sentinel 的操作.

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

PhalApi官網QQ交流群:421032344 歡迎大家的加入!