2016-12-02 13 views
0

要訂閱Sentinel故障轉移,通道的名稱是什麼,以及如何檢測我需要刷新訂閱功能中的主控?如何在Sentinel和redis-py中使用Redis時故障切換到新主節點?

我有一個使用Redis Sentinel進行高可用性和故障轉移的多節點Redis設置。

我需要將Pub/Sub設置爲Redis來檢測Redis Master何時失敗並且系統選擇了新的Master。

_sentinel = redis.sentinel.Sentinel([(app.config["REDIS_HOSTNAME"],app.config["REDIS_SENTINEL_PORT"])]) 
_master = _sentinel.master_for(app.config["REDIS_SERVICE_NAME"]) 

def _sentinel_message_handler(message): 
    #TODO how do I detect that there is a new Redis Master? 

_pubsub = _master.pubsub() 
_pubsub.subscribe(**{app.config["TODO"]:_sentinel_message_handler}) 
+1

頻道列表可以在這裏找到:https://redis.io/topics/sentinel#pubsub-messages – davissp14

+0

我在這裏看到的一個問題是, REDIS_HOSTNAME應該通過一連串的Sentinel主機名連續嘗試,直到連接完成。這樣可以防止啓動時因一個哨兵節點關閉而崩潰。 – 0111001101110000

回答

1

要實現這一點,您將需要訂閱哨兵,而不是主節點。您正在尋找的頻道是"+switch-master"。 Sentinel文檔指出該通道爲「不帶+」的"switch-master",但從3.2.4開始,包含了+。

Redis Sentinel Pub/Sub Message Docs

你應該能夠引用Redis的-PY文檔的其餘部分。 Redis-py Docs


UPDATE

你也可以考慮使用client-reconfig-script設置。

當主人改變了,因爲故障切換腳本可以在 爲了執行應用程序特定的任務,以通知 配置已更改,主是在不同的地址的客戶端調用的。

http://download.redis.io/redis-stable/sentinel.conf

希望幫助

+0

哨兵對象沒有pubsub方法。只有主人。我同意這看起來很奇怪,因爲我希望故障切換能夠正常工作,即使拔下了主控也是如此。我是否需要爲每個奴隸以及主人找到所有奴隸和pubsub? – 0111001101110000

+0

那麼主要的問題是故障轉移事件不會發布到Redis節點,只有Sentinels。您在Redis pub/sub中唯一會看到的是「__sentinel __:hello」事件。 – davissp14

+1

我猜你想要聽故障轉移,以便快速重新配置客戶端?如果哨兵pub/sub不可行,則有一個想法是使用:https://github.com/andymccurdy/redis-py/blob/master/redis/client.py#L414作爲您的真相來源。雖然不理想。 – davissp14