Redis Redis Sentinelを介して高可用性を提供します 分散システム。 センチネル Redisの監視に役立ちます インスタンス、障害の検出、役割の切り替えを自動的に行うため、 Redisが有効になります あらゆる種類の障害に耐えるための展開。
Redisの監視機能を備えています インスタンス(マスターとレプリカ)、スクリプトによる他のサービス/プロセスまたはシステム管理者への通知、マスターがダウンしたときにレプリカをマスターに昇格させる自動フェイルオーバーをサポートし、クライアントが特定のサービスを提供している現在のマスターを検出するための構成を提供します。
この記事では、 Redisを設定する方法を説明します Redis Sentinelによる高可用性 CentOS 8 、センチネルの構成、セットアップステータスの確認、センチネルのテストを含む フェイルオーバー。
前提条件:
- 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
RedisSentinelセットアップ論理図
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
RedisSentinelサービスを開始する
ステップ2:すべてのRedisノードでRedisSentinelを構成する
2。 このセクションでは、 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
Sentinelリッスンインターフェイスとポートを設定する
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
Redisマスターをモニターに設定
<強い色:赤;">重要 :センチネルモニターステートメントは、センチネル 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
並列同期レプリカの数を設定する
RedisReplica1の設定ファイルに注意してください およびSentinel2 、および Reddis Replica1 およびSentinel2 同一である必要があります。
9。 次に、 Sentinelを再起動します 最近の変更を適用するためのすべてのノードのサービス。
# systemctl restart redis-sentinel
10。 次に、ポート 26379を開きます Sentinelを有効にするためにすべてのノードのファイアウォールで インスタンスが話し始め、他のセンチネルから接続を受信します インスタンス、firewall-cmdを使用します。
# firewall-cmd --zone=public --permanent --add-port=26379/tcp # firewall-cmd --reload
11。 すべてのレプリカが自動的に検出されます。重要なのは、センチネル レプリカに関する追加情報で構成を自動的に更新します。これは、センチネルを開くことで確認できます。 各インスタンスの構成ファイルを確認してください。
たとえば、マスターの構成ファイルの最後を見ると、既知のセンチネルが表示されているはずです。 および既知のレプリカ 次のスクリーンショットに示すようなステートメント。
マスターで自動生成された構成
Replica1でも同じようになります およびreplica2 。
Replica1で自動生成された構成
Replica2で自動生成された構成
センチネルに注意してください また、フェイルオーバー中にレプリカがマスターステータスにプロモートされるたび、およびセットアップで新しいSentinelが検出されるたびに、構成が書き換え/更新されます。
ステップ3:RedisSentinelのセットアップステータスを確認する
12。 次に、センチネルを確認します 情報センチネルを使用したマスターのステータス/情報 次のようにコマンドを実行します。
# redis-cli -p 26379 info sentinel
次のスクリーンショットに示されているコマンドの出力から、2つのレプリカ/スレーブと3つのセンチネルがあります。
マスターのセンチネル情報を確認する
13。 マスターに関する詳細情報を表示するには ( mymasterと呼ばれます )、センチネルマスターを使用します コマンド。
# redis-cli -p 26379 sentinel master mymaster
SentinelMasterに関する詳細情報を表示する
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
クエリの出力から、新しいマスターは reply / slave2になります。 IPアドレス10.42.0.34 次のスクリーンショットに見られるように。
RedisSentinelフェイルオーバーのテスト
詳細については、RedisSentinelのドキュメントを参照してください。ただし、共有したり質問したりする場合は、以下のフィードバックフォームが私たちへの入り口です。
このシリーズの次の最後のパートでは、CentOS8でRedisクラスターをセットアップする方法を見ていきます。これは最初の2つから独立した記事になります。
共有は思いやりがあります…Facebookで共有するTwitterで共有するLinkedinで共有するRedditで共有する