docker compose を使用して consul クラスタ環境を構築する例

docker compose を使用して consul クラスタ環境を構築する例

領事の基本概念

サーバーモードとクライアントモード
サーバー モードとクライアント モードは、consul ノードのタイプです。クライアントはユーザー クライアントを指すものではありません。

  • サーバー モードでは、データ永続化機能が提供されます。
  • クライアント モードでは永続性が提供されず、実際には機能せず、ユーザー クライアントの要求をサーバー モード ノードに転送するだけです。したがって、クライアント モード ノードは、要求の転送のみを担当する LB (負荷分散) として考えることができます。
  • 通常、サーバー モード ノードの数は、3 や 5 などの複数に設定する必要があります。クライアント モードではノードの数に制限はありません。

サーバーモードを開始するためのコマンドラインパラメータ

  • -server: 現在使用されているサーバー モードを示します。指定されていない場合は、クライアント モードを示します。
  • -node: クラスター内の現在のノードの名前を指定します。
  • -config-dir: サービスを定義する構成ファイルのパスを指定します。パスの下にある .json で終わるすべてのファイルにアクセスします。デフォルト値は /consul/config です。
  • -data-dir: consul がデータを保存するディレクトリ。デフォルト値は /consul/data です。
  • -datacenter: データセンター名。デフォルト値は dc1 です。
  • -ui: Consul の組み込み Web UI インターフェースを使用します。
  • -join: 既存のクラスターに参加します。
  • -enable-script-checks: ハートビートの有効化と同様に、サービスがアクティブかどうかを確認します。
  • -bind: サーバーの IP アドレスにバインドします。
  • -client: クライアントは IP アドレスにアクセスできます。デフォルト値は「127.0.0.1」で、ループバック接続のみが許可されることを意味します。
  • -bootstrap-expect: データセンター内のサーバーノードの予想数。Consul が起動すると、このサーバー数に達するまで待機してから、クラスター全体を起動します。このパラメータの値は、同じデータセンター内のすべてのサーバー ノードで一貫している必要があります。

ここに別のパラメータ、bootstrap があります。これは、サーバーがブートストラップ モードで実行されるかどうかを制御するために使用されます。サーバーがブートストラップ モードの場合、そのサーバーは自身をリーダーとして選出できます。データ センターでは、ブートストラップ モードにできるサーバーは 1 つだけであることに注意してください。したがって、このパラメータは通常、1 台のサーバーのみを含む開発環境でのみ使用できます。複数のサーバーを含むクラスター実稼働環境では、このパラメータは使用できません。複数のサーバーがリーダーとしてマークされている場合、データの不整合が発生します。また、このフラグは -bootstrap-expect と同時に指定することはできません。

docker-composeを使用して次のconsulクラスタ環境を構築します。

  • クラスターには3つのサーバーが含まれています: node1、node2、node3
  • クラスターには 1 つのクライアント (node4) が含まれており、クライアント上で Web UI アクセス サービスを提供します。 。

docker-compose.ymlファイルを編集する

バージョン: '2'
ネットワーク:
  投稿者:
 
サービス:
  領事1:
    画像: 領事
    コンテナ名: ノード1
    コマンド: エージェント -server -bootstrap-expect=3 -node=node1 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1
    ネットワーク:
      - バイfn
 
  領事2:
    画像: 領事
    コンテナ名: ノード2
    コマンド: エージェント -server -retry-join=node1 -node=node2 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1
    依存:
        -領事1
    ネットワーク:
      - バイfn
 
  領事3:
    画像: 領事
    コンテナ名: node3
    コマンド: エージェント -server -retry-join=node1 -node=node3 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1
    依存:
        -領事1
    ネットワーク:
      - バイfn
 
  領事4:
    画像: 領事
    コンテナ名: node4
    コマンド: agent -retry-join=node1 -node=ndoe4 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1 -ui 
    ポート:
      - 8500:8500
    依存:
        -領事2
        -領事3
    ネットワーク:
      - バイfn

サービスを開始する

$ docker-compose を起動します
$ docker exec -t node1 コンサルメンバー
ノード アドレス ステータス タイプ ビルド プロトコル DC セグメント
node1 172.21.0.2:8301 稼働サーバー 1.4.0 2 dc1 <すべて>
node2 172.21.0.4:8301 稼働サーバー 1.4.0 2 dc1 <すべて>
node3 172.21.0.3:8301 稼働サーバー 1.4.0 2 dc1 <すべて>
ndoe4 172.21.0.5:8301 alive client 1.4.0 2 dc1 <デフォルト>

http://127.0.0.1:8500 にアクセスしてください

登録構成センターの例

春:
  応用:
    名前: クラウド決済サービス
  ####領事登録センターアドレスクラウド:
    領事:
      有効: true
      ホスト: 127.0.0.1
      ポート: 8500
      発見:
        ホスト名: 127.0.0.1
        優先IPアドレス: true
        サービス名: ${spring.application.name}
        #ヘルスチェック間隔: 15秒
        インスタンス ID: ${spring.application.name}-8002
        有効: true

KVアクセスの例

$ docker exec -t node4 consul kv put foo "こんにちは foo"
$ docker exec -t node4 consul kv put foo/foo1 "こんにちは foo1"
$ docker exec -t node4 consul kv put foo/foo2 "こんにちは foo2"
$ docker exec -t node4 consul kv put foo/foo21 "こんにちは foo21"
$ docker exec -t node4 consul kv get foo
こんにちは、フー
$ docker exec -t node4 consul kv get -detailed foo/foo1
インデックス作成 124
フラグ 0
キー foo/foo1
ロックインデックス 0
インデックス変更 ​​124
セッション -
値 Hello foo1
$ docker exec -t node4 consul kv get -keys -separator="" foo
フー
フー/フー1
フー/フー2
フー/フー2/フー21
$ docker exec -t node4 consul kv get 実際のキーではない
エラー! 次の場所にキーが存在しません: not-a-real-key

以上が、docker compose を使って consul クラスター環境を構築する詳細です。docker compose クラスター環境の詳細については、123WORDPRESS.COM 内の他の関連記事にも注目してください。

以下もご興味があるかもしれません:
  • Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

<<:  より人気がありクリエイティブなダーク背景のウェブデザインの例

>>:  Reactでカスタムフックを作成する方法を教えます

推薦する

MySQLテーブルにタイムスタンプを追加するいくつかの方法

シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...

Linuxはsttyを使用して端末の回線設定を表示および変更します。

Sttty は、Linux で端末設定を変更および印刷するための一般的なコマンドです。 1. パラ...

JavaScriptはPromiseを使用して複数の繰り返しリクエストを処理します

1. なぜこの記事を書くのですか?重複リクエストの処理に関する記事をたくさん読んだことがあるでしょう...

dockerログマウントの問題を解決する

重要なのは、ローカルサーバーに書き込み権限がないことですキーはここにあります(アクセス拒否)。私は肯...

Dockerはnginxをデプロイし、フォルダとファイル操作をマウントします

この間、私は docker を勉強していたのですが、nginx をデプロイするときに行き詰まりました...

Bootstrap Webページレイアウトグリッドの実装

目次1. Bootstrapグリッドシステムの仕組み1.1 12グリッドシステム1.2 Bootst...

テーブルセルの幅tdの設定は無効であり、内部コンテンツによって常に引き伸ばされます

テーブルページを作成するときに、td に設定された幅が無効になることがあります。td の幅は常に内部...

Docker プライマリ ネットワーク ポート マッピング構成

ポートマッピングDocker コンテナを起動する前にポート マッピングを行わないと、コンテナ外部のネ...

Docker Compose の実践とまとめ

Docker Compose は、Docker コンテナ クラスターのオーケストレーションを実現しま...

MySQLの一般的なバックアップコマンドとシェルバックアップスクリプトの共有

複数のデータベースをバックアップするには、次のコマンドを使用できます。 mysqldump -uro...

Vueは動的に生成されたコンポーネントをドラッグアンドドロップする要件を実装します

目次製品要件アイデア問題ライブラリ選択をドラッグコンポーネントを生成する方法コンポーネントを生成する...

Linux ファイル管理コマンド例の分析 [権限、作成、削除、コピー、移動、検索など]

この記事では、Linux ファイル管理コマンドについて例を挙げて説明します。ご参考までに、詳細は以下...

Nginx リバース プロキシを使用して go-fastdfs を実行する例

背景go-fastdfs は、http プロトコルをサポートする分散ファイルシステムです。一般的なプ...

デザイン協会: なぜ間違った場所を探したのですか?

数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...