sentinel搭建redis叢集經驗總結

NO IMAGE

一、protected-mode
預設情況下,redis node和sentinel的protected-mode都是yes,在搭建叢集時,若想從遠端連線redis叢集,需要將redis node和sentinel的protected-mode修改為no,若只修改redis node,從遠端連線sentinel後,依然是無法正常使用的,且sentinel的配置檔案中沒有protected-mode配置項,需要手工新增。依據redis文件的說明,若protected-mode設定為no後,需要增加密碼驗證或是IP限制等保護機制,否則是極度危險的。
二、sentinel提供的master ip
sentinel儲存著所有可用node的IP,jedis pool通過sentinel來獲取redis的可用master ip來建立連線池連線,這裡有一個很坑的地方,若sentinel和redis node部署在同一臺伺服器,sentinel監控的master ip不能寫成127.0.0.1,需要寫成真實IP。sentinel在對外管理MASTER IP時,只是簡單的將配置檔案中的IP儲存,而不會在對外提供服務時,動態轉換為127.0.0.1所在機器的真實IP。
三、sentinel不共享配置
每一個sentinel結點,各自儲存自己的配置資訊,這在搭建叢集時,容易出現某一個sentinel結點配置和其它不一致而導致的詭異系統問題。jedis pool在連線到sentinel列表後,會從第一個可用的sentinel結點獲取redis叢集的資訊,來構建pool,這樣就可能會導致構建異常。
四、叢集狀態
ODOWNODOWN是sentinel認為整個叢集不可用。有一種情況導致的ODOWN是由於配置不當導致,而非真的叢集不可用。sentienl會根據配置檔案中的master IP和埠來獲取整個叢集的初始狀態(包括MASTER結點是否可用,以及所有SLAVE結點的狀態),若此時sentienl中的master配置和叢集狀態中的真正master不匹配時,sentinel就認為叢集不可用。叢集在master掛掉後,sentinel會進行failover處理 ,若failover後,很不幸所有sentinel都掛了,再重啟後的sentinel就會因為找不到master,而認為叢集ODOWN。