❝Redis のマスター/スレーブ レプリケーションの役割については、「マスター/スレーブ レプリケーションは高可用性の基礎である」という格言があります。可用性とは、システムの負荷を減らすことです。提供できない時間は、よく聞かれるシックスナインのことです。高可用性を実現するには、センチネルとクラスターが不可欠です。この記事では、主にセンチネルのメカニズムについて紹介します。
##❞
Kaka はインタビュー ガイドを作成するためのロードマップをまとめました。このようなロードマップに基づいて記事を書いていく予定ですが、後になって追加されていないナレッジ ポイントが追加されていることに気づきました。また、パートナーの皆様の追加協力もお待ちしております。コメント エリアでお会いしましょう! ❞
このとき、 Sentinel という名前の兄貴が突然現れました。兄貴は私にこう言いました。この問題に対処するのに役立ちます。
メインノードマスターはボスとしてプレイさせてくれないので。 4人の中からボスを選んで一緒に遊んでもらいます。
あなたと遊んでくれなかった上司が戻ってきたら、その上司のアイデンティティは無効になり、あなたの上司ではなくなります。彼は私が選択したボスとのみプレイできます。
上記の対話プロセスは、センチネルを設定することの意味を正確に示しています。誰が遊んで誰にデータを提供するかということです。センチネルの役割がわかったら、次に進みます。
「最後に、専門用語を使ってセンチネルとは何かについて説明します。」
センチネル (英語名は Sentinel) は、マスターとスレーブに使用される分散システムです。 monitors
の各サーバーの構造 マスター ノードに障害が発生すると、投票メカニズムを通じて新しいマスター ノードが選択され、すべてのスレーブ ノードが新しいマスター ノードに接続されます。
上で説明した対話プロセスは、センチネルの機能の 1 つです。自動的にフェイルオーバーします。
その役割に関して言えば、それはまさにこの番兵が仕事で行っていることと同じでなければなりません。まず、比較的ドライな概念を使用して説明し、次に動作原理について以下で 1 つずつ説明します。
Sentinelの3つの機能監視・通知・障害自動転送
sentinel で使用される設定ファイルは sentinel.conf## です。
#sentinel.conf 設定情報を解釈しましょうしかし、それらのほとんどはコメントです。ここで、Kaka は、これらの役に立たない情報をフィルタリングするコマンドを提供しますcat Sentinel.conf | grep -v '#' | grep -v '^$'
cat Sentinel.conf を使用します| grep -v '#' | grep -v '^$' > ./data/sentinel-26379.confsentinel.conf 内のフィルタリングされた情報を
/usr/local/redis/conf# に移動します##ダウンロード次に開きます
sentinel-26379.conf情報ストレージ ディレクトリを変更します次に、2 つの Sentinel 構成ファイル (ポートは 26380 と 26381) をすぐにコピーします。
sed 's/26379/26381/g' Sentinel-26379.conf > Sentinel-26381.conf<figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center;"><img src="https://img-blog.csdnimg.cn/20200602234003569.png" alt="Redis Sentinel 原則、私は長い間あなたを容認してきました!" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; font-size: 13px;"><span style="background-image: url(https://img.alicdn.com/tfs/TB1Yycwyrj1gK0jSZFuXXcrHpXa-32-32.png); display: inline-block; width: 18px; height: 18px; background-size: 18px; background-repeat: no-repeat; background-position: center; margin-right: 5px; margin-bottom: -5px;"></span>ここに図の説明を挿入</figcaption></figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 26px; margin-top: 10px; margin-bottom: 10px; font-size: 14px; word-spacing: 2px;"> マスター/スレーブ レプリケーションが通常の動作状態にあることをテストし、3 つの Redis サーバーを起動し、ポートが正常に動作していることをテストします。 <code style="overflow-wrap: break-word; margin: 0px 2px; font-family: " operator mono consolas monaco menlo monospace word-break: break-all color: rgb background: rgba padding: border-radius: height: line-height:> 6379, 6380, 6381
マスターノードの情報を確認します スレーブノードが 2 台接続されており、ポートはそれぞれ 6380 と 6381 です。
ここでの小さなポイントは、ラグの 1 つが 1 で、もう 1 つが 0 であるということです。 lag は遅延時間です。ローカルでテストしているため、0 という状況になります。クラウド サーバーを使用している場合、これはまれに発生します。ラグの値は 0 と 1 であり、これは正常です。 マスター ノードをテストしてハッシュ値を追加します。hset kaka name kaka
スレーブ 1 とスレーブ 2 からそれぞれ kaka 値を取得し、マスター/スレーブ レプリケーションが正常に実行されているかどうかを確認します。
テスト後、マスター/スレーブ構造は正常に動作しています。 センチネルを開始しますredis-sentinel 26379-sentinel.conf
26379 センチネルに接続します (主に最後の行)。監視対象のマスター ノードの名前は mymaster で、ステータスは正常です。スレーブノードは 2 つあります センチネルの数は 1 です 26379 のセンチネル構成情報を確認しましょう。この時点では変更されています。 26380
, のセンチネルを起動します。 redis-sentinel 26380-sentinel .conf
、最後の行に追加の情報があることに注意してください。この ID は、26379
構成ファイルに新しく追加された ID です。同じく新しく追加された Sentinel 26379 のクライアント 26380 Sentinel の ID 現在、26379 Sentinel の設定ファイルを確認しています。初めて設定ファイルを確認したとき、26380 Sentinel は設定されていません。 2 回目に設定ファイルを確認すると、26380 Sentinel が設定された後に追加された情報が表示されます。 最後に、Sentinel クライアント 3 を起動する必要があります。ポート番号は 26381 です。起動後は設定情報やサーバー情報も変更されますので、Sentinel 26380の情報を追加するとSentinel 26381にも情報が反映されます。
30 秒待つと、26379 センチネル クライアントが表示されます。いくつかの新しい情報では、この情報は何をするのでしょうか?分解してみましょう。
最初にこの情報についていくつか知っておく必要があります
リスト タイプを新しいマスター ノード 6380 に追加します6379 と 6381 でこの値を取得します。これで完了です。セントリーモードの設定が完了しました。
3. Sentinel の動作原理本題に入りますが、セントリーの役割は監視、通知、フェイルオーバーです。そして、動作原理もこれら 3 つの点を中心に展開されます。
sentinel is-master-down-by-address-port
sentinel is-master-down-by-address-port
を自分のイントラネットに送信します。最初に送信された sentinel が- master-down-by-address-port
の番兵は、あなたの言う通り、この男は確かに死んでいると言いました。誰もがマスター ノードがダウンしていると考えると、そのステータスは odown
に変更されます。センチネルがマスター ノードがハングアップしていると考える場合、ステータスは sdown
となり、センチネルの半数がマスター ノードがハングアップしていると考える場合、ステータスは odown
になります。これが、センチネルが奇数で構成されている理由です。❝現時点で、センチネルは問題を検出しました。したがって、どのセンチネルが新しいマスター ノードを選出する責任がありますか! 張三も行く、李斯も行く、王武も行くということはあり得ません。混乱するでしょう。すべてのセンチネルの中からリーダーを選択する必要があるので、どのように選択するかは、下の図を参照してください。 5 人のセンチネルは一緒に会議を開きます。すべてのセンチネルはイントラネット内にいます。そして、彼らが行うことの 1 つは、5 人のセンチネルが同時にコマンドを送信することです。投票は、1 人の監視員の投票が監視員の総数の半分になるまで、このルールに従って開始されます。 Sentinel1 の投票数が Sentinel1 の総数の半分以上に達した後に Sentinel1 が選出されると仮定します。このとき、次の段階に到達します。センチネル is-master-down-by-address- port
そして選挙の時刻とrunidを持ってきてください。 各監視員は候補者であると同時に投票者でもあります。各監視員は 1 票を持ち、封筒はその投票権を表します。 Sentinel1 と Sentinel4 が選挙の準備のために同時にグループに指示を送信すると、Sentinel2 はこの時点で、最初に指示を受け取った方に投票すると言います。 Sentinel1 が早期にリリースされた場合、sentinel2 の投票が Sentinel1 に投じられます。
上記では、Sentinel は代表として Sentinel1 を選択し、すべてのスレーブ ノードに移動してマスター ノードとして 1 つを見つけました。マスター ノードの選択には、単にランダムに選択するのではなく、一定のルールがあります。 まずオンラインに接続していない人を排除しましょう
応答が遅いものを強制終了します。Sentinel はすべての Redis に情報を送信し、応答が遅いものは強制終了します。元のマスター ノードから長時間切断されているものを強制終了します。 . ここではデモが十分ではないので、すべて 新しいslave5が追加されましたが、これでは意味がありません。 上記 3 点から判断すると、salve4 とslave5 がまだ残っており、優先順位の原則に従ってフィルタリングされます。
新しいマスター ノードを選択した後、すべてのノードに指示を送信する必要があります。
Sentinel に関するすべての知識ポイントについては、この記事で説明を終えました。これが Sentinel の仕組みです。その動作原理を簡単に見てみましょう。
最初に監視し、すべてのセンチネルが情報を同期します
センチネルはサブスクリプションに情報を公開します
フェイルオーバー
上記はセンチネルについてのカカの理解です。間違いがあったとしても、カカはすぐに修正します。
❝学習の継続、ブログの継続、共有の継続は、カカがそのキャリア以来常に支持してきた信念です。巨大なインターネット上のカカの記事がそうであることを願っています。助けてください。次号でお会いしましょう。
❞
推奨: "Redis チュートリアル "
以上がRedis Sentinel 原則、私は長い間あなたを容認してきました!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。