CentOS 8でSentinelを使用して高可用性のRedisをセットアップする方法 – パート2

Redisは、Redis Sentinel分散システムを介して高可用性を提供します。Sentinelは、Redisインスタンスを監視し、障害を検出し、役割の切り替えを自動的に行うことで、Redis展開があらゆる種類の障害に耐えるようにします。

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

この記事では、CentOS 8Redis Sentinelを使用して高可用性を持つRedisを設定する方法、センチネルの構成、セットアップ状況の確認、Sentinelフェイルオーバーのテストを説明します。

前提条件:

  1. 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 Setup Logical Diagram

Redis Sentinelのドキュメントによると、頑丈な展開には少なくとも3つのSentinelインスタンスが必要です。上記のセットアップを考慮すると、masterが失敗した場合、Sentinels2Sentinel3はその失敗について合意し、フェイルオーバーを承認することができ、クライアント操作を継続できます。

ステップ1:Redis Sentinelサービスの起動と有効化

1. CentOS 8では、Redis SentinelサービスはRedisサーバーと一緒にインストールされます(すでにRedis Replication Setupで行いました)。

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

# systemctl start redis-sentinel
# systemctl enable redis-sentinel
# systemctl status redis-sentinel
Start Redis Sentinel Service

ステップ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
Set Sentinel Listen Interface and Port

4. 次に、Sentinel に私たちの master を監視し、少なくとも 2 つのクォーラムセンチネルが同意した場合にのみそれを「Objectively Down」状態として考慮するように指示してください。カスタム名で「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
Set Redis Master to Monitor

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

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

 
sentinel auth-pass mymaster Securep@55Here
Set Master Auth Password

6. 次に、マスター(または関連するレプリカまたはセンチネル)が到達不能と見なされるまでのミリ秒数を設定して、「Subjectively Down」状態として考慮するようにしてください。

次の構成は、私たちが 5 秒以内に私たちの ping からの応答を受信しないと、マスターが障害と見なされることを意味します(1 秒は 1000 ミリ秒に相当します)。

sentinel down-after-milliseconds mymaster 5000
Set Down Time for Master

7. 次に、フェイルオーバータイムアウトをミリ秒単位で設定し、多くのことを定義します(構成ファイルのパラメータのドキュメントを読んでください)。

sentinel failover-timeout mymaster 180000
Set Fail Over Timeout

8.その後、フェイルオーバー後に新しいマスターを使用するように再構成できるレプリカの数を設定します。2つのレプリカがあるため、1つのレプリカを設定し、もう1つは新しいマスターに昇格します。

sentinel parallel-syncs mymaster 1
Set Number of Parallel Sync Replicas

Redis Replica1およびSentinel2Reddis Replica1およびSentinel2の構成ファイルが同一であることに注意してください。

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

# systemctl restart redis-sentinel

10.次に、26379ポートをすべてのノードのファイアウォールで開き、Sentinelインスタンスが通信を開始し、他のSentinelインスタンスから接続を受け入れるようにします。

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

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

たとえば、マスターの構成ファイルの末尾を見ると、次のスクリーンショットに示すようにknown-sentinelsおよびknown-replicaステートメントが表示されるはずです。

Auto Generated Config in Master

replica1およびreplica2でも同様のケースであるべきです。

Auto Generated Config in Replica1
Auto Generated Config in Replica2

Sentinel構成は、フェイルオーバー中にレプリカがマスターに昇格されるたびと、セットアップ中に新しいSentinelが検出されるたびにも書き換えられ/更新されます。

ステップ3:Redis Sentinelのセットアップ状況を確認します

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

# redis-cli -p 26379 info sentinel

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

Check Sentinel Info on Master

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

# redis-cli -p 26379 sentinel master mymaster
Show Detailed Info About Sentinel Master

14. レプリカおよびスレーブセンチネルに関する詳細情報を表示するには、それぞれsentinel slavesコマンドとsentinel sentinelsコマンドを使用します。

# 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
Get the Address of Master by Name on Slaves

ステップ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

クエリの出力から、新しいマスターは現在replica/slave2で、IPアドレスは10.42.0.34であることがわかります。

Test Redis Sentinel Failover

次のシリーズの最後の部分では、CentOS 8でRedis Clusterを設定する方法について見ていきます。これは最初の2つとは独立した記事になります。詳細はRedis Sentinel documentationからご確認いただけます。何かシェアしたいことや質問がある場合は、以下のフィードバックフォームからお知らせください。

Source:
https://www.tecmint.com/setup-redis-high-availability-with-sentinel-in-centos-8/