【Redis】使用Redis Sentinel實現Redis HA


閱讀目錄


簡單介紹

使用Redis Sentinel實現Redis HA。
閱讀此文前,先閱讀文章:《【Redis】配置redis主從復制》 http://www.cnblogs.com/ssslinppp/p/5661419.html 
作者:ssslinppp

配置redis主從IP和port:
master and slave ip port
master 127.0.0.1 6379
slave1 127.0.0.1
6380
slave2 127.0.0.1
6381

一、配置Sentinel.conf

上文中已經創建的主從設備,截圖如下:

如上圖所示:
  • master:6379
  • slave1:6380
  • slave2:6380

sentinel配置文件如下:
     
     
     
             
  1. #sentinel monitor <master-name> <ip> <redis-port> <quorum>
  2. sentinel monitor mymaster 127.0.0.1 6379 1
  3. sentinel down-after-milliseconds mymaster 30000
  4. sentinel failover-timeout mymaster 18000
  5. sentinel parallel-syncs mymaster 1

解釋說明如下:
>>> sentinel monitor mymaster 127.0.0.1 6379 1
  • mymaster :為master redis的名稱;
  • ip和port指定了6379端口的Redis為master;
  • quorum:一般情況下會啟動多個redis sentinel作為分布式使用,當master掛掉之后,需要從若干個slave中推選出1個slave作為新的master,並將其他slave的slaveof設置指向這個新的master。而判斷master redis是否掛掉,需要sentinel 說了算,只有不少於quorum個sentinel認為master redis掛掉,才會進行failover。因為這里只啟動了一個sentinel,所以配置quorum為1,若是啟動了多個sentinel用於分布式,可以將quorum設置>1。
>>>  sentinel down-after-milliseconds mymaster 30000
表示當master redis 30s 沒有應答時,就可以斷定master掛掉了,但需要結合上面配置的quorum一起。
>>> sentinel failover-timeout mymaster 18000
若sentinel在該配置時間內沒有完成failover操作(即故障時master/slave自動切換),則認為本次failover失敗。
>>> sentinel parallel-syncs mymaster 1
指定在failover過程中,同時被sentinel reconfigure的最大slave實例數。由於reconfigure過程中,對應的slave會中斷響應客戶的請求,故為避免所有的slave同時不可用,該值需適當配小。

二、啟動Redis Sentinel

     
     
     
             
  1. ./src/redis-sentinel sentinel.conf

從上可以看出,master redis 為6379,而slave又兩個,分別為:6380和6381.
此時在去觀察sentinel.conf,會發現sentinel.conf發生了變化,如下所示:

三、關閉master redis,測試failover


大約過去半分鍾,后會看到如下:
  • slave 6380的日志記錄:
  • 再看看sentinel的提示信息:

  • 再來觀察sentinel.conf

可以對比最初的sentinel.conf

此時再分別看看6379/6380/6381的redis.conf:
  • 6379的redis.conf
分2種情況
情況1:當6379(原先的master redis)關閉后,還未重啟,此時的redis.conf文件內沒有slaveof的配置;
情況2:當6379服務啟動后,會在redis.conf的最后添加slaveof的配置,如下:

同時可以看到sentinel輸出如下信息:
e
此時看看6379的日志信息:


  • 6380的redis.conf


  • 6381的redis.conf

已經將slaveof自動修改為:6380(新的master)

測試新的同步信息:

從上面的輸出結果可以看出,redis 主從復制依然有效。

四、重新切換為最初的master

前面我們看到了當master掛掉時,sentinel會自動的從slave中挑選出一個作為master,並重新配置各redis實例的配置文件。
當之前掛掉的master又重啟后,如果希望還是還原到原先的主從配置,可以通過如下操作來進行:

登錄到sentinel,使用命令:
     
     
     
             
  1. redis-cli -h 127.0.0.1 -p 26379 #26379為sentinel的端口
執行語句:
     
     
     
             
  1. sentinel failover mymaster

接下來我們來看看是否還原到之前的主從配置:
  • 先看看sentinel的輸出信息:


查看sentinel的配置文件:


接下來看看3個redis.conf是否自動變化了(reconfigure)
  • 6379的redis.conf
全文搜索slaveof,沒有此配置選項,說明已經發生了變化,因為6379此時就是master redis。
  • 6380的redis.conf

在最后添加了:slaveof 127.0.0.1 6379;
說明6380已經從master重新變化為slave了。
  • 6381的redis.conf


還可以通過如下方式進行說明:




五、參考鏈接

《【Redis】配置redis主從復制》 http://www.cnblogs.com/ssslinppp/p/5661419.html 
《Redis Sentinel Documentation》 http://redis.io/topics/sentinel  
《Windows下Redis Sentinel部署》 http://bbs.redis.cn/forum.php?mod=viewthread&tid=715 







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM