Redis Centinelメカニズムと使い方(二)
概要
Redis-SentineはRedisが公式に推奨する高可用性(HA)ソリューションであり、RedisをMaster-slaveの高可用性ソリューションとして使用する場合、masterがダウンタイムした場合、Redis自体(多くのクライアントを含む)は自動的にプライマリ・スタンバイ・スイッチングを実現していないが、Redis-sentinel自体も独立して動作するプロセスであり、複数のmaster-slaveクラスタを監視することができる.マスターがダウンタイムしていることを発見したら、自分で分かるように切り替えることができます.
主な機能は以下の点です.は、redisが予想通りに良好に動作するかどうかを時々監視する. redisノードの実行状況が発見された場合、別のプロセス(例えばクライアント)に通知することができる. は自動切替が可能である.1つのmasterノードが使用できない場合、masterの複数のslave(1つ以上のslaveがある場合)のうちの1つを新しいmasterとして選択することができ、他のslaveノードは、それに追随するmasterのアドレスをmasterのslaveに昇格された新しいアドレスに変更する.
failoverがない場合の構成修正
現在failoverが進行していない場合でも、sentinelは現在の構成を使用して監視のmasterを設定します.特に、最新の構成に従ってslavesと確認されたノードは、master(上記の例ではネットワークによって隔離されたredis 3を参照)であると主張し、現在のmasterのslaveとして再構成される. slavesが誤ったmasterに接続されている場合、修正され、正しいmasterに接続されます.
Slave選挙と優先度
sentinelがfailoverを行う準備ができ、他のsentinelの許可を受けた場合、新しいmasterとして適切なslaveを選出する必要があります.
slaveの選挙は主にslaveの以下のいくつかの面を評価します. masterから切断する回数 . Slaveの優先度 データレプリケーションの下付き(slaveが現在どれだけmasterを持っているかを評価するためのデータ) プロセスID 1つのslaveがmasterと10回以上連絡を失い、毎回構成の最大接続時間(
より厳密な定義は、slaveが接続を切断し続ける時間が
選挙資格を失うと思われます.上記の条件を満たすslaveはmaster候補者リストに登録され、以下の順序でソートされます. sentinelはまずslavesの優先度に基づいてソートされ、優先度が小さいほど上位(?)にランクされます. 優先度が同じであれば、masterから受信したレプリケーションデータがどれが多いか、どれが上位にあるかをレプリケーションの下付きを表示します. 優先度と下付き文字が同じであれば、プロセスIDの小さいものを選択します.
1つのredisはmasterでもslaveでも、構成にslave優先度を指定する必要があります.マスターもfailoverでslaveになる可能性があることに注意してください.
redisのslave優先度が0の場合、masterは選択されません.しかし、masterのどこからデータがコピーされますか.
SentinalとRedis認証
クライアントとslaveは、masterが接続するためにパスワードが必要になるように構成されている場合、接続時にパスワードを指定する必要があります.
マスターは
ただしsentinelを使用すると、1つのmasterがslaveになり、1つのslaveがmasterになる可能性があるため、上記の2つの構成項目を同時に設定する必要があります.
Sentinel API
Sentinelはデフォルトで26379ポートで動作し、sentinelはredisプロトコルをサポートするため、redis-cliクライアントまたは他の利用可能なクライアントを使用してsentinelと通信することができます.
sentinelと通信できる方法は2つあります.は、クライアントを直接使用してメッセージを送信する である.のもう1つは、failoverやredisインスタンスの実行エラーなど、sentinelイベントを購読するためにパブリッシュ/購読モードを使用することです.
Sentinalコマンド
sentinelがサポートする合法的な命令は以下の通りです.
Centinel構成の動的変更
redis 2から8.4からsentinelは、masterの構成を追加、削除、変更するためのAPIのセットを提供します.
APIでsentinelの構成を変更した場合、sentinelは変更した構成を他のsentinelに伝えません.複数のsentinelに対して構成を変更するコマンドを手動で送信する必要があります.
次はsentinel構成を変更するコマンドです. を傍受するように伝えた.
プロファイルに存在するプロファイル項目であれば、
Sentinalの追加または削除
sentinel自動発見メカニズムがあるため、sentinelをクラスタに追加するのは簡単です.Masterに監視するだけで、新しく追加したsentinelは他のsentinelの情報とmasterdのすべてのslaveを得ることができます.
複数のsentinelを追加する必要がある場合は、ネットワーク分離による問題を予防するために、次から次へと追加することをお勧めします.30秒ごとにsentinelを追加することができます.最後に
sentinelを削除するのは少し複雑です.sentinelは組織と長い間連絡を失っていても、すでに存在しているsentinelを削除しないからです.sentinelを削除するには、次の手順に従います.削除するsentinel を停止するは、 すべてのsentinelsに一致する現在のsentinel数があるかどうかを確認します.
古いマスターを削除するかslaveに達しない
sentinelは、slaveが組織と長い間つながっていなくても、Masterのslavesを記録します.これはsentinelクラスタがリカバリ可能なslaveを再構成する能力が必要であるため、有用である.
また、failoverの後、失効したmasterは新しいmasterのslaveとしてマークされ、使用可能になると新しいmasterからデータがコピーされます.
その後、slave(かつてmasterだった可能性があります)を永久に削除したい場合があります.
パブリッシュ/サブスクリプション
クライアントは、あるチャネルのイベントを購読するコマンドをsentinelに送信することができ、特定のイベントが発生すると、sentinelはすべての購読クライアントに通知します.クライアントはサブスクリプションのみで、パブリッシュできないことに注意してください.
サブスクリプションチャンネルの名前はイベントの名前と一致します.たとえば、sdownというチャンネル名は、SDOWNに関連するすべてのメッセージを購読者に公開します.
すべてのメッセージを購読するには、
以下は、すべてのメッセージを購読した場合、受信できるすべてのメッセージのメッセージフォーマットです.最初の単語はチャンネルの名前で、他はデータのフォーマットです.
注:次のinstance detailsのフォーマットは次のとおりです.
@
このredisインスタンスがmasterである場合、@以降のメッセージは表示されません.
TILTモード
redis sentinelはシステム時間に非常に依存しており、例えばPING返信にどのくらいの時間がかかったかを判断するためにシステム時間を使用します.しかし、システム時間が変更されたり、システムが非常に忙しい場合、プロセスが詰まったりすると、sentinelが正常に動作しない可能性があります.システムの安定性が低下すると,TILTモードはsentinelが入ることができる保護モードである.TILTモードに入るとsentinelはモニタリングを継続しますが、他の動作はありません.
-BUSY状態
注:この機能はまだ実装されていません.
スクリプトの実行時間が構成の実行時間を超えると、sentinelは-BUSYエラー信号を返します.このことがfailoverをトリガーする前に発生した場合、sentinelはSCRIPT KILLコマンドを送信し、scriptが読み取り専用であれば正常に実行できます.
Redis-SentineはRedisが公式に推奨する高可用性(HA)ソリューションであり、RedisをMaster-slaveの高可用性ソリューションとして使用する場合、masterがダウンタイムした場合、Redis自体(多くのクライアントを含む)は自動的にプライマリ・スタンバイ・スイッチングを実現していないが、Redis-sentinel自体も独立して動作するプロセスであり、複数のmaster-slaveクラスタを監視することができる.マスターがダウンタイムしていることを発見したら、自分で分かるように切り替えることができます.
主な機能は以下の点です.
failoverがない場合の構成修正
現在failoverが進行していない場合でも、sentinelは現在の構成を使用して監視のmasterを設定します.特に、
Slave選挙と優先度
sentinelがfailoverを行う準備ができ、他のsentinelの許可を受けた場合、新しいmasterとして適切なslaveを選出する必要があります.
slaveの選挙は主にslaveの以下のいくつかの面を評価します.
down-after-milliseconds option
)を超え、sentinelがfailoverを行ったときにslave接続を失ったことを発見した場合、このslaveはsentinelによって新しいmasterに適していないと判断される.より厳密な定義は、slaveが接続を切断し続ける時間が
(down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state
選挙資格を失うと思われます.上記の条件を満たすslaveはmaster候補者リストに登録され、以下の順序でソートされます.
1つのredisはmasterでもslaveでも、構成にslave優先度を指定する必要があります.マスターもfailoverでslaveになる可能性があることに注意してください.
redisのslave優先度が0の場合、masterは選択されません.しかし、masterのどこからデータがコピーされますか.
SentinalとRedis認証
クライアントとslaveは、masterが接続するためにパスワードが必要になるように構成されている場合、接続時にパスワードを指定する必要があります.
マスターは
requirepass
で自分のパスワードを設定し、パスワードを提供しないとこのマスターに接続できません.slaveはmasterauth
でmasterにアクセスする際のパスワードを設定します.ただしsentinelを使用すると、1つのmasterがslaveになり、1つのslaveがmasterになる可能性があるため、上記の2つの構成項目を同時に設定する必要があります.
Sentinel API
Sentinelはデフォルトで26379ポートで動作し、sentinelはredisプロトコルをサポートするため、redis-cliクライアントまたは他の利用可能なクライアントを使用してsentinelと通信することができます.
sentinelと通信できる方法は2つあります.
Sentinalコマンド
sentinelがサポートする合法的な命令は以下の通りです.
PING
sentinelはPONG
に返信する.SENTINEL masters
は、監視するすべてのマスターおよびそれらの状態を表示する.SENTINEL master
指定masterの情報と状態を表示する.SENTINEL slaves
は、指定されたmasterのすべてのslaveおよびそれらの状態を表示する.SENTINEL get-master-addr-by-name
は、指定したmasterのipとポートを返し、failoverまたはfailoverが完了している場合、masterに昇格したslaveのipとポートが表示されます.SENTINEL reset
名前が正規表現に一致するすべてのmasterの状態情報、それ以前の状態情報、およびslaves情報をリセットする.SENTINEL failover
sentinelにfailoverを強制し、他のsentinelの同意を得る必要はありません.ただしfailoverの後、最新の構成は他のsentinelに送信されます.Centinel構成の動的変更
redis 2から8.4からsentinelは、masterの構成を追加、削除、変更するためのAPIのセットを提供します.
APIでsentinelの構成を変更した場合、sentinelは変更した構成を他のsentinelに伝えません.複数のsentinelに対して構成を変更するコマンドを手動で送信する必要があります.
次はsentinel構成を変更するコマンドです.
SENTINEL MONITOR
このコマンドはsentinelに新しいmaster SENTINEL REMOVE
sentinelにあるmasterに対する傍受を放棄するように命令するSENTINEL SET
このコマンドは、指定したマスターの構成を変更するためにRedisのCONFIG SET
コマンドに似ています.複数をサポートします.例えば、SENTINEL SET objects-cache-master down-after-milliseconds 1000
プロファイルに存在するプロファイル項目であれば、
SENTINEL SET
コマンドで設定できます.これはmasterのプロパティ、例えばquorum(票数)を設定するためにも使用できますが、masterを削除してからmasterを再追加する必要はありません.例:SENTINEL SET objects-cache-master quorum 5
Sentinalの追加または削除
sentinel自動発見メカニズムがあるため、sentinelをクラスタに追加するのは簡単です.Masterに監視するだけで、新しく追加したsentinelは他のsentinelの情報とmasterdのすべてのslaveを得ることができます.
複数のsentinelを追加する必要がある場合は、ネットワーク分離による問題を予防するために、次から次へと追加することをお勧めします.30秒ごとにsentinelを追加することができます.最後に
SENTINEL MASTER mastername
を使って、すべてのsentinelがmasterに監視されているかどうかを確認することができます.sentinelを削除するのは少し複雑です.sentinelは組織と長い間連絡を失っていても、すでに存在しているsentinelを削除しないからです.sentinelを削除するには、次の手順に従います.
SENTINEL RESET *
コマンドを他のすべてのsentinelインスタンスに送信します.指定したmasterの上のsentinelをリセットするには、*番号を特定の名前に変更するだけです.送信間隔は30秒を下回らないことに注意してください.SENTINEL MASTER mastername
を使用してクエリーを行います.古いマスターを削除するかslaveに達しない
sentinelは、slaveが組織と長い間つながっていなくても、Masterのslavesを記録します.これはsentinelクラスタがリカバリ可能なslaveを再構成する能力が必要であるため、有用である.
また、failoverの後、失効したmasterは新しいmasterのslaveとしてマークされ、使用可能になると新しいmasterからデータがコピーされます.
その後、slave(かつてmasterだった可能性があります)を永久に削除したい場合があります.
SENTINEL RESET master
コマンドをすべてのsentinelsに送信するだけで、リストにmasterデータを正しくコピーできるslaveが更新されます.パブリッシュ/サブスクリプション
クライアントは、あるチャネルのイベントを購読するコマンドをsentinelに送信することができ、特定のイベントが発生すると、sentinelはすべての購読クライアントに通知します.クライアントはサブスクリプションのみで、パブリッシュできないことに注意してください.
サブスクリプションチャンネルの名前はイベントの名前と一致します.たとえば、sdownというチャンネル名は、SDOWNに関連するすべてのメッセージを購読者に公開します.
すべてのメッセージを購読するには、
PSUBSCRIBE *
を簡単に使用します.以下は、すべてのメッセージを購読した場合、受信できるすべてのメッセージのメッセージフォーマットです.最初の単語はチャンネルの名前で、他はデータのフォーマットです.
注:次のinstance detailsのフォーマットは次のとおりです.
@
このredisインスタンスがmasterである場合、@以降のメッセージは表示されません.
+reset-master -- master .
+slave -- slave slave .
+failover-state-reconf-slaves -- Failover reconf-slaves
+failover-detected -- failover
+slave-reconf-sent -- sentinel SLAVEOF
+slave-reconf-inprog -- slave master slave, 。
+slave-reconf-done -- slave master slave master 。
-dup-sentinel -- master sentinel ( sentinel , ).
+sentinel -- master sentinel 。
+sdown -- SDOWN ;
-sdown -- SDOWN 。
+odown -- ODOWN 。
-odown -- ODOWN 。
+new-epoch -- 。
+try-failover -- failover , sentinel 。
+elected-leader -- failover 。
+failover-state-select-slave -- slave master 。
no-good-slave -- slave master
selected-slave -- slave master
failover-state-send-slaveof-noone -- master slave 。
failover-end-for-timeout -- failover 。
failover-end -- failover 。
switch-master -- master 。 。
+tilt -- Tilt 。
-tilt -- Tilt 。
TILTモード
redis sentinelはシステム時間に非常に依存しており、例えばPING返信にどのくらいの時間がかかったかを判断するためにシステム時間を使用します.しかし、システム時間が変更されたり、システムが非常に忙しい場合、プロセスが詰まったりすると、sentinelが正常に動作しない可能性があります.システムの安定性が低下すると,TILTモードはsentinelが入ることができる保護モードである.TILTモードに入るとsentinelはモニタリングを継続しますが、他の動作はありません.
is-master-down-by-addr
のようなコマンドにも応答しません.TILTモードでは、失効ノードを検出する能力が信頼できないためです.システムが正常に戻ると、30秒続くとsentinelはTITLモードを終了します.-BUSY状態
注:この機能はまだ実装されていません.
スクリプトの実行時間が構成の実行時間を超えると、sentinelは-BUSYエラー信号を返します.このことがfailoverをトリガーする前に発生した場合、sentinelはSCRIPT KILLコマンドを送信し、scriptが読み取り専用であれば正常に実行できます.