センチネルメカニズム

センチネル(センチネル、歩哨)高可用性ソリューションのRedis:Sentinelシステムは、マスターサーバーの任意の数を監視することができるセンチネルの1つまたは複数のインスタンスを有し、すべてのサーバーからマスターサーバー下にあるもの、および監視しますマスターがオフライン状態になると、自動的にオフラインマスターは新しいプライマリサーバからメインサーバとオフラインが要求コマンドを処理し続けるのではなく、プライマリサーバの下で、サーバからのアップグレード。

 

ワン:プライマリサーバーの情報を取得します

Sentinelは、デフォルトでは10秒ごとに一度、コマンドは、INFOコマンドが監視されているメインサーバに接続されて送信され、プライマリサーバ応答コマンドのINFOを分析することにより、この情報を取得します。二つの情報:

サーバー自体に関する情報

RUN_IDドメインレコードIDを実行しているサーバー、およびドメインレコードサーバーの役割の役割を含みます

下のサーバーからマスターサーバーに関するすべての情報

1:各行は、文字列「奴隷」の冒頭で、サーバーからレコードで構成され、IP =ドメインはサーバーのIPアドレス、サーバからポート=ポート番号フィールドレコードから各行を記録します。サーバからアドレス情報を提供し、サーバが自動的にユーザーことなく、これらのIPアドレスとポート番号、センチネルから発見することができます。

2:情報RUN_IDの役割ドメインとドメイン構造の例センチネルマスターサーバーが更新されます。そして、サーバから返されたマスター情報は、辞書は構造の更新マスタースレーブ例に使用されます

3:存在する場合、それはサーバの構成例から更新されるべきであり、何があった場合(サーバからこれを示さない:センチネル分析INFOコマンド構造に対応するサーバインスタンスが既に辞書スレーブに存在するかどうかをチェックからサーバ情報に含まれます新たに発見された)は、Sentinelは奴隷のための辞書内のサーバーからサーバーからの構造体の新しいインスタンスを作成します。

プライマリサーバと構造のサーバインスタンスから:

サーバがSRI_SLAVEあるから、プライマリサーバの例には、フラグSRI_MASTERの構成であります

自動的にIP +ポートにより、サーバ名センチネルに基づいてサーバからユーザ名センチネル用プロファイルの設定により、プライマリサーバ構成の例。

 

2:サーバー情報を取得します。

センチネルは、プライマリサーバが新しいサーバー表示されていることを見つけたとき、新たな構造にこの追加は、サーバのコマンドからの接続およびサブスクリプションの接続に接続されたサーバから対応するインスタンスを作成するために、加えて、作成されます。

サーバーからのINFOコマンドを送信するために10秒ごとに接続し、以下の回答に基づいて情報を分析するためのコマンドを作成した後:

ID RUN_IDを実行しているサーバーから

役割サーバーから役割

ポート番号MASTER_PORTのIPアドレスは、プライマリサーバとプライマリサーバをMASTER_HOST

マスターmaster_link_statusからサーバーの接続ステータス

優先slave_priorityサーバーから

レプリケーションサーバからのオフセットslave_repl_offset

この情報に基づいて、構造物のセンチネルの例では、サーバーから更新されます

 

III:サーバとメインサーバからの情報を送信します

2秒毎に一度、すべてのコマンドは、マスターサーバーモニタにサーバから送信されたコマンドによって接続されています

 

IV:マスターサーバーとサーバーから受信チャンネル情報

 

5:アップデート歩哨辞書

辞書歩哨センチネル自体を保存することに加えて、他のすべての情報は、センチネルマスターサーバーを監視しています。

1:キーはフォーマットでセンチネルの1つの名前です:IP:ポート

2:構造体の対応する実施例の値センチネル

メッセージは、他のSentinelセンチネルを受信した場合(対象センチネルセンチネルなどの情報を受信し、センチネルセンチネル送信情報源と呼ばれる)送信、センチネルは、以下の情報から特定の情報を分析します。

関連パラメータをセンチネル:センチネルIPのソースを、ポート、RUN_ID、配置された時代

プライマリサーバのパラメータ:センチネルサーバーが監視されている主な情報源の名前、IP、ポートは、configureの時代

これらのマスターサーバのパラメータから、ターゲットセンチネルは、その後記載センチネルパラメータに従って、適切なプライマリ・インスタンスの構造マスター・ディクショナリ自身センチネル状態を見つけるだろう、センチネル辞書プライマリサーバインスタンスの構造を確認するには、センチネルの構造例のソースがあるかどうか:

更新されたソースセンチネルの構造の例については、存在します

存在しない場合、ソースはそれがセンチネルがセンチネルターゲットがソースセンチネルような構造の新しいインスタンスを作成し、辞書歩哨にこの構造を追加する、新しいセンチネルのメインサーバを監視し始めた説明しました

 

シックス:センチネル他のコマンドに接続しても作成します

センチネルは、チャネル情報によって新しいセンチネルを見つけたとき、それだけではなく、新たな歩哨歩哨として辞書に対応する構造体のインスタンスを作成し、コマンドの新しいセンチネルに接続されている会社が作成されます。新しいSentinelはまたしても、最終的にセンチネルは、複数のネットワークを形成する同一のホストサーバが相互接続されたモニター、コマンドのセンチネルに接続を作成します:そこSentinelB、SentinelAでもSentinelBコマンドに接続されているのも、SentinelAコマンドに接続されています。

7:検出主観オフライン状態

デフォルトでは、Sentinelは、一度すべてのコマンドに毎秒それは(他のセンチネルを含むサーバーからマスターサーバーを含む)接続のインスタンスを作成します応答例としては、PINGコマンド戻るによって判断されるようにPINGコマンドは、送信されましたオンラインかどうか。

PINGコマンド応答にケースの二種類の例:

効果的な再:例としては、三種類の-MASTERDOWN 1を-LOADING、+ PONGを返さ

無効な応答の上記3種類以外に加えて、返信、または指定した時間内に何の応答を返しません

ダウン後のミリ秒内オプションセンチネル・コンフィギュレーション・ファイルが必要な場合は、センチネルオフライン主観的に判断された時間の長さを指定:ダウン後のミリ秒内のミリ秒単位のインスタンスが継続的にセンチネル無効な応答に戻った場合、それはセンチネルを変更します対応する構成例としては、例えば、フラグ属性識別SRI_S_DOWN開放構造は、例えば、状態がオフライン主観的に入ったことを示しています。

注意:

サーバから1.すべての長いオプション、すなわちダウン後にダウンオフライン主観は、マスターサーバーだけのオフライン状態センチネル主観的な判断のために使用されることはありません、マスターサーバはまた、決定の下に使用されているの値、および同じのすべて他の主観的なオフラインセンチネルマスターサーバーの状態を監視。

長さは、主観的オフライン複数の2センチネルマスターサーバー同じセンチネル複数を監視するために配置された場合、ダウン後のミリ秒のSentinelオプション設定の値が異なっていてもよく異なっていてもよく、したがって、プライマリサーバセンチネルできますそれは主観的にオフラインで決定された場合、その後、他のSentinelは、プライマリサーバがオンラインになっていると考えることができます

八:検出目的オフライン状態

プライマリサーバが、これは本当にサーバーがオフラインであるかどうかを判断するために、センチネル主観的なオフラインを判断すると、その判断の十分な数がオフラインである受け取った後、他のモニターに問い合わせセンチネル同じマスターサーバーになり、センチネルサーバは客観オフライン、およびプライマリサーバのフェイルオーバー操作から判断されます。

1:SENTINELはセンチネルオフライン他のメインサーバの同意するかどうかを尋ねるために、コマンドマスターダウン・バイ-addrにある送信

SENTINELは、マスタダウン・バイ・ADDR <IP> <ポート> <current_epoch> <RUNID>

マスターサーバーのIP主観的なオフラインのように決定されたIPセンチネル

センチネルポートは、主観的なオフラインのマスターサーバーのポート番号として決定されます

センチネル選挙につながる、センチネル現在のコンフィギュレーションの時代をcurrent_epoch

またはセンチネル操作ID RUNIDすることができる*記号は、*オフラインコマンドは、ホストサーバの客観的状態のためだけであり、IDはセンチネルリード選挙センチネルを実行するために使用されます

2:SENTINELコマンドマスタダウン・バイ・ADDRで受信

別のSentinel(ソースセンチネル)はSENTINELコマンドマスタ・バイ・ADDRで送信センチネル(ターゲットセンチネル)を受信すると、ターゲットSentinelは、要求に含まれる各パラメータと削除コマンドを解析し、その中のIPに従うとポートは、プライマリサーバをオフラインかどうかを決定し、マルチバルクリプライがソースセンチネルに対する応答として、このコマンドの3つのパラメータを含んで返します。

これらの3つのパラメータは、次のとおりです。

<Down_state>マスターサーバーのセンチネルバック目標検査結果、マスターサーバーが1オフラインであり、0は、プライマリサーバをオフラインに示していません

<Leader_runid> *センチネルセンチネルをリードするローカルID記号やターゲットを実行することができる*は、ホストサーバーとローカルIDのオフライン状態がリード選挙センチネルのためのセンチネルリードを実行しているだけのためのコマンドです

地元の有力センチネル<leader_epoch>センチネルターゲット構成の時代、選挙センチネルにつながります。その値は、このパラメータは常にある場合、値は*、* leader_runidないときにのみ有効です0

3:SENTINELであるマスター・ダウン・バイ-addrにコマンド応答を受け取ります

他のセンチネルによると、SENTINELは返信マスターダウン・バイ-addrにある送り返さセンチネル統計は値が必要な客観オフラインの数(つまり、定足数特性を決定するために指定した構成に達したときに、プライマリサーバの数は、オフラインになっ合意値)は、センチネル構造がオープンSRI_O_DOWNを特定のプライマリサーバインスタンスの属性フラグになり、マスターサーバーを識別することは客観的にオフライン状態になりました。

IX:センチネル選挙リード

サーバーが主な目的オフラインであると判断された場合、モニターは、センチネルオフラインプライマリサーバは、各センチネルのリードオフラインプライマリサーバフェイルオーバー操作によって、センチネルリードを選択するネゴシエーション。

 

センチネルをリードどのように選挙のルールや方法については:

1:各Sentinelは関係なく、時代がインクリメントされるように構成された選挙の成功、の、リーダーになるチャンスを持っています。

2:部分的なリード:ときに送信要求RUNIDのセンチネルA SENTINELあるマスタダウン・バイ・ADDR + SentinelA Aがローカル主要Bになることを表す別のSentinel Bへ

3:このルールは、最初に第一のリードローカルに役立って来ている、最初のコマンドは、それが半分以上の投票のとき、センチネルターゲットを拒否されます要件に戻ってすべての設定を受けセンチネルセンチネルをリードするローカライズ対象となるなどセンチネルとしてターゲットに送信されます、それはセンチネルリード、およびプライマリサーバをオフラインのフェイルオーバー操作になります。

テン:フェイルオーバー

選出されたリーダーセンチネル後、Sentinelは組立ラインをオフにつながるフェイルオーバー操作のためのプライマリサーバーとなっています。

すべてのサーバーからマスターサーバー下ログオフで、プライマリサーバとして選択したサーバから

、良好な状態を選択サーバからの完全なデータ、及びその後SLAVEOF誰コマンドを送信しない、サーバからホストサーバをに変換します

プライマリサーバではなく、すべての新しいプライマリサーバにコピーをサーバからオフラインになってみよう

ユーザーは、プライマリサーバがサーバに設定されているからログオフした、オンライン古いマスターサーバーの背面に新しいプライマリサーバは、それがサーバーから新しいマスターサーバーになります。

 

公開された50元の記事 ウォンの賞賛2 ビュー2271

おすすめ

転載: blog.csdn.net/eafun_888/article/details/104714263