Redisは、Redis Sentinel分散システムを介して高可用性を提供します。Sentinelは、Redisインスタンスを監視し、障害を検出し、役割の切り替えを自動的に行うことで、Redis展開があらゆる種類の障害に耐えるようにします。
これには、Redisインスタンス(マスターとレプリカ)の監視、スクリプトを介した他のサービス/プロセスやシステム管理者への通知のサポート、マスターがダウンしたときにレプリカをマスターに昇格させる自動フェイルオーバー、クライアントが現在のマスターを見つけるための構成が含まれます。
この記事では、CentOS 8でRedis Sentinelを使用して高可用性を持つRedisを設定する方法、センチネルの構成、セットアップ状況の確認、Sentinelフェイルオーバーのテストを説明します。
前提条件:
テスト環境のセットアップ
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インスタンスが必要です。上記のセットアップを考慮すると、masterが失敗した場合、Sentinels2とSentinel3はその失敗について合意し、フェイルオーバーを承認することができ、クライアント操作を継続できます。
ステップ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

ステップ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. 次に、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

重要:センチネルモニタステートメントは、センチネルサービスを再起動する際にエラー「指定された名前のマスターが存在しません。」を回避するために、センチネル auth-pass ステートメントの前に配置する必要があります。
5. 監視する Redis マスターにパスワードが設定されている場合(私たちの場合、マスターには設定されています)、Sentinel インスタンスが保護されたインスタンスと認証できるようにパスワードを提供してください。
sentinel auth-pass mymaster Securep@55Here

6. 次に、マスター(または関連するレプリカまたはセンチネル)が到達不能と見なされるまでのミリ秒数を設定して、「Subjectively Down」状態として考慮するようにしてください。
次の構成は、私たちが 5 秒以内に私たちの ping からの応答を受信しないと、マスターが障害と見なされることを意味します(1 秒は 1000 ミリ秒に相当します)。
sentinel down-after-milliseconds mymaster 5000

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

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

Redis Replica1およびSentinel2、Reddis 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ステートメントが表示されるはずです。

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


Sentinel構成は、フェイルオーバー中にレプリカがマスターに昇格されるたびと、セットアップ中に新しいSentinelが検出されるたびにも書き換えられ/更新されます。
ステップ3:Redis Sentinelのセットアップ状況を確認します
12. 次に、マスターでSentinelの状態/情報を、次のようにinfo sentinelコマンドを使用して確認します。
# redis-cli -p 26379 info sentinel
次のスクリーンショットで表示されるコマンドの出力から、2つのレプリカ/スレーブと3つのセンチネルがあることがわかります。

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

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

ステップ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であることがわかります。

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