1. 概要 Redis Cluster は、Redis ノードのグループ間での高可用性とシャーディングを可能にします。クラスターには 1 つのマスター ノードと複数のスレーブ ノードが存在します。マスター ノードに障害が発生した場合、スレーブ ノードが新しいマスターとして選出される必要があります。ただし、Redis 自体 (そのクライアントの多くを含む) には、障害を自動的に検出してアクティブ/スタンバイの切り替えを実行する機能がないため、自動障害回復を実現するには外部の監視ソリューションが必要です。 Redis Sentinel は公式に推奨されている高可用性ソリューションです。これは、ノード監視、通知、自動障害回復、クライアント構成検出サービスを提供できる Redis クラスターの監視および管理ツールです。 2. 遭遇した問題 1. Dockerホストネットワーク docker がホストネットワークを使用する場合、Windows と Mac では動作しません (解決策が見つかりませんでした)。最終的に、Windows をあきらめて CentOS を使用してクラスターを展開しました。 2. ホストネットワークを使用しないSentinel接続の問題 ホストネットワークを使わずにセンチネルクラスタに接続する場合、マスターノードのポートを指定することで正常に接続できますが、マスターノードに障害が発生すると、センチネルがマスターノードから取得したIPがコンテナ内の仮想IPとなり、クラスタが正常に接続できなくなります。 3. 建設プロセス 1. ディレクトリ構造 2. Sentinel設定ファイル 1. センチネル1.conf #ポート番号 ポート26379 ディレクトリ /tmp # mymaster: カスタム クラスター名、2: 投票数は 2 である必要があります。マスター ノードが失敗するかどうかを判断するためのセンチネル モニター mymaster <ip> <port> 2 # マスターノードが5000秒以上到達不能で応答がない場合は、sentinel down-after-milliseconds mymaster 5000 # フェイルオーバー中に最大 numslave が新しいマスターを同期的に更新していることを示します センチネル並列同期 mymaster 1 # フェイルオーバータイムアウト sentinel フェイルオーバータイムアウト mymaster 5000 2. センチネル2.conf #ポート番号 ポート26380 ディレクトリ /tmp # mymaster: カスタム クラスター名、2: 投票数は 2 である必要があります。マスター ノードが失敗するかどうかを判断するためのセンチネル モニター mymaster <ip> <port> 2 # マスターノードが5000秒以上到達不能で応答がない場合は、sentinel down-after-milliseconds mymaster 5000 # フェイルオーバー中に最大 numslave が新しいマスターを同期的に更新していることを示します センチネル並列同期 mymaster 1 # フェイルオーバータイムアウト sentinel フェイルオーバータイムアウト mymaster 5000 3. センチネル3.conf #ポート番号 ポート26381 ディレクトリ /tmp # mymaster: カスタム クラスター名、2: 投票数は 2 である必要があります。マスター ノードが失敗するかどうかを判断するためのセンチネル モニター mymaster <ip> <port> 2 # マスターノードが5000秒以上到達不能で応答がない場合は、sentinel down-after-milliseconds mymaster 5000 # フェイルオーバー中に最大 numslave が新しいマスターを同期的に更新していることを示します センチネル並列同期 mymaster 1 # フェイルオーバータイムアウト sentinel フェイルオーバータイムアウト mymaster 5000 3. docker-compose.yml バージョン: '2' サービス: マスター: イメージ: redis:4.0 再起動: 常に コンテナ名: redis-master #ホストネットワークを使用する network_mode: "host" コマンド: redis-server --port 16379 スレーブ1: イメージ: redis:4.0 再起動: 常に コンテナ名: redis-slave-1 ネットワークモード: "ホスト" # ポートを指定し、マスター IP ポートを指定します。コマンド: redis-server --port 16380 --slaveof <master ip> 16379 スレーブ2: イメージ: redis:4.0 再起動: 常に コンテナ名: redis-slave-2 ネットワークモード: "ホスト" コマンド: redis-server --port 16381 --slaveof <マスター IP> 16379 センチネル1: イメージ: redis:4.0 再起動: 常に コンテナ名: redis-sentinel-1 ネットワークモード: "ホスト" # センチネルファイルの場所を指定するコマンド: redis-sentinel /usr/local/etc/redis/sentinel.conf # データ ボリュームを使用して、指定されたセンチネル ロケーション ボリュームにファイルをマップします。 - ./sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf センチネル2: イメージ: redis:4.0 再起動: 常に コンテナ名: redis-sentinel-2 ネットワークモード: "ホスト" コマンド: redis-sentinel /usr/local/etc/redis/sentinel.conf ボリューム: - ./sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf センチネル3: イメージ: redis:4.0 再起動: 常に コンテナ名: redis-sentinel-3 ネットワークモード: "ホスト" コマンド: redis-sentinel /usr/local/etc/redis/sentinel.conf ボリューム: - ./sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf 4. CentOSを使用してクラスターテスト結果をデプロイする 1. sentinel1を介してクラスターへの接続をテストする 2. マスターノードとサブノード間のデータ同期をテストする 3. マスターを閉じてマスタースレーブスイッチを確認します Sentinelは正常に接続されています マスターノードは16379から16381に切り替えられます 結論 端午節のあと、1週間怠けていました。以前、センチネル クラスターを構築しました。Docker ネットワーク モデルの問題により、マスター ノードとスレーブ ノードが切り替わった後、クラスターを接続できませんでした。昨日、ホストを Windows で実装できないことがわかったので、テストのために CentOS に配置したところ、完璧に動作しました。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: LayUI+Shiroは動的なメニューを実装し、メニュー拡張の例を記憶します
>>: my.cnf (my.ini) 重要なパラメータの最適化設定手順
この記事を書いた理由は、修正した分散 PyTorch プログラムを Facebook のクラスター上...
親ノードの親ノード、例えば、このような段落がありますHTML:コードをコピーコードは次のとおりです。...
電話Amap API を呼び出す方法は? Amap が https://lbs.amap.com/a...
この記事では、簡単な画像ドラッグ効果を実現するためのjsの具体的なコードを参考までに紹介します。具体...
PHPのメール関数を使用してメールを送信するmail()関数はメールサーバーに接続し、サーバーと対話...
序文これらの原則は実際の戦闘から要約されています。あらゆる原則の背後には血なまぐさい教訓があるこれら...
mysqlはbinlogログを正しくクリーンアップします序文: MySQL の binlog はデー...
目次jupyterをインストールするDocker ポートマッピングjupyterをインストールするp...
ylbtech_html_print HTML 印刷コード、ページめくりをサポートコードをコピーコー...
MySQL では、IF()、IFNULL()、NULLIF()、および ISNULL() 関数を使用...
<br />著者はかつてWebデザインの初心者でしたが、継続的な探求と実践を通じて、今で...
この記事では、MySQL 8.0.20のインストールと設定方法についての詳細なチュートリアルを参考ま...
MySQL解凍版とNavicatデータベース操作ツールのインストールは、以下のとおりです。 1. M...
1. 現在インストールされているPHPパッケージを確認するyum list installed |...
背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...