この記事では、Redis Sentinel モードの原理を深く理解し、Sentinel でできることについて説明し、Sentinel メソッドと Sentinel ワークフローを開始します。
1. Redis センチネルとは何ですか?
Redis Sentinel は、高可用性を実現するために Redis が提供する公式ソリューションです。 Redis Sentinel は Redis に高可用性を提供します。実際には、これは、Sentinel を使用すると、特定の種類の障害に耐性があり、人間の介入なしで自動的にフェイルオーバーを実装する Redis クラスターを作成できることを意味します。 [関連する推奨事項: Redis ビデオ チュートリアル]
2. Sentinel でできることは何ですか?
1. Redis クラスター ノード (マスター レプリカ) と Sentinel ノードの健全性ステータスを監視します
2. 自動フェイルオーバー: マスターに障害が発生した場合、Sentinel はフェイルオーバーを実装し、 customer 新しいマスターに接続します。
3. 通知: API を通じて、管理者と開発者に通知を送信できます。監視されている Redis インスタンスに障害が発生しました。
4. 構成センター: クライアントは Sentinel に接続されており、Sentinel は次のことを行うことができます。マスターはクライアントにノード情報を返します
3. 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 間でポート アクセスが開かれている必要があります。
4. Sentinel ワークフロー
1. まず、Redis のパブリッシュ/サブスクライブ メカニズムを通じて、センチネル間で動的な認識が実現されます。
客観的オフライン:
主観的にオフラインであるノードがマスター ノードの場合、センチネル ノードはコマンドを渡します
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 ポートを他のノードに送信し、それに従います。マスターノード
5. 概要
上記の分析により、sentinel は定期的な監視方法により自動フェイルオーバーを実現できましたが、状況などのいくつかの問題がまだ残っています。この状況では、データ損失の可能性があり、単一マシンのパフォーマンスが制限されている場合、水平方向に拡張することができません。
以上がRedis のセントリー モードの原理を分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。