この記事では、Redis Sentinel モードの原理を深く理解し、Sentinel でできることについて説明し、Sentinel メソッドと Sentinel ワークフローを開始します。
上記では、Redis マスター/スレーブ レプリケーション の原理を紹介しています。これにより、Redis データのバックアップの問題が解決されます。マスター ノードは、後で自動的に選択されません。新しいマスター ノードでは、スレーブ ノードをマスター ノードとして手動で設定する必要がありますが、これは非効率的であり、自動フェイルオーバーを実現できません。Redis は高可用性ソリューション Sentinel を公式に提供しています。
Redis Sentinel は、Redis の公式高可用性ソリューションです。 Redis Sentinel は Redis に高可用性を提供します。実際には、これは、Sentinel を使用すると、特定の種類の障害に耐性があり、人間の介入なしで自動的にフェイルオーバーを実装する Redis クラスターを作成できることを意味します。 [関連する推奨事項: Redis ビデオ チュートリアル ]
1. Redis クラスター ノード (マスター レプリカ) と Sentinel ノードの健全性ステータスを監視します
2. 自動フェイルオーバー: マスターに障害が発生した場合、Sentinel はフェイルオーバーを実装し、 customer 新しいマスターに接続します。
3. 通知: API を通じて、管理者と開発者に通知を送信できます。監視されている Redis インスタンスに障害が発生しました。
4. 構成センター: クライアントは Sentinel に接続されており、Sentinel は次のことを行うことができます。マスターはクライアントにノード情報を返します
1. redis-sentinel /path/to/sentinel.conf
2. redis-server /path/to/sentinel.conf --sentinel
sentinel.conf の設定手順は次のとおりです
# 配置需要监控的master节点信息 2代表法定人数 作用是表示需要最少需要多少个sentinel节点同意 #master节点不可达才标记为客观下线 #举例 5个sentinel实例 quorum设置成2 那么有2个sentinel节点认为master不可达, #则其中一个会启动故障转移#如果至少有三个哨兵可到达,故障转移将被授权并实际启动。 sentinel monitor mymaster 127.0.0.1 6379 2 #只需要配置master sentinel会自动检测slave信息 sentinel down-after-milliseconds mymaster 60000 #如果master在指定时间内没有响应ping命令/或报错,则认为主观下线了。 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1 #指定故障转移的时候,同时支持多少个replica并行的与master同步数据,越小故障转移越久 #以上配置可以通过SENTINEL SET command.来实时修改。 sentinel monitor resque 192.168.1.3 6380 4 sentinel down-after-milliseconds resque 10000 sentinel failover-timeout resque 180000 sentinel parallel-syncs resque 5
注:
Redis -sentinel は設定ファイルの起動を使用する必要があり、再起動は設定ファイルに従って復元する必要があり、ポート 26379 がデフォルトで開かれ、相互アクセスを容易にするために Sentinel 間でポート アクセスが開かれている必要があります。
1. まず、Redis のパブリッシュ/サブスクライブ メカニズムを通じて、センチネル間で動的な認識が実現されます。
#2. センチネルはマスターが死んだことをどのように感知しますか?
ここには 2 つの状況があり、1 つは主観的にマスターがオフラインになった場合、もう 1 つはマスターが客観的にオフラインになった場合です。
主観的オフライン: 各センチネルは 1 秒ごとにマスターに ping コマンドを送信します。マスターがミリ秒以内に応答しない場合、センチネル ノードは主観的にマスターがオフラインであるとみなします。
客観的オフライン:
主観的にオフラインであるノードがマスター ノードの場合、センチネル ノードはコマンド sentinel を渡します。 is-masterdown-by-addr
は、マスター ノード上の他のセンチネル ノードの判断を求めます。クォーラムの数 (センチネル設定で設定されたクォーラム) を超えると、センチネル ノードは実際に問題があると判断します。ほとんどのセンチネル ノードはオフライン操作に同意します。これは、客観的にオフラインであることを意味します。
目標オフラインはマスター ノードにのみ有効であり、フェイルオーバーがトリガーされることに注意してください。
3、マスターはオフラインであり、フェイルオーバーが必要です
これは 2 つに分かれています手順では、まず Sentinel マスター ノードを選択し、Sentinel マスター ノードを介して Redis フェールオーバーを実行する必要があります。
まず、センチネルがリーダーを選出します。 raft アルゴリズム (状態コンセンサス アルゴリズム) を使用します。
各 Sentinel ノードはリーダーになることができ、Redis クラスターのマスター ノードが主観的にオフラインであることを Sentinel ノードが確認すると、他の Sentinel ノードに自身をリーダーとして選出するよう要求します。要求された Sentinel ノードが他の Sentinel ノードの選挙要求に同意していない場合は、その要求に同意します (選挙投票数は 1)。そうでない場合は、同意しません。
Sentinel ノードによって取得された選挙投票数がリーダーの最小投票数 (クォーラムの最大値と Sentinel ノードの数 / 2 1) に達すると、Sentinel ノードがリーダーとして選出されます。リーダー。そうでない場合は、選挙が繰り返されます。
Raft の中心的なアイデア: 早い者勝ち、少数派は多数派に従う。
センチネルがマスター ノードを選択した後、センチネル マスター ノードは Redis クラスター マスター ノードを選択して、新しいクラスター関係を構築する必要があります。
新しい Redis マスター ノードを選択するための基準は次のとおりです:
1. センチネルから切断する時間。レプリカ スレーブ
2 とレプリカ プライオリティをフィルタリングして、設定されたホスト タイムアウト時間 (ミリ秒後のダウン) を超えてメイン監視サーバーから切断されていることが判明しました。レプリカ優先度が低いものを優先します。
3. 優先度が同じ場合、コピー オフセットは処理されています。値が大きいほど優先度が高く、ビジネスシナリオの機能と合致しています。
4. コピー オフセットが同じ場合は、実行中の ID を確認します。小さいものを好みます。
マスター ノードを選択したら、クラスター関係の維持を開始します。
1. センチネル ノード、新しいマスター ノードにスレーブ no one コマンドを送信して、独立したノードにします
2. センチネル ノード、slaveof ip ポートを他のノードに送信し、それに従います。マスターノード
上記の分析により、sentinel は定期的な監視方法により自動フェイルオーバーを実現できましたが、状況などのいくつかの問題がまだ残っています。この状況では、データ損失の可能性があり、単一マシンのパフォーマンスが制限されている場合、水平方向に拡張することができません。
プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !
以上がRedis のセントリー モードの原理の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。