ホームページ > データベース > Redis > Redis Sentinel 原則、私は長い間あなたを容認してきました!

Redis Sentinel 原則、私は長い間あなたを容認してきました!

咔咔
リリース: 2020-08-28 17:30:46
オリジナル
1798 人が閲覧しました

Redis のマスター/スレーブ レプリケーションの役割については、「マスター/スレーブ レプリケーションは高可用性の基礎である」という格言があります。可用性とは、システムの負荷を減らすことです。提供できない時間は、よく聞かれるシックスナインのことです。高可用性を実現するには、センチネルとクラスターが不可欠です。この記事では、主にセンチネルのメカニズムについて紹介します。

##❞

まえがき

##❝
Kaka はインタビュー ガイドを作成するためのロードマップをまとめました。このようなロードマップに基づいて記事を書いていく予定ですが、後になって追加されていないナレッジ ポイントが追加されていることに気づきました。また、パートナーの皆様の追加協力もお待ちしております。コメント エリアでお会いしましょう!
Redis Sentinel 原則、私は長い間あなたを容認してきました!
ここに画像の説明を挿入

メインコンテンツこの記事の次の側面に関する Sentinel の紹介

  • Sentinel の概要
  • Sentinel 構成
  • sentry の動作原理

この記事の実装環境

  • centos7.3 redis4.0
  • redis 作業ディレクトリ /usr/local/redis
  • ##シミュレーション操作の実行仮想マシン内

1. センチネルとは

監視の方法について簡単に説明しましょう。マスター/スレーブを設定しています レプリケーション中の状況の 1 つは、マスター ノードがダウンしていることです。サービスを提供するのは誰ですか!

マスター ノードがダウンしている場合、マスター/スレーブ レプリケーションは意味がありません。データは王様です、データなしでは意味がありません? 高可用性です。

このとき、Redis Sentinel 原則、私は長い間あなたを容認してきました! Sentinel という名前の兄貴が突然現れました。兄貴は私にこう言いました。この問題に対処するのに役立ちます。

メインノードマスターはボスとしてプレイさせてくれないので。 4人の中からボスを選んで一緒に遊んでもらいます。

あなたと遊んでくれなかった上司が戻ってきたら、その上司のアイデンティティは無効になり、あなたの上司ではなくなります。彼は私が選択したボスとのみプレイできます。

上記の対話プロセスは、センチネルを設定することの意味を正確に示しています。誰が遊んで誰にデータを提供するかということです。センチネルの役割がわかったら、次に進みます。

「最後に、専門用語を使ってセンチネルとは何かについて説明します。」

センチネル (英語名は Sentinel) は、マスターとスレーブに使用される分散システムです。 monitors の各サーバーの構造 マスター ノードに障害が発生すると、投票メカニズムを通じて新しいマスター ノードが選択され、すべてのスレーブ ノードが新しいマスター ノードに接続されます。

#2. センチネルの役割

上で説明した対話プロセスは、センチネルの機能の 1 つです。自動的にフェイルオーバーします。

その役割に関して言えば、それはまさにこの番兵が仕事で行っていることと同じでなければなりません。まず、比較的ドライな概念を使用して説明し、次に動作原理について以下で 1 つずつ説明します。

Sentinelの3つの機能監視・通知・障害自動転送

  • 監視
    • 誰が監視されていますか?マスター/スレーブ構造をサポートするには、一方がマスター ノード、もう一方がスレーブ ノードとなるため、この 2 つを監視する必要があります。
    • マスターノードとスレーブノードが正常に稼働しているか監視
    • マスターノードの生存とマスターノードの稼働状態を検知およびスレーブ ノード
  • 通知
    • Sentinel によってサーバーに問題が検出されると、通知が送信されます。他の監視員に送信されます。監視員は 1 つの WeChat グループに相当し、監視員によって発見されたすべての問題はこのグループに投稿されます。
  • #自動フェイルオーバー
    • メインノードのダウンが検出された場合、ダウンしたメインノードから切断します。すべてのスレーブ ノードで、スレーブ ノードの 1 つをマスター ノードとして選択し、他のスレーブ ノードをこの最新のマスター ノードに接続します。そして最新のサーバーアドレスをクライアントに通知します。
ここで注意すべき点は、Sentinel も Redis サーバーですが、外部にはサービスを提供しないことです。

センチネルを構成する場合は、奇数として構成します。では、なぜ Sentinel サーバーの数を奇数に構成するのでしょうか?この質問をすると、あなたが望む答えが以下に見つかります。

2. Sentinel の設定方法

1. 準備

この章では、セントリーの構成と準備作業の準備を開始します。下の写真はカカさんの準備の様子です。 8 つのクライアント、3 つのセンチネル、1 つのマスター ノード、2 つのスレーブ ノード、1 つのマスター ノード クライアント、および 1 つのスレーブ ノード クライアントを開始します。

Redis Sentinel 原則、私は長い間あなたを容認してきました!

2. Sentinel.conf 設定の解釈

sentinel で使用される設定ファイルは sentinel.conf## です。 #sentinel.conf 設定情報を解釈しましょうRedis Sentinel 原則、私は長い間あなたを容認してきました!しかし、それらのほとんどはコメントです。ここで、Kaka は、これらの役に立たない情報をフィルタリングするコマンドを提供しますRedis Sentinel 原則、私は長い間あなたを容認してきました!cat Sentinel.conf | grep -v '#' | grep -v '^$'Redis Sentinel 原則、私は長い間あなたを容認してきました!

  • port 26379: 外部サービスのポート番号
  • dir /tmp: センチネル作業情報の保管場所
  • ##センチネル監視mymaster 127.0.0.1 6379 2: 誰が監視されていますか? 名前はカスタマイズできます。その後ろの 2 は、2 人の監視員がマスター ノードがダウンしていると判断した場合、マスター ノードもダウンすることを表します。通常はこの番号に設定されます。センチネルの半分プラス 1。
  • sentinel down-after-milliseconds mymaster 30000: センチネルのダウンアフターミリ秒 mymaster 30000: センチネルが応答せずにマスター ノードに接続するまでにどのくらい時間がかかりますか。つまり、それはハングします。次の 30000 はミリ秒、つまり 30 秒です。
  • sentinelParallel-syncs mymaster 1: この設定項目は、フェイルオーバー中に新しいマスター ノードと同期できるスレーブ ノードの最大数を指します。値が小さいほどフェイルオーバーが完了するまでに時間がかかり、値が大きいほどデータ同期により使用できなくなるスレーブ ノードが増えます。
  • sentinel fadeover-timeout mymaster 180000: 同期プロセス中、完了までにかかる時間が効果的であると見なされます。システムのデフォルト値は 3 分です。

3. 設定を開始します

コマンド

cat Sentinel.conf を使用します| grep -v '#' | grep -v '^$' > ./data/sentinel-26379.confsentinel.conf 内のフィルタリングされた情報を /usr/local/redis/conf# に移動します##ダウンロード次に開きますsentinel-26379.confRedis Sentinel 原則、私は長い間あなたを容認してきました!情報ストレージ ディレクトリを変更します次に、2 つの Sentinel 構成ファイル (ポートは 26380 と 26381) をすぐにコピーします。 sed 's/26379/26381/g' Sentinel-26379.conf > Sentinel-26381.confRedis Sentinel 原則、私は長い間あなたを容認してきました!<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, 6381Redis Sentinel 原則、私は長い間あなたを容認してきました! マスターノードの情報を確認します スレーブノードが 2 台接続されており、ポートはそれぞれ 6380 と 6381 です。

ここでの小さなポイントは、ラグの 1 つが 1 で、もう 1 つが 0 であるということです。 lag は遅延時間です。ローカルでテストしているため、0 という状況になります。クラウド サーバーを使用している場合、これはまれに発生します。ラグの値は 0 と 1 であり、これは正常です。 Redis Sentinel 原則、私は長い間あなたを容認してきました!マスター ノードをテストしてハッシュ値を追加します。hset kaka name kakaRedis Sentinel 原則、私は長い間あなたを容認してきました!スレーブ 1 とスレーブ 2 からそれぞれ kaka 値を取得し、マスター/スレーブ レプリケーションが正常に実行されているかどうかを確認します。

テスト後、マスター/スレーブ構造は正常に動作しています。 Redis Sentinel 原則、私は長い間あなたを容認してきました!Redis Sentinel 原則、私は長い間あなたを容認してきました!センチネルを開始しますredis-sentinel 26379-sentinel.confRedis Sentinel 原則、私は長い間あなたを容認してきました!26379 センチネルに接続します (主に最後の行)。監視対象のマスター ノードの名前は mymaster で、ステータスは正常です。スレーブノードは 2 つあります センチネルの数は 1 です Redis Sentinel 原則、私は長い間あなたを容認してきました! 26379 のセンチネル構成情報を確認しましょう。この時点では変更されています。 Redis Sentinel 原則、私は長い間あなたを容認してきました! 26380, のセンチネルを起動します。 redis-sentinel 26380-sentinel .conf、最後の行に追加の情報があることに注意してください。この ID は、26379 構成ファイルに新しく追加された ID です。同じく新しく追加された Sentinel 26379 のクライアント 26380 Sentinel の IDRedis Sentinel 原則、私は長い間あなたを容認してきました! 現在、26379 Sentinel の設定ファイルを確認しています。初めて設定ファイルを確認したとき、26380 Sentinel は設定されていません。 2 回目に設定ファイルを確認すると、26380 Sentinel が設定された後に追加された情報が表示されます。 Redis Sentinel 原則、私は長い間あなたを容認してきました!最後に、Sentinel クライアント 3 を起動する必要があります。ポート番号は 26381 です。起動後は設定情報やサーバー情報も変更されますので、Sentinel 26380の情報を追加するとSentinel 26381にも情報が反映されます。 Redis Sentinel 原則、私は長い間あなたを容認してきました!

ここまでで、センチネルの構成は終了です。次に、マスター ノードをシャットダウンします。

30 秒待つと、26379 センチネル クライアントが表示されます。いくつかの新しい情報では、この情報は何をするのでしょうか?分解してみましょう。 Redis Sentinel 原則、私は長い間あなたを容認してきました!

Redis Sentinel 原則、私は長い間あなたを容認してきました!最初にこの情報についていくつか知っておく必要があります

  • sdown: この情報は、3 人の監視員のうちの 1 人がマスター ノードがダウンしていると考えていることを意味します
  • odown: この情報は、他の 2 つの監視がマスター ノードに接続し、マスター ノードが実際にダウンしていることを発見したことを意味します。ラウンド投票、ここでは Kaka は redis4.0 を使用しています、この情報はバージョン間で若干異なります
  • switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380: ここまでがセンチネルです投票の結果、ポート 6380 の redis がマスター ノードとして選択されます。
  • スレーブ スレーブ 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380: ここでのポートは 6381 です。 6379 と新しいマスター ノード 6380
  • との接続を確立しました。 sdown smile 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380: 最後の文はポート 6379 または It ですはオンラインではなかったため、オフラインにキックされました
  • 6379 redis サーバーを再びオンラインにすると、Sentinel サーバーが 2 つの文で応答したことがわかります。 1 つの文は、6379 をオフラインで削除することです。最後の文は、6379 を新しいマスター ノードに再接続することです。
  • このとき、マスターノードは 6380 です。マスター/スレーブレプリケーションが正しく動作しているかどうかを確認するには、redis クライアントに 6380 の値を設定します。

リスト タイプを新しいマスター ノード 6380 に追加しますRedis Sentinel 原則、私は長い間あなたを容認してきました!6379 と 6381 でこの値を取得します。これで完了です。セントリーモードの設定が完了しました。 Redis Sentinel 原則、私は長い間あなたを容認してきました!

Redis Sentinel 原則、私は長い間あなたを容認してきました!Redis Sentinel 原則、私は長い間あなたを容認してきました!Redis Sentinel 原則、私は長い間あなたを容認してきました!

3. Sentinel の動作原理

Sentinel を設定した後、次のことを行う必要があります。動作原理が分析されており、その動作プロセスを知ることによってのみ、Sentinel をより深く理解することができます。 この記事で説明する原則は、それほど無味乾燥なものではありません。技術記事をストーリーとして読むことができます。

本題に入りますが、セントリーの役割は監視、通知、フェイルオーバーです。そして、動作原理もこれら 3 つの点を中心に展開されます。

#1. モニタリング ワークフロー

Redis Sentinel 原則、私は長い間あなたを容認してきました!
ここに画像の説明を挿入
  1. センチネルは info コマンドを送信し、すべてのセンチネルのステータス、マスター ノードおよびスレーブ ノードの情報を保存します
  2. マスター ノードは Redis インスタンスを記録しますマスターノードによって記録される情報とセンチネルによって記録される情報は同じように見えますが、実際にはまだいくつかの違いがあります。
  3. センチネルは、マスター ノードから取得したスレーブ ノード情報に基づいて、対応するスレーブ ノードに info コマンドを送信します。
  4. 次に、センチネル 2同様に、マスター ノードが info コマンドを送信するように変更され、cmd 接続が確立されます。
  5. このとき、Sentinel 2 も同じ情報を保存します。 Sentinel 1 ですが、Sentinel 情報のみが保存されます。2 です。
  6. このとき、各センチネルの情報が一致するように、両者の間でパブリッシュとサブスクライブが確立されます。監視員間の情報の長期的な対称性を確保するために、監視員は相互に ping コマンドも送信します。
  7. 別の Sentinel 3 が来ると、同じことをしてマスター ノードとスレーブ ノードに情報を送信します。そして、Sentinel 1 と Sentinel 2 との接続を確立します。

2. 通知ワークフロー

Sentinel が送信します コマンドはステータスを取得して発行しますSentinel サブスクリプションへの情報。

Redis Sentinel 原則、私は長い間あなたを容認してきました!

3. フェイルオーバーの原則 (この記事の焦点)

Redis Sentinel 原則、私は長い間あなたを容認してきました!
ここに画像の説明を挿入します
  • センチネルは、センチネルが sdown を報告するまで、パブリッシュセンチネル: こんにちは、マスター ノードに送信し続けます。この言葉には見覚えがあるかもしれません。そうです、これは上記のマスター ノードを切断した後に Sentinel サーバーによって報告された情報です。 Sentinel がマスター ノードのダウンを報告しても、まだ完了していないため、Sentinel はマスター ノードがダウンしていることを示すメッセージをイントラネットに発行します。送信されたコマンドは sentinel is-master-down-by-address-port
  • です。他のセンチネルがコマンドを受信した後、マスター ノードはハングアップしましたか?ハングするかどうか見に行きましょう。送られてくるメッセージもこんにちは。残りのセンチネルも受信した情報を送信し、コマンド sentinel is-master-down-by-address-port を自分のイントラネットに送信します。最初に送信された sentinel が- master-down-by-address-port の番兵は、あなたの言う通り、この男は確かに死んでいると言いました。誰もがマスター ノードがダウンしていると考えると、そのステータスは odown に変更されます。センチネルがマスター ノードがハングアップしていると考える場合、ステータスは sdown となり、センチネルの半数がマスター ノードがハングアップしていると考える場合、ステータスは odown になります。これが、センチネルが奇数で構成されている理由です。
  • メイン ノードがダウンしていると考える 1 人のセンチネルの場合、これは主観的オフラインと呼ばれ、センチネルの半数がメイン ノードがダウンすると考える、これはゲストオフィシャル オフラインと呼ばれます。
  • #マスター ノードのゲスト オフィサーがオフラインであるとみなされると、センチネルは次のステップに進みます
現時点で、センチネルは問題を検出しました。したがって、どのセンチネルが新しいマスター ノードを選出する責任がありますか! 張三も行く、李斯も行く、王武も行くということはあり得ません。混乱するでしょう。すべてのセンチネルの中からリーダーを選択する必要があるので、どのように選択するかは、下の図を参照してください。 5 人のセンチネルは一緒に会議を開きます。すべてのセンチネルはイントラネット内にいます。そして、彼らが行うことの 1 つは、5 人のセンチネルが同時にコマンドを送信することです。

センチネル is-master-down-by-address- port

そして選挙の時刻とrunidを持ってきてください。 各監視員は候補者であると同時に投票者でもあります。各監視員は 1 票を持ち、封筒はその投票権を表します。 Sentinel1 と Sentinel4 が選挙の準備のために同時にグループに指示を送信すると、Sentinel2 はこの時点で、最初に指示を受け取った方に投票すると言います。 Sentinel1 が早期にリリースされた場合、sentinel2 の投票が Sentinel1 に投じられます。
投票は、1 人の監視員の投票が監視員の総数の半分になるまで、このルールに従って開始されます。 Sentinel1 の投票数が Sentinel1 の総数の半分以上に達した後に Sentinel1 が選出されると仮定します。このとき、次の段階に到達します。

上記では、Sentinel は代表として Sentinel1 を選択し、すべてのスレーブ ノードに移動してマスター ノードとして 1 つを見つけました。マスター ノードの選択には、単にランダムに選択するのではなく、一定のルールがあります。 まずオンラインに接続していない人を排除しましょうRedis Sentinel 原則、私は長い間あなたを容認してきました!

Redis Sentinel 原則、私は長い間あなたを容認してきました!応答が遅いものを強制終了します。Sentinel はすべての Redis に情報を送信し、応答が遅いものは強制終了します。Redis Sentinel 原則、私は長い間あなたを容認してきました!元のマスター ノードから長時間切断されているものを強制終了します。 . ここではデモが十分ではないので、すべて 新しいslave5が追加されましたが、これでは意味がありません。 Redis Sentinel 原則、私は長い間あなたを容認してきました! 上記 3 点から判断すると、salve4 とslave5 がまだ残っており、優先順位の原則に従ってフィルタリングされます。

  • まずは優先度から判断します 優先度が同じ場合は他の判断をします
  • オフセットを判断しますスレーブ 4 のオフセットが 90、スレーブ 5 のオフセットが 100 だとすると、番兵はスレーブ 4 のネットワークに何か問題があると判断します。次に、slave5 が新しいマスター ノードとして選択されます。スレーブ 4 とスレーブ 5 のオフセットが同じ場合はどうなるでしょうか?最後の判定があります
  • 最後のステップは、職場の年功序列である Runid の判定です。つまり、Runid の作成時刻に基づいて判定されます。 . 時間が早いものが1位となります。

Redis Sentinel 原則、私は長い間あなたを容認してきました!新しいマスター ノードを選択した後、すべてのノードに指示を送信する必要があります。 Redis Sentinel 原則、私は長い間あなたを容認してきました!

4. 概要

Sentinel に関するすべての知識ポイントについては、この記事で説明を終えました。これが Sentinel の仕組みです。その動作原理を簡単に見てみましょう。

  • 最初に監視し、すべてのセンチネルが情報を同期します

  • センチネルはサブスクリプションに情報を公開します

  • フェイルオーバー

    • Sentinel はマスター ノードがオフラインであることを発見しました
    • Sentinel は担当者への投票を開始しました
    • 担当者が新しいノードを選出します マスター ノード
    • 新しいマスター ノードは元のマスター ノードを切断し、他のスレーブ ノードは新しいマスター ノードに接続します。オンラインになった後のスレーブ ノード。

上記はセンチネルについてのカカの理解です。間違いがあったとしても、カカはすぐに修正します。

学習の継続、ブログの継続、共有の継続は、カカがそのキャリア以来常に支持してきた信念です。巨大なインターネット上のカカの記事がそうであることを願っています。助けてください。次号でお会いしましょう。

推奨: "Redis チュートリアル "

以上がRedis Sentinel 原則、私は長い間あなたを容認してきました!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート