天天看點

sentinel搭建redis叢集經驗總結

一、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。