CentOS8のSentinelで高可用性のためにRedisをセットアップする方法-パート2-


Redisは、RedisSentinel分散システムを介して高可用性を提供します。 Sentinelは、Redisインスタンスの監視、障害の検出を支援し、役割の切り替えを自動的に行うため、Redisデプロイメントがあらゆる種類の障害に抵抗できるようにします。

これは、Redisインスタンス(マスターとレプリカ)の監視、スクリプトを介した他のサービス/プロセスまたはシステム管理者への通知、マスターがダウンしたときにレプリカをマスターに昇格させる自動フェイルオーバーをサポートし、クライアントが現在を検出するための構成を提供します特定のサービスを提供するマスター。

この記事では、CentOS8でRedisSentinelを使用して高可用性を実現するためにRedisをセットアップする方法について説明します。これには、センチネルの構成、セットアップステータスの確認、Sentinelフェイルオーバーのテストが含まれます。

  1. How To Setup Redis Replication (with Cluster-Mode Disabled) in CentOS 8 – Part 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:RedisSentinelサービスの開始と有効化

1. CentOS 8では、Redis SentinelサービスがRedisサーバーと一緒にインストールされます(これは、Redisレプリケーションセットアップで既に実行しました)。

Redisセンチネルサービスを開始し、システムの起動時に自動的に開始できるようにするには、次のsystemctlコマンドを使用します。また、ステータスを確認して、稼働していることを確認します(すべてのノードでこれを実行します)。

# systemctl start redis-sentinel
# systemctl enable redis-sentinel
# systemctl status redis-sentinel

ステップ2:すべてのRedisノードでRedisSentinelを構成する

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でリッスンし、すべてのインスタンスでこれを確認します。バインドパラメータをコメントアウトしたままにする(または0.0.0.0に設定する)必要があることに注意してください。

port 26379

4.次に、Sentinelにマスターを監視し、少なくとも2つのクォーラムセンチネルが同意した場合にのみ「ObjectivelyDown」状態であると見なすように指示します。 「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

重要:「指定された名前のそのようなマスターはありません」というエラーを回避するために、センチネルモニターステートメントはセンチネルauth-passステートメントの前に配置する必要があります。センチネルサービスを再起動するとき。

5.監視するRedisマスターにパスワードが設定されている場合(この場合はマスターに設定されています)、Sentinelインスタンスが保護されたインスタンスで認証できるようにパスワードを入力します。

 
sentinel auth-pass mymaster [email protected]

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、およびReddisReplica1とSentinel2の構成ファイルは同一である必要があることに注意してください。

9.次に、すべてのノードでSentinelサービスを再起動して、最近の変更を適用します。

# systemctl restart redis-sentinel

10.次に、すべてのノードのファイアウォールでポート26379を開いて、Sentinelインスタンスが会話を開始し、firewall-cmdを使用して他のSentinelインスタンスから接続を受信できるようにします。

# firewall-cmd --zone=public --permanent --add-port=26379/tcp
# firewall-cmd --reload

11.すべてのレプリカが自動的に検出されます。重要なのは、Sentinelがレプリカに関する追加情報で構成を自動的に更新することです。これは、各インスタンスのSentinel構成ファイルを開いて確認することで確認できます。

たとえば、マスターの構成ファイルの最後を見ると、次のスクリーンショットに示すように、既知のセンチネルと既知のレプリカのステートメントが表示されます。

これは、replica1とreplica2でも同じである必要があります。

Sentinel構成は、フェイルオーバー中にレプリカがマスターステータスにプロモートされるたび、およびセットアップで新しいSentinelが検出されるたびに、書き換え/更新されることに注意してください。

ステップ3:RedisSentinelのセットアップステータスを確認する

12.次に、次のようにinfo sentinelコマンドを使用して、マスターのSentinelステータス/情報を確認します。

# redis-cli -p 26379 info sentinel

次のスクリーンショットに示されているコマンドの出力から、2つのレプリカ/スレーブと3つのセンチネルがあります。

13.マスター(mymasterと呼ばれる)に関する詳細情報を表示するには、sentinelmasterコマンドを使用します。

# 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 [email protected]
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のレプリカ/スレーブ2になります。

詳細については、RedisSentinelのドキュメントを参照してください。ただし、共有したり質問したりする場合は、以下のフィードバックフォームが私たちへの入り口です。

このシリーズの次の最後のパートでは、CentOS8でRedisクラスターをセットアップする方法を見ていきます。これは最初の2つから独立した記事になります。