1. はじめに:現在のインターネット技術アーキテクチャでは、MQ、Redis、Zookeeper など、さまざまなミドルウェアが次々と登場しています。これらのミドルウェアは、一般的にマスタースレーブアーキテクチャまたはクラスターアーキテクチャで導入されています。企業では、開発環境、テスト環境、本番環境にそれぞれ 1 セットずつ導入するのが一般的です。 開発を行う場合、通常は開発環境に接続します。しかし、一般企業の開発環境はイントラネット上でしか利用できず、帰宅すると会社がVPNを提供してくれないと利用できません。時々VPNがありますが、それでも開発には不便です。例えば、現在使用している MQ ミドルウェアは Pulsar を使用していますが、Pulsar のテナントと名前空間は自動的に作成できないため、日常的な開発には非常に不便で、必要なときにその都度 DBA を探すしかありません。 したがって、通常は一連のサーバーをローカルに展開しますが、自分で展開するには 2 つの困難があります。 ミドルウェアには、RabbitMQ などの独自の実装言語があります。RabbitMQ をデプロイするときは、まず Erlang 言語をインストールする必要があります。クラスター アーキテクチャを導入すると、大量のシステム リソースが消費され、すでにリソースが制限されているラップトップの動作がさらに遅くなり、開発が非常に困難になります。 2. ドッカー:Docker は上記の問題を完全に解決し、デプロイメントを非常に簡単にします。以下は私が実際に使用しているミドルウェアの例です。 A. パルサー: 前述のとおり、Pulsar テナントと名前空間は自動的に作成することはできません。これらを使用したい場合は、作成を手伝ってくれる担当の同僚を見つけるしかありません。最近取り組んだ機能であるブロードキャスト センターとメンバー エクスポートはどちらも Pulsar を使用していますが、同僚に迷惑をかけたくなかったし、自宅で作業することが多いため、公式 Web サイトに直接アクセスして、ローカルに展開する方法を調べました。 公式サイトでは、圧縮パッケージ、Docker、Kubernetes を使用したさまざまなデプロイメント方法が紹介されています。もちろん、Docker デプロイ方法があり、Docker デプロイ方法を使用する必要があります。とにかく、イメージをプルしてコンテナを起動するだけでよいので、非常に便利です。 次のコマンド: docker run -it -d -p 6650:6650 -p 8080:8080 -v data -v conf --name=mypulsar apachepulsar/pulsar:2.6.1 bin/pulsar スタンドアロン コマンドは非常に簡単です。pulsar のポート番号 6650 と 8080 を開き、それらをホスト マシンの対応するポート番号にバインドして、ホスト マシンの ip:port に直接アクセスしてコンテナーにアクセスできるようにします。次に、データが失われないように、Pulsar のデータと conf をホストにマウントします。次に、pulsar standalone コマンドを使用して、Pulsar のスタンドアロン バージョンを起動します。 次に、テナントまたは名前空間を作成する必要がある場合は、コンテナーに直接入力して作成できます。 docker exec -it mypulsar /bin/bash テナントおよび名前空間を追加、削除、変更、確認するためのコマンドについて: ## 1 テナント# どのテナントが存在するかを確認します (public はシステムのデフォルトのテナントです) pulsar-admin テナントリスト ##テナントの作成 pulsar-admin tenants create my-tenant #テナントの削除 pulsar-admin tenants delete my-tenant ## 2 名前空間#指定されたテナントの下の名前空間を表示する pulsar-admin namespaces list my-tenant #指定されたテナント名前空間を作成する pulsar-admin namespaces create my-tenant/my-namespace #指定されたテナント名前空間を削除します pulsar-admin namespaces delete my-tenant/my-namespace B. レディス: Redis 一般的に、私たちが制作するアーキテクチャは Cluster を使用しますが、Redis のクラスタを自分でデプロイする場合は、かなり面倒です。以前、Linux に Redis Cluster をデプロイする という記事を書きました。 Docker を使用すると非常に簡単になります。 1 カスタムネットワーク1.1 Redis専用のネットワークを作成する Redis クラスター内の各ノードは専用のネットワークを共有するため、ノードは相互にアクセスでき、各ノード間のネットワーク通信に --link を使用する必要がなくなります。 docker network create コマンドによって作成されたネットワークは、デフォルトでブリッジ モードになります。 winfun@localhost ~ % docker network create redis-net --subnet 172.26.0.0/16 5001355940f43474d59f5cb2d78e4e9eeb0a9827e53d8f9e5b55e7d3c5285a09 winfun@localhost ~ % docker ネットワークリスト ネットワーク ID 名前 ドライバー スコープ 4d88d473e947 ブリッジ ブリッジ ローカル 79a915fafbb5 ホスト ホスト ローカル f56e362d3c68 なし null ローカル 5001355940f4 redis-net ブリッジ ローカル winfun@localhost ~ % 1.2 カスタムネットワークの詳細を表示する コマンド docker network inspect redis-net を使用してカスタム ネットワークの詳細を表示すると、現在ネットワーク内にコンテナがないことがわかります。 winfun@localhost mydata % docker ネットワーク検査 redis-net [ { 「名前」: 「redis-net」、 「ID」: 「aed8340bbf8ab86cedc1d990eb7612854ba2b0bd4eae0f978ff95eadc3dbcf65」、 「作成日」: 「2020-10-22T08:46:55.695434Z」、 「スコープ」:「ローカル」、 「ドライバー」:「ブリッジ」、 「IPv6を有効にする」:false、 「IPAM」: { "ドライバー": "デフォルト", 「オプション」: {}, 「設定」: [ { 「サブネット」: 「172.26.0.0/16」 } ] }, 「内部」:偽、 「接続可能」: false、 「イングレス」:偽、 "設定元": { 「ネットワーク」: 「」 }, "ConfigOnly": false、 「コンテナ」: {}, 「オプション」: {}, 「ラベル」: {} } ] 2 展開を開始する2.1 6つのRedisノード構成を作成する $(seq 1 6) のポートの場合; \ する \ mkdir -p /Users/winfun/mydata/redis/node-${port}/conf /Users/winfun/mydata/redis/node-${port}/conf/redis.conf をタッチします。 cat << EOF >/Users/winfun/mydata/redis/node-${port}/conf/redis.conf ポート 6379 0.0.0.0 をバインド クラスタ対応 はい クラスター構成ファイル nodes.conf クラスターノードタイムアウト 5000 クラスターアナウンスIP 172.26.0.1${ポート} クラスターアナウンスポート 6379 クラスターアナウンスバスポート 16379 追加のみ はい 終了 終わり 2.2 コンテナを起動する $(seq 1 6) のポートの場合; \ する \ docker run -p 637${ポート}:6379 -p 1637${ポート}:16379 --name redis-${ポート} \ -v /Users/winfun/mydata/redis/node-${port}/data:/data \ -v /Users/winfun/mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis-net --ip 172.26.0.1${ポート} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 終わり 2.3 正常に起動した6つのコンテナを表示する winfun@localhost mydata % docker ps | grep redis ed5972e988e8 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 11 秒前 10 秒前にアップ 0.0.0.0:6376->6379/tcp、0.0.0.0:16376->16379/tcp redis-6 61cd467bc803 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 12 秒前 11 秒前にアップ 0.0.0.0:6375->6379/tcp、0.0.0.0:16375->16379/tcp redis-5 113943ba6586 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 12 秒前 11 秒前にアップ 0.0.0.0:6374->6379/tcp、0.0.0.0:16374->16379/tcp redis-4 5fc3c838851c redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 13 秒前 12 秒前にアップ 0.0.0.0:6373->6379/tcp、0.0.0.0:16373->16379/tcp redis-3 f7d4430f752b redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 13 秒前 12 秒前にアップ 0.0.0.0:6372->6379/tcp、0.0.0.0:16372->16379/tcp redis-2 bd3e4a593427 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 14 秒前 13 秒前にアップ 0.0.0.0:6371->6379/tcp、0.0.0.0:16371->16379/tcp redis-1 3 ネットワークを再度確認する3.1 ネットワーク内のコンテナを表示する 上記のコンテナを起動したときに、redis-net ネットワークの使用を指定したので、まず redis-net ネットワークの情報を確認します。 winfun@localhost mydata % docker ネットワーク検査 redis-net [ { 「名前」: 「redis-net」、 「ID」: 「aed8340bbf8ab86cedc1d990eb7612854ba2b0bd4eae0f978ff95eadc3dbcf65」、 「作成日」: 「2020-10-22T08:46:55.695434Z」、 「スコープ」:「ローカル」、 「ドライバー」:「ブリッジ」、 「IPv6を有効にする」:false、 「IPAM」: { "ドライバー": "デフォルト", 「オプション」: {}, 「設定」: [ { 「サブネット」: 「172.26.0.0/16」 } ] }, 「内部」:偽、 「接続可能」: false、 「イングレス」:偽、 "設定元": { 「ネットワーク」: 「」 }, "ConfigOnly": false、 「コンテナ」: { "113943ba6586a4ac21d1c068b0535d5b4ef37da50141d648d30dab47eb47d3af": { 「名前」: 「redis-4」、 "エンドポイントID": "3fe3b4655f39f90ee4daf384254d3f7548cddd19c384e0a26edb6a32545e5b30", "Macアドレス": "02:42:ac:1a:00:0e", "IPv4アドレス": "172.26.0.14/16", "IPv6アドレス": "" }, "5fc3c838851c0ca2f629457bc3551135567b4e9fb155943711e07a91ebe9827f": { 「名前」: 「redis-3」、 "エンドポイントID": "edd826ca267714bea6bfddd8c5d6a5f3c71c50bd50381751ec40e9f8e8160dce", "Macアドレス": "02:42:ac:1a:00:0d", "IPv4アドレス": "172.26.0.13/16", "IPv6アドレス": "" }, "61cd467bc8030c4db9a4404b718c5c927869bed71609bec91e17ff0da705ae26": { 「名前」: 「redis-5」、 "エンドポイントID": "7612c44ab2479ab62341eba2e30ab26f4c523ccbe1aa357fc8b7c17a368dba61", "Macアドレス": "02:42:ac:1a:00:0f", "IPv4アドレス": "172.26.0.15/16", "IPv6アドレス": "" }, "bd3e4a593427aab4750358330014422500755552c8b470f0fd7c1e88221db984": { 「名前」: 「redis-1」、 "エンドポイントID": "400153b712859c5c17d99708586f30013bb28236ba0dead516cf3d01ea071909", "Macアドレス": "02:42:ac:1a:00:0b", "IPv4アドレス": "172.26.0.11/16", "IPv6アドレス": "" }, "ed5972e988e8301179249f6f9e82c8f9bb4ed801213fe49af9d3f31cbbe00db7": { 「名前」: 「redis-6」、 "エンドポイントID": "b525b7bbdd0b0150f66b87d55e0a8f1208e113e7d1d421d1a0cca73dbb0c1e47", "Macアドレス": "02:42:ac:1a:00:10", "IPv4アドレス": "172.26.0.16/16", "IPv6アドレス": "" }, "f7d4430f752b5485c5a90f0dc6d1d9a826d782284b1badbd203c12353191bc57": { 「名前」: 「redis-2」、 "エンドポイントID": "cbdc77cecda1c8d80f566bcc3113f37c1a7983190dbd7ac2e9a56f6b7e4fb21f", "Macアドレス": "02:42:ac:1a:00:0c", "IPv4アドレス": "172.26.0.12/16", "IPv6アドレス": "" } }, 「オプション」: {}, 「ラベル」: {} } ] 3.2 コンテナが相互に通信できるかどうかを確認する また、redis-1 を使用して redis-2 で ping コマンドを実行し、ネットワークが相互に通信できるかどうかを確認することもできます。 winfun@localhost mydata % docker exec -it redis-1 ping redis-2 PING redis-2 (172.26.0.12): 56 データバイト 172.26.0.12 からの 64 バイト: seq=0 ttl=64 time=0.136 ms 172.26.0.12 からの 64 バイト: seq=1 ttl=64 time=0.190 ms 172.26.0.12 からの 64 バイト: seq=2 ttl=64 time=0.483 ms ^C --- redis-2 ping 統計 --- 3 パケット送信、3 パケット受信、パケット損失 0% 往復の最小/平均/最大 = 0.136/0.269/0.483 ミリ秒 4 クラスターを作成する4.1 redis-cli コマンドを使用してクラスターを作成します。 winfun@localhost conf % docker exec -it redis-1 /bin/bash OCI ランタイム exec に失敗しました: exec に失敗しました: container_linux.go:349: コンテナ プロセスの開始により "exec: \"/bin/bash\" が発生しました: stat /bin/bash: そのようなファイルまたはディレクトリはありません: 不明 # sh のみ使用できます。redis イメージには bash がありません winfun@localhost mydata % docker exec -it redis-1 /bin/sh /データ # cd /usr/local/bin/ /usr/local/bin # redis-cli --cluster 作成 172.26.0.11:6379 172.26.0.12:6379 17 2.26.0.13:6379 172.26.0.14:6379 172.26.0.15:6379 172.26.0.16:6379 --cluster-repl イカス1 >>> 6 つのノードでハッシュ スロットの割り当てを実行しています... マスター[0] -> スロット0 - 5460 マスター[1] -> スロット5461 - 10922 マスター[2] -> スロット 10923 - 16383 レプリカ 172.26.0.15:6379 を 172.26.0.11:6379 に追加しています レプリカ 172.26.0.16:6379 を 172.26.0.12:6379 に追加しています レプリカ 172.26.0.14:6379 を 172.26.0.13:6379 に追加しています 6de9e9eef91dbae773d8ee1d629c87e1e7e19b82 172.26.0.11:6379 スロット:[0-5460] (5461スロット) マスター 43e173849bed74f5bd389f9b272ecf0399ae448f 172.26.0.12:6379 スロット:[5461-10922] (5462スロット) マスター 1e504dc62b7ccc426d513983ca061d1657532fb6 172.26.0.13:6379 スロット:[10923-16383] (5461 スロット) マスター 92b95f18226903349fb860262d2fe6932d5a8dc2 172.26.0.14:6379 1e504dc62b7ccc426d513983ca061d1657532fb6 を複製します 7e5116ba9ee7bb70a68f4277efcbbbb3dcfd18af 172.26.0.15:6379 6de9e9eef91dbae773d8ee1d629c87e1e7e19b82 を複製します 203e3e33b9f4233b58028289d0ad2dd56e7dfe45 172.26.0.16:6379 43e173849bed74f5bd389f9b272ecf0399ae448f を複製する 上記の設定を行えますか? (同意する場合は「はい」と入力してください): はい >>> ノード構成が更新されました >>> 各ノードに異なる構成エポックを割り当てる >>> クラスターに参加するためにCLUSTER MEETメッセージを送信する クラスターの参加を待機中 ... >>> クラスター チェックを実行しています (ノード 172.26.0.11:6379 を使用) 6de9e9eef91dbae773d8ee1d629c87e1e7e19b82 172.26.0.11:6379 スロット:[0-5460] (5461スロット) マスター 追加のレプリカ 1 個 92b95f18226903349fb860262d2fe6932d5a8dc2 172.26.0.14:6379 スロット: (0 スロット) スレーブ 1e504dc62b7ccc426d513983ca061d1657532fb6 を複製します 203e3e33b9f4233b58028289d0ad2dd56e7dfe45 172.26.0.16:6379 スロット: (0 スロット) スレーブ 43e173849bed74f5bd389f9b272ecf0399ae448f を複製する 1e504dc62b7ccc426d513983ca061d1657532fb6 172.26.0.13:6379 スロット:[10923-16383] (5461 スロット) マスター 追加のレプリカ 1 個 7e5116ba9ee7bb70a68f4277efcbbbb3dcfd18af 172.26.0.15:6379 スロット: (0 スロット) スレーブ 6de9e9eef91dbae773d8ee1d629c87e1e7e19b82 を複製します 43e173849bed74f5bd389f9b272ecf0399ae448f 172.26.0.12:6379 スロット:[5461-10922] (5462スロット) マスター 追加のレプリカ 1 個 [OK] すべてのノードがスロット構成に同意します。 >>> 空きスロットがあるか確認します... >>> スロットのカバレッジを確認してください... [OK] 16384 スロットすべてがカバーされました。 4.2 redis-cli を使用して現在のノードに接続し、クラスター情報を表示します。 /usr/local/bin # redis-cli -c 127.0.0.1:6379> クラスター情報 クラスター状態:正常 割り当てられたクラスタースロット:16384 クラスタースロットOK:16384 クラスタースロットp失敗:0 クラスタースロット失敗:0 クラスターの既知のノード:6 クラスターサイズ:3 クラスター現在のエポック:6 クラスター_マイ_エポック:1 クラスター統計メッセージping送信:91 クラスター統計メッセージ送信:95 クラスター統計送信メッセージ:186 クラスター統計メッセージping受信:90 クラスター統計メッセージ受信数:91 クラスター統計メッセージ会議受信数:5 クラスター統計受信メッセージ:186 4.3 キーを追加してみる # キーを設定し、このキーがノード redis-3 [192.168.0.13] に対応するスロット [12539] に割り当てられていることを示すプロンプトを返します。 127.0.0.1:6379> キーを設定 hello -> 172.26.0.13:6379 にあるスロット [12539] にリダイレクトされました わかりました # そして redis-cli はノード redis-3[172.26.0.13] に切り替わります 172.26.0.13:6379> 5 テスト この時点で、Docker を使用して Redis クラスターをローカルに正常にデプロイできたと言えます。 /** * Redis クラスターのテスト * @author winfun * @日付 2020/10/21 午後 5:48**/ パブリッククラス TestCluster { パブリック静的void main(String[] args)は例外をスローします{ Set<HostAndPort> ノード = new HashSet<>(3); ノードを追加します(新しいホストとポート("127.0.0.1",6371)); ノードを追加します(新しいホストとポート("127.0.0.1",6372)); ノードを追加します(新しいホストとポート("127.0.0.1",6373)); JedisCluster クラスター = 新しい JedisCluster(ノード); 文字列値 = cluster.get("key"); System.out.println("get: キーはキー、値は "+値); 文字列結果 = cluster.set("key2","hello world"); System.out.println("set: キーは key2、結果は "+result); クラスターを閉じます。 } } しかし、結果は満足のいくものではなく、例外が返されます。 このことから、Docker にデプロイした Redis クラスターに接続するのはおそらく不可能であると推測できます。 ローカル IP とマップされたポートを使用して JedisCluster を構成した場合でも、同じことがわかります。 しかし、予想外に、JedisCluster 自体がクラスター メタデータを再度取得します。このとき、ノードの IP アドレスはすべてカスタム ネットワーク redis-net によって割り当てられたサブネットであり、ホスト マシンにアクセスできない可能性があります (この問題については、ホスト タイプのカスタム ネットワークの使用を検討できます)。 6 アプリケーションはカスタムネットワークにも展開されます それでどうやってテストするのでしょうか? 簡単な SpringBoot プロジェクトを作成し、Dockerfile を使用してプロジェクトによって生成された jar パッケージに基づいてイメージを構築し、Docker を使用してそれをデプロイし、デプロイされたコンテナーをカスタム ネットワーク redis-net に追加して、最後にテストします。 6.1 SpringBootプロジェクトを作成する 構成は次のとおりです。 6.1.1 pom.xml: 主にWebとRedisのスターターを紹介しました。 <依存関係> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </依存関係> <依存関係> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </依存関係> 6.1.2 プロジェクト application.properties: サーバーポート=8080 # アプリケーションは Redis クラスターと同じネットワークにデプロイされるため、ここでコンテナ名を直接記述することもできます。 #spring.redis.cluster.nodes=redis-1:6379、redis-2:6379、redis-3:6379 spring.redis.cluster.nodes=172.26.0.11:6379,172.26.0.12:6379,172.26.0.13:6379 6.1.3 コントローラーは次のとおりです。 /** * RedisCluster テスト * @author winfun * @日付 2020/10/22 午後 3:19**/ @リクエストマッピング("/redisCluster") @レストコントローラ パブリッククラスRedisClusterController { オートワイヤード プライベート StringRedisTemplate redisTemplate; /*** * 文字列: キーに応じて値を取得します * @author ウィンファン * @param キー キー * @return {@link 文字列 } **/ @GetMapping("/get/{キー}") パブリック文字列 get(@PathVariable("key") 文字列キー){ redisTemplate.opsForValue().get(key); を返します。 } /*** * 文字列: キー/値のペアを設定 * @author winfun * @param キー キー * @param 値 値 * @return {@link 文字列 } **/ @GetMapping("/set/{キー}/{値}") パブリック文字列セット(@PathVariable("key") 文字列キー、@PathVariable("value") 文字列値){ redisTemplate.opsForValue().set(キー、値); 「成功」を返します。 } } 6.2 プロジェクトをパッケージ化してイメージを生成する 6.2.1 プロジェクトをJarパッケージにパッケージ化する mvn クリーンパッケージ 6.2.2 画像を生成する Dockerfile ファイルを記述します。 java:8より メンテナー winfun #jar名はプロジェクトにパッケージ化されたjarです redis-cluster-test-0.0.1-SNAPSHOT.jar app.jar を追加します。 エクスポーズ8080 エントリポイント ["java","-jar","app.jar"] 次に、Dockerfile の現在のディレクトリに移動し、次のコマンドを実行します。 ローカルホスト上の redis-cluster を docker build -t winfun/rediscluster でテストします。 ビルド コンテキストを Docker デーモンに送信 25.84 MB ステップ 1/5: java:8 から 8: library/javaから取得 5040bd298390: プル完了 fce5728aad85: プル完了 76610ec20bf5: プル完了 60170fec2151: プル完了 e98f73de8f0d: プル完了 11f7af24ed9c: プル完了 49e2d6393f32: プル完了 bb9cdec9c7f3: プル完了 ダイジェスト: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d ステータス: Java の新しいイメージをダウンロードしました:8 ---> d23bdf5b1b1b ステップ 2/5: MAINTAINER winfun ---> a99086ed7e68 で実行中 中間コンテナ a99086ed7e68 を削除しています ---> f713578122fc ステップ 3/5: redis-cluster-test-0.0.1-SNAPSHOT.jar app.jar を追加します。 ---> 12ca98d789b8 ステップ4/5: EXPOSE 8080 ---> 833a06f2dd32 で実行中 中間コンテナ 833a06f2dd32 を削除しています ---> 82f4e078510d ステップ 5/5: ENTRYPOINT ["java","-jar","app.jar"] ---> 517a1ea7f138 で実行中 中間コンテナ517a1ea7f138の削除 ---> ed8a66ef4eb9 ed8a66ef4eb9 の構築に成功しました winfun/rediscluster:latest のタグ付けに成功しました 6.3 コンテナを起動してテストする 6.3.1 コンテナを起動し、上で作成したカスタムネットワーク redis-net に追加します。 ビルド後、 winfun@localhost ~ % docker イメージ | grep rediscluster winfun/rediscluster 最新 ed8a66ef4eb9 52 分前 669MB winfun@localhost ~ % docker run -it -d -p 8787:8080 --name myrediscluster winfun/rediscluster 705998330f7e6941f5f96d187050d29c4a59f1b16348ebeb5ab0dbc6a1cd63e1 winfun@localhost ~ % docker ネットワーク接続 redis-net myrediscluster カスタム ネットワーク redis-net の詳細を表示すると、コンテナー内に myrediscluster コンテナーが見つかり、このコンテナーにカスタム ネットワーク redis-net の IP アドレスが割り当てられていることがわかります。 6.3.2 この時点で、ブラウザで RedisClusterController インターフェースを直接呼び出すことができます。 キー/値を設定します: キーに応じて値を取得します。 上記からわかるように、全く問題はありません。 ただし、インターフェースをテストするたびに、イメージを再構築してデプロイする必要があります。 6.4 ブリッジモードとホストモード 上記で作成したカスタム ネットワーク redis-net のモードはブリッジ モード、つまりブリッジであることは誰もが知っています。 最大の特徴は、Docker内のコンテナのネットワークをホストマシンから分離することです。コンテナのIPとホストマシンのIPはアクセスできません。そのため、JedisClusterを使用してRedisクラスターを操作する場合、JedisClusterがDocker内のコンテナのIPとしてクラスターのノード情報を取得すると、アクセスできなくなります。 したがって、この問題を解決するには、ホスト モードを使用できます。その原理は、コンテナーがホスト マシンのネットワーク環境を共有するというものです。この場合、JedisCluster が Redis クラスターにアクセスしても問題はありません。 はい、そうだと思います。Redis クラスターをホスト モードで何度もデプロイしようとしましたが、redis-cli コマンドを使用したデプロイと操作に問題はありませんでした。しかし、JedisCluster を使用してクラスターにアクセスすると、クラスター ノードの情報さえ取得されません。 ! ぜひご自身で試してみる必要がありますので、詳細については以下の記事を参照してください。 7. 最後ここまでで、皆さんも Docker の威力を実感されたと思います。開発中にうまく使用すれば、それはまさに開発のための魔法の武器となります。最小限のシステム リソースを使用して、さまざまなミドルウェアを含む完全な開発環境をローカルに簡単に構築できます。 スタンドアロン Pulsar の Docker デプロイメントとクラスター アーキテクチャ Redis (開発成果物) に関するこの記事はこれで終わりです。Redis クラスターの Docker デプロイメントに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL 完全崩壊: クエリフィルタ条件の詳細な説明
<br />ナビゲーションとは、ウェブサイトの上部にあることが多いナビゲーション バーの...
1. nginxシェルスクリプトを保存するフォルダを作成する /usr/local/タスク/ngin...
ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...
目次ドラッグアンドドロップの実装ドラッグイベントドラッグして開始リリースゾーンでの移動境界処理、角度...
1. IE では、相対的な配置、つまり <div style="background...
async_hooks モジュールは、Node.js バージョン 8.0.0 に正式に追加された実験...
Flexbox レイアウト モジュールは、コンテナー内のスペースをより効率的に配分する方法を提供する...
1. ネットワーク接続方法がブリッジされていることを確認する物理ネットワーク接続ステータスのコピーを...
序文Linux システムの HugePages と Oracle データベースの最適化については、関...
このキー属性の機能は何ですか?まずは公式の説明を見てみましょう。 kekey 属性は主に、新しいノー...
ビジネス要件最近開発したプロジェクトの一つに、WeChat公式アカウントに関連したH5ページがありま...
これら 16 のサイトはそれぞれ注意深く読む価値があり、どのサイトでも推奨されている Web サイト...
目次1. 概要2. メモリ管理3. ガベージコレクション4. GCアルゴリズムの紹介5. 参照カウン...
長い間、リソースの制約により、使用できるフォントが限られていたため、Web サイトの開発は妨げられて...
仮想化ソフトウェアをインストールする仮想マシンにオペレーティング システムをインストールする前に、ホ...