Redis開發運維實踐高可用和集群架構與實踐(二)
11.1.2 環境搭建
11.1.2.1 部署架構
部署架構上采用三台機器,一個Master接受寫請求,兩個Slave進行數據同步,三台機器上都部署sentinel(一般為奇數個,因為需要絕大部分進行投票才能failover)。(官方示例)具體架構如下圖:

注意:如果有條件可以將sentinel多部署幾個在客戶端所在的應用服務器上,而不是與從節點部署在一起,這樣避免整機宕機後sentinel和slave都減少而導致的切換選舉sentinel無法超過半數。
11.1.2.2 網絡規劃
redis高可用環境不需要進行心跳線的配置,每個物理節點的網卡進行雙網卡主備綁定生成bond0即可。
11.1.2.3 用戶規劃
用戶名 | 用戶所在組 | 用戶目錄 | 權限 | 備注 |
redis(10086) | redis (10086) | /redis | sudo(如需要浮動IP時賦予) | -- |
11.1.2.4 持久化規劃
如果讀多寫少,可以在master上隻開啟aof,在低峰期定時進行bgsave,在slave上徹底關閉持久化。 如果讀寫差不多,可以在一個slave上開啟rdb(這個slave隻做持久化,不進行讀操作),在其餘主從都關閉持久化。 注意:從節點是不會從本地恢複而直接從master節點進行恢複的,因此在重啟前如果有需要備份從節點,則需要把aof和rdb文件移走。
11.1.2.5 目錄規劃
目錄 | 含義 |
/redis/bin | redis可執行文件 |
/redis/conf | redis 和supervisord的配置文件 |
/redis/run | redis和supervisord運行時的pid文件 |
/redis/log | redis和supervisord的日誌 |
/redis/script | 一些管理腳本和測試腳本 |
/redis/data | Redis持久化數據目錄 |
11.1.2.6 部署步驟
解壓下列壓縮包至/tmp/redis目錄,以符合上述目錄結構:
部署相關組件: cd /tmp/redis/deploy ./deploy.sh
修改Master配置文件redis.conf,注釋掉包含slaveof的語句。 修改Slave配置文件redis.conf,添加slaveof masterIP port,指定主從 修改三台機器的sentinel配置文件,指定主服務器的IP和端口: sentinel monitor mymaster masterIP port 2
然後使用supervisord重新啟動。
11.1.2.7 配置文件
首先,一個sentinel可以配置多個master。一個master的配置如下:
port 26379 ###定義目錄存放 dir "/redis" ###監控mymaster(可自定義-但隻能包括A-z 0-9和”._-”),注意quorum隻影響ODOWN的判斷,但是不影響failover,發生failover的條件必須是半數sentinel認為老Master已經ODOWN。此參數建議設置為sentinel/2+1的數值,否則可能會產生腦裂。 sentinel monitor mymaster 192.168.145.131 6379 2 ###mymaster多久不響應認為SDOWN,設置為3100也就是說3次ping失敗後認為SDOWN sentinel down-after-milliseconds mymaster 3100 ###如果在該時間(ms)內未能完成failover操作,則認為該failover失敗 sentinel failover-timeout mymaster 15000 ###在執行故障轉移時, 最多可以有多少個從Redis實例在同步新的主實例, 在從Redis實例較多的情況下這個數字越小,同步的時間越長,完成故障轉移所需的時間就越長 sentinel parallel-syncs mymaster 1 ###reconfig的時候執行的腳本(選配) sentinel client-reconfig-script mymaster /redis/script/failover.sh ###出現任何sentinel在warning事件時候執行的腳本(選配) sentinel notification-script mymaster /redis/script/notify.sh ####日誌位置 logfile "/redis/log/sentinel.log"
最後更新:2017-05-08 12:06:01