CentOS 8 で Sentinel を使用して高可用性を実現するために Redis をセットアップする方法 - パート 2
Redis は、Redis Sentinel 分散システムを通じて高可用性を提供します。 Sentinel は、Redis インスタンスの監視、障害の検出に役立ち、ロールの切り替えを自動的に行うため、Redis のデプロイメントがあらゆる種類の障害に耐えられるようになります。
これは、Redis インスタンス (マスターとレプリカ) の監視、スクリプトを介した他のサービス/プロセスまたはシステム管理者の通知のサポート、マスターがダウンしたときにレプリカをマスターに昇格させる自動フェイルオーバーを備えており、クライアントが特定のサービスを提供する現在のマスターを検出するための構成。
この記事では、センチネルの構成、セットアップ ステータスの確認、およびセンチネル フェイルオーバー。
前提条件:
- CentOS 8 で Redis レプリケーションをセットアップする方法 (クラスターモードが無効) – パート 1
テスト環境のセットアップ
Master Server and Sentinel1: 10.42.0.247
Redis Replica1 and Sentinel2: 10.42.0.21
Redis Replica2 and Sentinel3: 10.42.0.34
Redis Sentinel のドキュメントによると、堅牢な展開には少なくとも 3 つのSentinel インスタンスが必要です。上記の設定を考慮すると、マスターに障害が発生した場合、Sentinels2 と Sentinel3 は障害について同意し、フェイルオーバーを許可できるようになります。クライアントの操作は継続できます。
ステップ 1: Redis Sentinel サービスの開始と有効化
1. CentOS 8 では、Redis Sentinel サービスが Redis サーバーと一緒にインストールされます (これはすでに説明しました)。 Redis レプリケーション セットアップ)。
Redis センチネル サービスを開始し、システム起動時に自動的に開始できるようにするには、次の systemctl コマンドを使用します。また、 そのステータスをチェックして、稼働していることを確認します (これをすべてのノードで実行します)。
systemctl start redis-sentinel
systemctl enable redis-sentinel
systemctl status redis-sentinel
ステップ 2: すべての Redis ノードで Redis Sentinel を構成する
2. このセクションでは、すべてのノードでSentinel を設定する方法について説明します。 Sentinel サービスには、Redis サーバーと同様の構成形式があります。これを構成するには、/etc/redis-sentinel.conf 自己文書化された構成ファイルを使用します。
まず、元のファイルのバックアップを作成し、それを開いて編集します。
cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.orig
vi /etc/redis-sentinel.conf
3. デフォルトでは、Sentinel はポート 26379 をリッスンし、すべてのインスタンスでこれを確認します。 bind パラメータをコメントアウトしたままにする (または 0.0.0.0 に設定する) 必要があることに注意してください。
port 26379
4. 次に、センチネルにマスターを監視し、それを「客観的にダウン」状態とみなすように指示します。少なくとも 2 人の定足数監視員が同意した場合に限ります。 「mymaster 」をカスタム名に置き換えることができます。
#On Master Server and Sentinel1
sentinel monitor mymaster 127.0.0.1 6379 2
#On Replica1 and Sentinel2
sentinel monitor mymaster 10.42.0.247 6379 2
#On Replica1 and Sentinel3
sentinel monitor mymaster 10.42.0.247 6379 2
重要: 「No such master with指定された名前」は、sentinel サービスを再起動するときに表示されます。
5. 監視する Redis マスターにパスワードが設定されている場合 (この例ではマスターに設定されている)、Sentinel インスタンスが保護されたインスタンスで認証できるようにパスワードを指定します。
sentinel auth-pass mymaster Securep@55Here
6. 次に、マスター (または接続されているレプリカやセンチネル) が「主観的にダウン 」状態であるとみなすために、マスター (または接続されているレプリカまたはセンチネル) が到達不能になる時間をミリ秒単位で設定します。
次の構成は、5 秒以内に ping からの応答を受信しないとすぐにマスターが失敗したとみなされることを意味します (1 秒は 1000 ミリ秒に相当します)。
sentinel down-after-milliseconds mymaster 5000
7. 次に、多くのことを定義するフェイルオーバー タイムアウトをミリ秒単位で設定します (構成ファイル内のパラメーターのドキュメントを読んでください)。
sentinel failover-timeout mymaster 180000
8. 次に、フェイルオーバー後に新しいマスターを同時に使用するように再構成できるレプリカの数を設定します。レプリカが 2 つあるため、一方のレプリカを新しいマスターに昇格するように設定します。
sentinel parallel-syncs mymaster 1
Redis Replica1 と Sentinel2、および Reddis Replica1 と Sentinel2 の設定ファイルは同一である必要があることに注意してください。
9. 次に、すべてのノードで Sentinel サービスを再起動して、最近の変更を適用します。
systemctl restart redis-sentinel
10. 次に、すべてのノードのファイアウォールでポート 26379 を開いて、Sentinel インスタンスが通信を開始し、他のインスタンスからの接続を受信できるようにします。 > Sentinel インスタンス、firewall-cmd を使用します。
firewall-cmd --zone=public --permanent --add-port=26379/tcp
firewall-cmd --reload
11. すべてのレプリカが自動的に検出されます。重要なのは、Sentinel がレプリカに関する追加情報を使用して構成を自動的に更新することです。これを確認するには、各インスタンスのSentinel 設定ファイルを開いて内容を確認します。
たとえば、マスターの構成ファイルの最後を見ると、次のスクリーンショットに示すように既知のセンチネルと既知のレプリカステートメントが表示されます。
レプリカ 1 と レプリカ 2 でも同じ状況になるはずです。
Sentinel 構成も、フェイルオーバー中にレプリカがマスター ステータスに昇格するたび、およびセットアップで新しい Sentinel が検出されるたびに書き換え/更新されることに注意してください。
ステップ 3: Redis Sentinel セットアップ ステータスを確認する
12. 次に、次のように info Sentinel コマンドを使用して、マスターの Sentinel ステータス/情報を確認します。
redis-cli -p 26379 info sentinel
次のスクリーンショットに示すコマンドの出力から、2 つのレプリカ/スレーブと 3 つのセンチネルが存在します。
13. マスター (mymaster と呼ばれます) に関する詳細情報を表示するには、sentinel master コマンドを使用します。
redis-cli -p 26379 sentinel master mymaster
14. スレーブとセンチネルに関する詳細情報を表示するには、センチネル スレーブ コマンドとセンチネルを使用します。センチネルはそれぞれコマンドを実行します。
redis-cli -p 26379 sentinel slaves mymaster
redis-cli -p 26379 sentinel sentinels mymaster
15. 次に、次のように sentinel get-master-addr-by-name コマンドを使用して、スレーブ インスタンスからマスターのアドレスを名前で問い合わせます。
出力は、現在のマスター インスタンスの IP アドレスとポートになるはずです。
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
ステップ 4: Sentinel フェイルオーバーをテストする
16. 最後に、Sentinel セットアップで自動フェイルオーバーをテストしてみましょう。 Redis/Sentinel マスターで、Redis マスター (ポート 6379 で実行中) を 60 秒間スリープさせます。 。次に、次のようにレプリカ/スレーブ上の現在のマスターのアドレスをクエリします。
redis-cli -p 6379
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> debug sleep 60
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
次のスクリーンショットに示すように、クエリの出力から、新しいマスターは IP アドレス 10.42.0.34 の replica/slave2 になりました。
詳細については、Redis Sentinel のドキュメントから入手できます。ただし、共有したい考えや質問がある場合は、以下のフィードバック フォームをご利用ください。
このシリーズの次回と最後のパートでは、CentOS 8 で Redis クラスターをセットアップする方法を見ていきます。これは、最初の 2 つの記事から独立した記事になります。