1. 程式人生 > >程式設計實踐3—redis主從備份和高可用

程式設計實踐3—redis主從備份和高可用

redis通過在配置檔案中新增 slaveof  master-ip master-port 來指定一個redis例項是另一個例項的從例項,主(master) 上的資料會自動同步到從(slave)上;當master掛了怎麼辦呢? 這裡可以使用redis提供的redis-sentinel (很多人稱其為哨兵)來選舉新的master了。

redis-sentinel 其實比較簡單,提供一個sentinel.conf檔案即可 ,主要原理: redis-sentinel本身相互之間是可以通訊的,每個redis-sentinel 例項會去監聽一個 master-ip 和埠,當master掛了的時候,所有的sentinel 會相互通訊進行新的master選舉。因此sentinel例項只要配置好監聽的master 的ip和埠就差不多了,當然還有其他的次要的資訊,如需要多少個sentinel例項同意才選舉成功新的master。最簡潔的配置如:

port 5001
sentinel monitor mymaster 121.16.233.145 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 20000

需要注意的是,其實sentinel在將slave選舉為master後,會修改redis.conf  檔案:如果redis例項是master,則刪掉slaveof 行;否則更新slaveof 行,讓其指向新的master 的ip和埠,從而完成新的master-slave 配置 。 另外,當之前的redis重新啟動,會作為slave加入到之前的主從配置中。

PS:啟動的時候先啟動redis,後啟動sentinel,每一個redis都有一個sentinel例項來監聽

${CURRENT_PATH}/bin/redis-server ${CURRENT_PATH}/conf/redis.conf &
${CURRENT_PATH}/bin/redis-sentinel ${CURRENT_PATH}/conf/sentinel.conf > ${CURRENT_PATH}/redis.log 2>&1 &