1

Sentinel フェールオーバーをサブスクライブするには、チャネルの名前は何ですか? サブスクライブされた関数でマスターを更新する必要があることをどのように検出しますか?

高可用性とフェイルオーバーのために Redis Sentinel を使用してマルチノード Redis をセットアップしています。

Redis マスターに障害が発生し、システムが新しいマスターを選択したことを検出するために、Pub/Sub を Redis にセットアップする必要があります。

_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})
4

1 に答える 1

4

これを実現するには、マスター ノードではなくセンチネルにサブスクライブする必要があります。お探しのチャンネルは です"+switch-master"。Sentinel のドキュメントでは、チャネルは"switch-master"「+ なし」と示されていますが、3.2.4 の時点では + が含まれています。

Redis Sentinel Pub/Sub メッセージ ドキュメント

残りについては、redis-py ドキュメントを参照できるはずです。 Redis-py ドキュメント


アップデート

設定を使用することも検討できclient-reconfig-scriptます。

フェールオーバーのためにマスターが変更された場合、アプリケーション固有のタスクを実行するためにスクリプトを呼び出して、構成が変更され、マスターが別のアドレスにあることをクライアントに通知できます。

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

それが役立つことを願っています

于 2016-12-02T23:53:57.947 に答える