閱讀148 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go Redis開發運維實踐高可用和集群架構與實踐(三)
  下一篇:go 我的第一篇博客