整理了近期在項目上做的一些技術研究,希望與大家共同探讨交流。
項目中經常使用緩存服務,目前redis是當之無愧的首選,即便如此對于企業級項目,仍然要考慮更高的穩定性,是以進行了如下研究探索。
1,部署結構圖:

2,目标清單:
1) 192.168.31.220、192.168.31.221 和 192.168.31.222 為三台 redis 伺服器。
初始狀态下 220 為 master,221 和 222 為 slave,slave 的資料來源于 master。
2) redis 伺服器上各自存在一個 Sentinel,監控本機 redis 運作情況,并通知給閉路環上其它的 redis 節點。
3) 當 master 發生異常(例如:當機和斷電等)導緻不可運作時,Sentinel 将通知給其它節點,而剩餘節點上的 Sentinel 将重新選舉出新的master,而原來的master重新恢複正常後,則一直扮演 slave 角色。
4) 規定整個架構體系中,master提供讀寫服務,而slave隻提供讀取服務。
3,安裝 redis
tar * && make && make test
4,實作過程
4.1 編輯 master(220)的配置檔案
vi /etc/redis/redis.conf
Master redis.conf 摘要代碼
daemonize yes //開啟守護模式
dir ./ //指定資料存儲目錄
appendonly yes //打開 aof 持久化
appendfsync everysec // 每秒一次 aof 寫
protected-mode no //保護模式關閉
# bind 192.168.31.220 //要想遠端連接配接 redis,将此行登出
4.2 編輯 slave(221和222上)的配置檔案
在上一節的基本上加入如下配置項:
Slave redis.conf 摘要代碼
slaveof 192.168.31.220 6379 // 指定所屬的主機
slave-read-only yes //指定從機"隻讀"
min-slaves-to-write 1
min-slaves-max-lag 10
4.3 編輯 Sentinel 檔案
vi /etc/redis/sentinel.conf
Sentinel.conf 摘要代碼
monitor mymaster 192.168.31.220 6379 2
down-after-milliseconds mymaster 60000
failover-timeout mymaster 180000
parallel-syncs mymaster 1
down-after-milliseconds resque 10000
failover-timeout resque 180000
parallel-syncs resque 5
注意:可以配置多個 master 節點
4.4 啟動
redis-server redis.conf
redis-sentinel sentinel.conf &
先啟動redis,再啟動sentinel
注意:
永遠部署至少三個 Sentinel 在三個不同的機器裡
在 sentinel 沒有選舉出新 master 之前,不要立即重新開機失效的 master
4.5 使用
4.5.1 檢視複制資訊:
redis-cli -h 192.168.31.220 -p 6379
auth 123123 //如果配置了密碼請執行這一步,未配置請忽略
info replicaiton
4.5.2 檢視 sentinel 監控的 master-slave 資訊:
redis-cli -h 192.168.31.220 -p 26379
sentinel masters
sentinel slaves mymaster
此時如果出現報錯,那麼在sentinel的配置檔案中加入
protected-mode no
重新開機該 sentinel。