開発環境とテスト環境にそれぞれセンチネルとクラスター モードの Redis を設定するように求められた場合、最速でどのくらいの時間がかかりますか? おそらく 1 日かかるでしょうか? 2時間?実のところ、もっと短くすることもできます。 はい、ご想像のとおり、Docker を使用したデプロイには実際には 12 分しかかかりません。 1. 準備Redisイメージを取得する次のコマンドを実行します。 docker pull redis このコマンドで取得されるイメージは公式イメージです。もちろん、他のイメージを検索することもできます。ここではイメージの状況については詳しく説明しません。 2. Redis Sentinel マスタースレーブモードをデプロイするセントリーモードとは何ですか? --百度をお願いします 1. Docker Compose とは何ですか?Docker Compose は、複数のコンテナを実行する方法と構成を強化するものとして理解できます。 最も単純な例を挙げると、アプリケーション コンテナ用に MySQL コンテナと Redis コンテナを準備する場合、起動のたびに、まず MySQL コンテナと Redis コンテナを起動し、次にアプリケーション コンテナを実行する必要があります。アプリケーション コンテナを作成するときは、アプリケーションが接続してデータを交換できるように、コンテナ ネットワークを MySQL コンテナと Redis コンテナに接続することを忘れないでください。 これだけじゃ十分ではありません。コンテナにさまざまな設定を行った場合は、次回直接使用できるように、コンテナの作成と設定のコマンドを保存しておく方がよいでしょう。 このような状況に対応するために、私たちの開発で最もよく使われるマルチコンテナ定義・実行ソフトウェア、つまり Docker Compose を導入する必要があります。 2. reids master-slave docker-compose.yml を書くバージョン: '3.7' サービス: マスター: 画像: redis コンテナ名: redis-master 再起動: 常に コマンド: redis-server --requirepass redispwd --appendonly yes ポート: -6379:6379 ボリューム: - ./data1:/データ スレーブ1: 画像: redis コンテナ名: redis-slave-1 再起動: 常に コマンド: redis-server --slaveof redis-master 6379 --requirepass redispwd --masterauth redispwd --appendonly yes ポート: -6380:6379 ボリューム: - ./data2:/データ スレーブ2: 画像: redis コンテナ名: redis-slave-2 再起動: 常に コマンド: redis-server --slaveof redis-master 6379 --requirepass redispwd --masterauth redispwd --appendonly yes ポート: -6381:6379 ボリューム: - ./data3:/データ 用語集: 3. マスタースレーブRedisを起動するredis に対応する docker-compose.yml のディレクトリに入り、次のコマンドを実行します。 docker-compose を起動 -d -d はバックグラウンドで実行することを意味します。起動結果を表示するには、docker ps コマンドを使用します。 操作が成功したことを示すスクリーンショットが表示されます 4. Sentinel docker-compose.yml を書くバージョン: '3.7' サービス: センチネル1: 画像: redis コンテナ名: redis-sentinel-1 再起動: 常に ポート: -26379:26379 コマンド: redis-sentinel /usr/local/etc/redis/sentinel.conf ボリューム: - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf センチネル2: 画像: redis コンテナ名: redis-sentinel-2 再起動: 常に ポート: -26380:26379 コマンド: redis-sentinel /usr/local/etc/redis/sentinel.conf ボリューム: - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf センチネル3: 画像: redis コンテナ名: redis-sentinel-3 ポート: -26381:26379 コマンド: redis-sentinel /usr/local/etc/redis/sentinel.conf ボリューム: - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf ネットワーク: デフォルト: 外部の: 名前: redis_default 5. sentinel.confを書く# クラスター名をカスタマイズします。172.19.0.3 は redis-master の IP アドレス、6379 は redis-master のポート番号、2 は最小投票数です (Sentinel が 3 つあるため、2 に設定できます) ポート 26379 ディレクトリ /tmp センチネルモニター mymaster 172.19.0.3 6379 2 センチネル ダウン後 ミリ秒 mymaster 30000 センチネル並列同期 mymaster 1 センチネル認証パス mymaster 再表示 センチネルフェイルオーバータイムアウト mymaster 180000 センチネル拒否スクリプト再構成はい 上記のファイルを3つにコピーし、docker-compose.ymlの設定ファイルに対応するようにsentinel1.conf、sentinel2.conf、sentinel3.confという名前を付け、Sentinelのdocker-compose.ymlと同じディレクトリに配置します。 6. Sentinelを起動するセンチネル docker-compose.yml が配置されているディレクトリに移動し、次のコマンドを実行します。 docker-compose を起動 -d コンテナを確認すると、Sentinel とマスタースレーブ Redis が起動していることがわかります。 6.1 Sentinel 起動ログ 上記のログからわかるように、Sentinelはマスターノードとスレーブノードを監視します。 6.2 マスターノードをシャットダウンする 次のコマンドでRedisマスターノードを停止します。 docker stop redis-master 上記のログから、sdown、odown がわかりますが、これらは何を意味するのでしょうか? 6.3 マスターノードを再起動する 上記のログは、Sentinel が元のマスターが再起動したことを検出し、元のマスター ノードを新しいマスターのスレーブ ノードに変更したことを示しています。 3. Redis クラスターモードをデプロイする1. ディレクトリとファイルを作成する├── docker-compose.yml ├── レディス-6371 │ ├── 会議 │ │ └── redis.conf │ └── データ ├── レディス-6372 │ ├── 会議 │ │ └── redis.conf │ └── データ ├── レディス-6373 │ ├── 会議 │ │ └── redis.conf │ └── データ ├── レディス-6374 │ ├── 会議 │ │ └── redis.conf │ └── データ ├── レディス-6375 │ ├── 会議 │ │ └── redis.conf │ └── データ └── レディス-6376 ├── 会議 │ └── redis.conf └── データ 2. redis.conf 設定ファイルポート 6371 クラスタ対応 はい クラスター構成ファイル nodes-6371.conf クラスターノードタイムアウト 5000 追加のみ はい 保護モードなし 要求パス 1234 マスター認証 1234 cluster-announce-ip 10.12.12.10 # これはホストIPです クラスターアナウンスポート 6371 クラスターアナウンスバスポート 16371 各ノードの構成では、ポートを変更するだけです。 3. Docker-compose 設定ファイルバージョン: "3" # サービスを定義します。複数のサービスを持つことができます。 redis-6371: # サービス名image: redis # コンテナを作成するときに必要なイメージcontainer_name: redis-6371 # コンテナ名restart: always # コンテナは常に再起動しますvolumes: # データボリューム、ディレクトリ mount- ./redis-6371/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./redis-6371/データ:/データ ポート: -6371:6371 -16371:16371 指示: redis-server /usr/local/etc/redis/redis.conf redis-6372: 画像: redis コンテナ名: redis-6372 ボリューム: - ./redis-6372/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./redis-6372/データ:/データ ポート: -6372:6372 - 16372:16372 指示: redis-server /usr/local/etc/redis/redis.conf redis-6373: 画像: redis コンテナ名: redis-6373 ボリューム: - ./redis-6373/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./redis-6373/データ:/データ ポート: -6373:6373 -16373:16373 指示: redis-server /usr/local/etc/redis/redis.conf redis-6374: 画像: redis コンテナ名: redis-6374 再起動: 常に ボリューム: - ./redis-6374/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./redis-6374/データ:/データ ポート: -6374:6374 -16374:16374 指示: redis-server /usr/local/etc/redis/redis.conf redis-6375: 画像: redis コンテナ名: redis-6375 ボリューム: - ./redis-6375/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./redis-6375/データ:/データ ポート: -6375:6375 -16375:16375 指示: redis-server /usr/local/etc/redis/redis.conf redis-6376: 画像: redis コンテナ名: redis-6376 ボリューム: - ./redis-6376/conf/redis.conf:/usr/local/etc/redis/redis.conf - ./redis-6376/データ:/データ ポート: -6376:6376 -16376:16376 指示: redis-server /usr/local/etc/redis/redis.conf 書き込んだら、docker-compose up -d でコンテナを起動します。ここではホストモードは使用しませんが、ホストモードだと外部クライアントが接続できなくなる可能性があるため、NAT モードを使用します。 4. コンテナに入り、クラスターを作成する上記では、6 つの Redis インスタンスのみが起動され、クラスターは構築されません。 # クラスター作成コマンド redis-cli -a 1234 --cluster create 10.35.30.39:6371 10.35.30.39:6372 10.35.30.39:6373 10.35.30.39:6374 10.35.30.39:6375 10.35.30.39:6376 --cluster-replicas 1 # 実行後、次の出力が表示されます: 警告: コマンドライン インターフェイスで '-a' または '-u' オプションを使用してパスワードを使用すると、安全でない可能性があります。 >>> 6 つのノードでハッシュ スロットの割り当てを実行しています... マスター[0] -> スロット0 - 5460 マスター[1] -> スロット5461 - 10922 マスター[2] -> スロット 10923 - 16383 レプリカ 10.35.30.39:6375 を 10.35.30.39:6371 に追加しています レプリカ 10.35.30.39:6376 を 10.35.30.39:6372 に追加しています レプリカ 10.35.30.39:6374 を 10.35.30.39:6373 に追加しています >>> 反アフィニティのスレーブ割り当てを最適化しようとしています [警告] 一部のスレーブはマスターと同じホストにあります ママ: e9a35d6a9d203830556de89f06a3be2e2ab4eee1 10.35.30.39:6371 スロット:[0-5460] (5461スロット) マスター 0c8755144fe6a200a46716371495b04f8ab9d4c8 10.35.30.39:6372 スロット:[5461-10922] (5462スロット) マスター マクロ: fcb83b0097d2a0a87a76c0d782de12147bc86291 10.35.30.39:6373 スロット:[10923-16383] (5461 スロット) マスター s: b9819797e98fcd49f263cec1f77563537709bcb8 10.35.30.39:6374 fcb83b0097d2a0a87a76c0d782de12147bc86291 を複製します s: f4660f264f12786d81bcf0b18bc7287947ec8a1b 10.35.30.39:6375 複製 e9a35d6a9d203830556de89f06a3be2e2ab4eee1 s: d2b9f265ef7dbb4a612275def57a9cc24eb2fd5d 10.35.30.39:6376 0c8755144fe6a200a46716371495b04f8ab9d4c8 を複製します 上記の構成を設定できますか? (承認するには「はい」と入力してください): yes # ここで「はい」と入力して Enter キーを押すと、ノードのマスター/スレーブ ID とハッシュ スロットの割り当てが確認されます >>> ノードの構成が更新されました >>> 各ノードに異なる構成エポックを割り当てる >>> クラスターに参加するためにCLUSTER MEETメッセージを送信する クラスターの参加を待機中 。 >>> クラスター チェックを実行しています (ノード 10.35.30.39:6371 を使用) ママ: e9a35d6a9d203830556de89f06a3be2e2ab4eee1 10.35.30.39:6371 スロット:[0-5460] (5461スロット) マスター 追加のレプリカ 1 個 0c8755144fe6a200a46716371495b04f8ab9d4c8 10.35.30.39:6372 スロット:[5461-10922] (5462スロット) マスター 追加のレプリカ 1 個 s: b9819797e98fcd49f263cec1f77563537709bcb8 10.35.30.39:6374 スロット: (0 スロット) スレーブ fcb83b0097d2a0a87a76c0d782de12147bc86291 を複製します マクロ: fcb83b0097d2a0a87a76c0d782de12147bc86291 10.35.30.39:6373 スロット:[10923-16383] (5461 スロット) マスター 追加のレプリカ 1 個 s: f4660f264f12786d81bcf0b18bc7287947ec8a1b 10.35.30.39:6375 スロット: (0 スロット) スレーブ 複製 e9a35d6a9d203830556de89f06a3be2e2ab4eee1 s: d2b9f265ef7dbb4a612275def57a9cc24eb2fd5d 10.35.30.39:6376 スロット: (0 スロット) スレーブ 0c8755144fe6a200a46716371495b04f8ab9d4c8 を複製します [OK] すべてのノードがスロット構成に同意します。 >>> 空きスロットがあるか確認します... >>> スロットのカバレッジを確認してください... [OK] 16384 スロットすべてがカバーされました。 上記の出力が表示されたら、クラスターの構成は完了です。そして、主人が3人、奴隷が3人います。 要約:上記は、docker compose を介してセンチネル モードとクラスター モードを展開するプロセス全体です。Redis は、ローカル、開発、テストなどの環境に適した docker に展開されます。docker を強力に制御していない限り、実稼働環境では注意して使用してください。 これで、docker を使用して 5 分で Redis クラスター モードとセンチネル モードを構築する方法についての記事は終了です。docker を使用した Redis クラスター モードとセンチネル モードの構築の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
序文通知バー コンポーネントは、比較的一般的なコンポーネントです。基本的に、すべてのサイトにこのよう...
序文この記事では主に、SQL ステートメントの最適化の一般的な手順について説明します。これは、参考と...
フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...
Tomcat自体の最適化Tomcat メモリ最適化起動時に大きなメモリ ブロックが必要であることを ...
MySQL自体は再帰構文をサポートしていませんが、自己接続を通じていくつかの単純な再帰を実現できます...
ELKとは何ですか? ELK は、Elastic が提供するログ収集およびフロントエンド表示ソリュー...
目次1. 一般的な高階関数1.1、フィルター1.2、地図1.3、減らすHigher Order fu...
目次1. インストール: 2. 使用方法: 3. 組み込みメソッド: 4. 使用方法:要約する公式サ...
シナリオ:一般的に使用される親コンポーネントと子コンポーネント間の相互作用方法は次のとおりです。親コ...
<a> タグは主に、ハイパーリンクまたはアンカー リンクとも呼ばれるリンクとブックマーク...
目次コンポーネントの登録コンポーネントの追加ソースコードドラッグ可能なテキスト ボックスでは、ユーザ...
目次アプリを登録するときに何をすればよいですか?ページを登録するときに通常何をする必要がありますか?...
序文Windows では、各インスタンスに適切なパラメータを使用してコマンド ラインから複数の My...
最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...
1. 新しいディスクを準備し、現在のルートパーティションと同じファイルシステムでフォーマットし、ディ...