ホームページ  >  記事  >  データベース  >  Redis のセントリー モードの原理を分析する方法

Redis のセントリー モードの原理を分析する方法

WBOY
WBOY転載
2023-05-28 19:18:361390ブラウズ

この記事では、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 のパブリッシュ/サブスクライブ メカニズムを通じて、センチネル間で動的な認識が実現されます。

Redis のセントリー モードの原理を分析する方法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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。