領事-クイックガイド

Consulは、インフラストラクチャ内のさまざまなサービスを検出および構成するためのHashicorpベースのツールです。これは、Golangに基づいて構築されています。Consulを構築する主な理由の1つは、分散システムに存在するサービスを維持することでした。領事が提供する重要な機能のいくつかは次のとおりです。

  • Service Discovery − DNSまたはHTTPのいずれかを使用して、アプリケーションは依存するサービスを簡単に見つけることができます。

  • Health Check Status−ヘルスチェックをいくつでも提供できます。これは、サービス検出コンポーネントによって、異常なホストからトラフィックをルーティングするために使用されます。

  • Key/Value Store −動的構成、機能のフラグ付け、調整、リーダー選出など、さまざまな目的で領事の階層型キー/値ストアを利用できます。

  • Multi Datacenter Deployment−領事は複数のデータセンターをサポートしています。これは、複数の領域に成長するための抽象化の追加レイヤーを構築するために使用されます。

  • Web UI − Consulは、Consulのすべての機能を簡単に使用および管理できる美しいWebインターフェイスをユーザーに提供します。

サービスディスカバリ

サービスディスカバリは、領事の最も重要な機能の1つです。これは、サービスの検出に使用されるさまざまなサービスおよびネットワークプロトコルの検出として定義されます。サービスディスカバリの使用は、分散システムに恩恵をもたらします。これは、今日の大規模産業が環境内の分散システムの進歩に直面している主要な問題の1つです。

EtcdおよびZookeeperとの比較

このドメインの他のサービス検出ツールを見ると、2つの一般的なオプションがあります。ソフトウェア業界の一部の主要なプレーヤーは、過去にそれを使用しています。これらのツールはEtcd そして Zookeeper

各ツールのさまざまな側面を比較するために、次の表を検討してみましょう。また、それぞれが内部で何を使用しているかについても理解します。

プロパティ 領事 その他 動物園の飼育係
ユーザーインターフェース 利用可能
RPC 利用可能 利用可能
健康診断 HTTP API HTTP API TCP
キーバリュー 3整合性モード 良好な一貫性 強い一貫性
トークンシステム 利用可能
言語 ゴラン ゴラン Java

領事-メンバーとエージェント

領事メンバーは、領事クラスターの展開に使用されるさまざまなエージェントとサーバーモードのリストとして定義できます。領事は、領事に関連付けられているすべてのエージェントを簡単に一覧表示できるコマンドライン機能を提供します。

領事代理人は領事のコアプロセスです。エージェントは、メンバーシップ情報の維持、サービスの登録、チェックの実行、クエリへの応答などを行います。どのエージェントも、次の2つのモードのいずれかで実行できます。Client または Server。これらの2つのモードは、領事を使用するときに決定された役割に応じて使用できます。領事代理人は、以下の情報を提供してくれます。

  • Node name −これはマシンのホスト名です。

  • Datacenter−エージェントが実行するように構成されているデータセンター。各ノードは、そのデータセンターにレポートするように構成する必要があります。

  • Server−エージェントがサーバーモードで実行されているかクライアントモードで実行されているかを示します。サーバーノードはコンセンサスクォーラムに参加し、クラスターの状態を保存し、クエリを処理します。

  • Client Addr−エージェントがクライアントインターフェイスに使用するアドレスです。これには、HTTP、DNS、およびRPCインターフェイスのポートが含まれます。

  • Cluster Addr−クラスター内の領事エージェント間の通信に使用されるアドレスとポートのセットです。このアドレスは、他のすべてのノードから到達可能である必要があります。

次の章では、領事のアーキテクチャについて理解します。

1つのデータセンターで働く領事のアーキテクチャ図は、次のように最もよく説明できます。

ご覧のとおり、3つの異なるサーバーがあり、これらは領事によって管理されています。動作するアーキテクチャは、3つの異なるサーバーからリーダーを選出するのに役立つraftアルゴリズムを使用して機能します。これらのサーバーは、次のようなタグに従ってラベル付けされます。Follower そして Leader。名前が示すように、フォロワーはリーダーの決定に従う責任があります。これら3つのサーバーはすべて、通信のためにさらに相互に接続されています。

各サーバーは、RPCの概念を使用して独自のクライアントと対話します。クライアント間の通信は、Gossip Protocol下記のように。インターネット機能との通信は、TCPまたはゴシップ通信方式を使用して利用可能にすることができます。この通信は、3つのサーバーのいずれかと直接接触しています。

いかだアルゴリズム

Raftは、複製されたログを管理するためのコンセンサスアルゴリズムです。それはの原則に依存していますCAP Theorem、これは、ネットワークパーティションが存在する場合、一貫性と可用性のどちらかを選択する必要があることを示しています。CAP定理の3つの基本すべてが、任意の時点で達成できるわけではありません。せいぜい、それらのうちの2つとトレードオフする必要があります。

A Raft Cluster通常は奇数カウントの複数のサーバーが含まれます。たとえば、サーバーが5つある場合、システムは2つの障害に耐えることができます。常に、各サーバーは次の3つの状態のいずれかになります。Leader, Follower、または Candidate。通常の操作では、リーダーは1人だけで、他のサーバーはすべてフォロワーです。これらのフォロワーは受動的な状態にあります。つまり、自分でリクエストを発行するのではなく、リーダーと候補者からのリクエストに応答するだけです。

次の図は、いかだアルゴリズムが機能するワークフローモデルを示しています。

キーバリューデータ

領事のバージョン0.7.1以降、個別のキー値データが導入されています。KVコマンドは、コマンドラインを介して領事のKey-Valueストアと対話するために使用されます。のトップレベルコマンドを公開しますInserting, Updating, Reading そして Deleting店から。Key / Valueオブジェクトストアを取得するために、領事クライアントが利用できるKVメソッドを呼び出します-

kv := consul.KV()

ザ・ KVPair Structure単一のキー/値エントリを表すために使用されます。次のプログラムで領事KVペアの構造を見ることができます。

type KVPair struct {
   Key string
   CreateIndex uint64
   ModifyIndex uint64
   LockIndex uint64
   Flags uint64
   Value []byte
   Session string
}

ここで、上記のコードで言及されているさまざまな構造は、次のように定義できます。

  • Key−スラッシュURL名です。例–サイト/ 1 /ドメイン。

  • CreateIndex −キーが最初に作成されたときに割り当てられたインデックス番号。

  • ModifyIndex −キーが最後に更新されたときに割り当てられたインデックス番号。

  • LockIndex −キー/値エントリで新しいロックが取得されたときに作成されるインデックス番号

  • Flags −アプリがカスタム値を設定するために使用できます。

  • Value −最大512kbのバイト配列です。

  • Session −セッションオブジェクトの作成後に設定できます。

プロトコルの種類

領事館には2種類のプロトコルがあり、これらは-と呼ばれます。

  • コンセンサスプロトコルと
  • ゴシッププロトコル

それらを詳しく理解しましょう。

コンセンサスプロトコル

コンセンサスプロトコルは、CAP定理で説明されているように一貫性を提供するために領事によって使用されます。このプロトコルは、Raftアルゴリズムに基づいています。コンセンサスプロトコルを実装する場合、ラフトノードが常にフォロワー、候補、リーダーの3つの状態のいずれかにあるラフトアルゴリズムが使用されます。

ゴシッププロトコル

ゴシッププロトコルを使用して、メンバーシップを管理し、クラスター全体でメッセージを送受信できます。領事館では、ゴシッププロトコルの使用は2つの方法で発生します。WAN (無線エリアネットワーク)と LAN(ローカルエリアネットワーク)。ピアツーピアネットワーク内のノードを検出するためのゴシップアルゴリズムを実装できる3つの既知のライブラリがあります-

  • teknek-gossip − UDPで動作し、Javaで記述されています。

  • gossip-python − TCPスタックを利用し、構築されたネットワークを介してデータを共有することも可能です。

  • Smudge − Goで記述され、UDPを使用してステータス情報を交換します。

ゴシッププロトコルは、分散データベースの整合性または整合性のある状態の他のタイプのデータの達成と維持、未知のサイズのネットワーク内のノード数のカウント、ニュースの確実な拡散、ノードの編成などにも使用されています。

リモートプロシージャコール

RPCは、リモートプロシージャコールの短縮形として表すことができます。これは、あるプログラムが別のプログラムにサービスを要求するために使用するプロトコルです。このプロトコルは、ネットワークの詳細を確認しなくても、ネットワーク上の別のコンピューターに配置できます。

ConsulでRPCを使用することの本当の美しさは、ほとんどの検出サービスツールが以前に持っていた遅延の問題を回避するのに役立つことです。RPCの前は、領事はTCP そして UDPベースの接続。これはほとんどのシステムで良好でしたが、分散システムの場合は良好ではありませんでした。RPCは、ある場所から別の場所へのパケット情報の転送時間を短縮することで、このような問題を解決します。この分野では、GRPC by Googleは、ベンチマークを観察してパフォーマンスを比較したい場合に備えて、楽しみにしておくのに最適なツールです。

デモンストレーションの目的で、-devモードを使用する開発者モードでconsulエージェントを使用します。ローカルマシンのセットアップのためだけに、単一のシステム領事のセットアップを行います。Please do not use this single node consul cluster in your production。Hashicorpは、単一ノードの領事クラスターのケースシナリオですでに言及しているように、the data loss is inevitable

領事のインストール

Consulは、www.consul.io /downloads.htmlのダウンロードページからインストールできます。

マシンのダウンロードセクションでバイナリパッケージを抽出できます。

$ cd Downloads $ chmod +x consul
$ sudo mv consul /usr/bin/

それでは、領事館を使って使い始めましょう。 -dev flag

$ consul agent -dev -data-dir=/tmp/consul

出力は、次のスクリーンショットに示すようになります。

これで、次のコマンドを使用して領事メンバーを確認できます。

$ consul members

出力は、次のスクリーンショットに示すようになります。

他のノードをこのノードに参加させたい場合-

$ consul join <Node 2> <Node 3>

または、ノード2と3で次のコマンドを実行することもできます。

$ consul join <Node 1>

コマンドラインの使用

領事のコマンドラインはいくつかの異なるオプションで構成されており、最も一般的に使用されるもののいくつかは次のとおりです。

  • agent −領事エージェントを実行します。

  • configtest −構成ファイルを検証します。

  • event −新しいイベントを開始します。

  • exec −領事ノードでコマンドを実行します。

  • force-leave −クラスターのメンバーにクラスターからの離脱を強制します。

  • info −オペレーターのデバッグ情報を提供します。

  • join −領事エージェントをクラスターに参加させる。

  • keygen −新しい暗号化キーを生成します。

  • keyring −ゴシップレイヤー暗号化キーを管理します。

  • kv −Key-Valueストアと対話するため。

  • leave −領事クラスターを離れ、強制的にシャットダウンします。

  • lock −ロックを押し続けるコマンドを実行します。

  • maint −ノードまたはサービスのメンテナンスモードを制御します。

  • members −領事クラスターのメンバーを一覧表示します。

  • monitor −領事エージェントからログをストリーミングします。

  • operator −領事オペレーター向けのツールのクラスターを提供します。

  • reload −エージェントが設定ファイルをリロードするようにトリガーします。

  • rtt −ノード間のネットワークラウンドトリップ時間を推定します。

  • snapshot − Consulサーバーの状態のスナップショットを保存、復元、および検査します。

  • version −現在の領事のバージョンを印刷します。

  • watch −執政官の変更に注意する。

領事テンプレート

consul-templateは、Consulインスタンスにクエリを実行し、ファイルシステム上の指定されたテンプレートをいくつでも更新するデーモンを提供します。consul-templateは、更新プロセスが完了したときに、オプションで任意のコマンドを実行できます。このオプションは、すべてを手動で行うことなく、領事クラスターをセットアップするのに役立ちます。

領事テンプレートはで形成されます /tmp/<name-of-file>.conf.tmpfl。テンプレートが記述されている言語Hashicorp Configuration Language (HCL)。

このページからconsul-templateをダウンロードできます。

次のコマンドを使用して試してみてください-

$ ./consul-template -h

出力は、次のスクリーンショットに示すようになります。

このバイナリをより目立つスペースに移動して、ユーザーがいつでも利用できるようにする場合。次のコマンドを入力できます-

$ chmod +x consul-template $ sudo mv consul-template /usr/share/bin/

デモの目的で、次のサンプル構成を使用します。 nginx私たちのサービスとして使用されます。あなたはでより多くのデモを試すことができますhttps://github.com/hashicorp/consul-template/tree/master/examples または、独自のテンプレートを書き留めてください。

$ vim /tmp/nginx.conf.ctmpl

出力は、次のスクリーンショットに示すようになります。

設定ファイルは次のようになります-

{{range services}} {{$name := .Name}} {{$service := service .Name}} upstream {{$name}} {
   zone upstream-{{$name}} 64k; {{range $service}}server {{.Address}}:{{.Port}} max_fails = 3 fail_timeout = 60
   weight = 1;
   {{else}}server 127.0.0.1:65535; # force a 502{{end}}
} {{end}}

server {
   listen 80 default_server;
   location / {
      root /usr/share/nginx/html/;
      index index.html;
   }
   location /stub_status {
      stub_status;
   }
   {{range services}} {{$name := .Name}} location /{{$name}} {
      proxy_pass http://{{$name}};
   }
   {{end}}
}

領事テンプレートのバイナリファイルを使用して、次のコマンドを実行してください-

$ consul-template \
 -template = "/tmp/nginx.conf.ctmpl:/etc/nginx/conf.d/default.conf"

前のコマンドでプロセスが開始されました。後で別のターミナルを開いて、次のコマンドを使用して完全にレンダリングされているnginx.confファイルを表示できます。

$ cat /etc/nginx/conf.d/default.conf

出力は、次のスクリーンショットに示すようになります。

この章では、マイクロサービスがConsulとどのように連携するかを理解します。また、次のコンポーネントが領事にどのように影響するかについても学びます。

  • Dockerの使用
  • サービスディスカバリ用のBuildingRegistrator
  • rktとNomadの使用

これらのそれぞれについて詳しく説明しましょう。

Dockerの使用

始める前に、 please do not use this setup in productionデモ目的でのみ使用されるため。Dockerは、アプリケーションを簡単にデプロイできるコンテナベースのサービスです。領事を使用するには、次のリンク–0の画像を使用します。

https://hub.docker.com/r/progrium/consul/。

システムにDockerがインストールされ、適切に構成されていることを前提としています。次のコマンドを実行して、Dockerハブからイメージをプルダウンしてみましょう-

$ docker pull progrium/consul

出力は、次のスクリーンショットに示すようになります。

次の方法で、(Dockerの-pオプションを使用して)ポートを使用していくつかのインターフェイスを公開します。

  • 8400(RPC)
  • 8500(HTTP)
  • 8600(DNS)

また、行われたプルに従って、ホスト名の名前を次のように設定します。 node1。を使用して、好きなように変更できます。 -h flag 以下に示すように、独自のホスト名を使用します。

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul
-server -bootstrap

出力は、次のスクリーンショットに示すようになります。

−を使用して領事のUIモードを有効にすることもできます。

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul
-server -bootstrap -ui-dir /ui

UIベースの出力を確認できます http://localhost:8500。次のスクリーンショットは、UIベースの出力に関するより良いアイデアを示しています。

さまざまなノードのさまざまなDockerコンテナでconsulを使用するために、さまざまなノードで次のコマンドを実行できます-

Node1で

$ docker run -d --name node1 -h node1 progrium/consul -server -bootstrap-expect 3

どこ、 -bootstrap-expect 3 これは、領事サーバーが3つのピアが接続されるまで待機してから、セルフブートストラップして動作するクラスターになることを意味します。

先に進む前に、コンテナを検査してコンテナの内部IPを取得する必要があります。私たちの使用、ケースの目的のために、私たちは宣言するつもりです$ JOIN_IP

$ JOIN_IP = "$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)"

Node2で

それでは、Node2を起動し、上記のプログラムで宣言された変数を使用してNode1に参加するように指示しましょう。

$docker run -d --name node2 -h node2 progrium/consul -server -join $JOIN_IP

Node3で

$ docker run -d --name node3 -h node3 progrium/consul -server -join $JOIN_IP

サービスディスカバリ用のBuildingRegistrator

レジスターは、コンテナーがオンラインになったときにコンテナーを検査することにより、Dockerコンテナーのサービスを自動的に登録および登録解除します。これから使用するレジストラは、現在、プラグイン可能なサービスレジストリをサポートしています。Consul, Etcd そして SkyDNS2。ネットワークを介してさまざまなサービスとやり取りする場合は、Registratorを使用することを強くお勧めします。

$ docker pull gliderlabs/registrator:latest

出力は、次のスクリーンショットに示すようになります。

$ docker run -d \
--name = registrator \
--net = host \
--volume = /var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
 consul://localhost:8500

出力は、次のスクリーンショットに示すようになります。

受け取った出力は、開始したばかりのDockerコンテナのIDです。コマンド-を使用して、コンテナが実行されているかどうかを確認できます。

$ docker ps -a

出力は次のスクリーンショットのようになります。

次のコマンドを使用して、登録者のログを表示することもできます。

$ docker logs registrator

rktとNomadの使用

rktは、環境で使用できるもう1つのコンテナベースのサービスです。それはによって構築されていますCoreOS。rktを構築する主な理由は、2013-14年にまだ開発中であったDockerの危機的な問題の1つであったセキュリティを改善することでした。

領事に関しては、領事とのサービス検出に取り組むためにRktRegistratorを使用できます。rktの対象となるこの特定の登録者プロジェクトは開発中であり、not recommended for production level use

rktがインストールされているかどうかは、そのパスに移動して次のコマンドを実行することで確認できます。

$ ./rkt

次のスクリーンショットに示すように、出力をチェックして、正しくインストールされているかどうかを確認できます。

rktと領事を試すためにチェックしてください- https://github.com/r3boot/rkt-registrator。

遊牧民ツール

最も一般的に使用され、お気に入りのオプションの1つは、Nomadツールです。Nomadは、マシンのクラスターを管理し、それらでアプリケーションを実行するためのツールです。に似ていますMesos または Kubernetes。デフォルトでは、NomadはDockerとrktドライバーをカバーしています。したがって、Consulを使用してコンテナの大規模な展開を探している場合。遊牧民はそれに対する良い解決策かもしれません。チェックアウト-https://www.nomadproject.io/docs/drivers/rkt.html Nomadの詳細については。

この章では、領事館で次のコンポーネントがどのように使用されるかについて説明します。

  • 自動ブートストラップ
  • 手動ブートストラップ
  • DNS転送の使用
  • DNSキャッシング

これらのそれぞれについて詳しく説明しましょう。

自動ブートストラップ

ブートストラップは、Consulのコア機能の1つです。領事館を初めてインストールすると、遭遇したノードを検出、識別、参加するように自動的に構成されます。クラスター形成中、自動ブートストラップはConsulの組み込み機能です。執政官に関する詳細情報を入手するには、以下のコマンドを使用するのが最善の方法です。

$ sudo consul info

出力は、次のスクリーンショットに示すようになります。

このコマンドは、執政官の実際の働きを示します real working scenarios。領事で機能しているいかだアルゴリズムが表示されます。自動ブートストラップコマンドは、次のコマンドを使用して表示できます-

$ consul agent -server -data-dir = ”/tmp/consul” -bootstrap-expect 3

Automatic bootstrapping cannot be done in -dev mode.

このオプションは、予想されるサーバーノードの数をConsulに通知し、サーバーが使用可能になると自動的にブートストラップします。

手動ブートストラップ

手動ブートストラップは、Consulの古くて便利な機能です。実際、Consulの以前のバージョンでは、Consulを初めてインストールして使用するときに、ブートストラップを手動で実行する必要がありました。その後、このコマンドライン操作を異なる時間に実行することは不可能であることがわかりました。そのため、自動ブートストラップが導入されました。次のコマンドを使用して、いつでも手動でブートストラップを使用できます。

In this case, we will assume that a 3-node consul cluster is to be built.

手動ブートストラップを行うには2つのオプションがあります

  • 2つのノードでコマンドを実行する:ノードBとノードCでは、次の操作を実行できます。

$ consul join <Node A Address>
  • 1ノードでコマンドを実行-

$ consul join <Node B Address> <Node C Address>

DNS転送の使用

DNSはから提供されます port 53。DNS転送は、を使用して実行できますBIND, dnsmasq そして iptables。デフォルトでは、Consulエージェントはポート8600でリッスンしているDNSサーバーを実行します。ConsulエージェントのDNSサーバーにDNS要求を送信することにより、関心のあるサービスを実行しているノードのIPアドレスを取得できます。

Consul DNSインターフェースは、サービスのポート情報を SRV records。コードに手動でロジックを追加しないと、通常、クエリを実行しているサービスのIPアドレス情報(つまりレコード)のみに制限されます。

最良のオプションは、それぞれがローカルでConsulエージェントを実行している複数のBINDサーバーを持つことです。BINDサーバーが受信したクエリはすべて、ローカルのConsul AgentDNSサーバーに転送されます。

バインドの使用

バインド機能を使用してDNS転送を使用できます。次のコマンドを使用して実行できます。

$ sudo apt-get install bind9 bind9utils bind9-doc

出力は、次のスクリーンショットに示すようになります。

次のコマンドを使用して、/ etc / bind /named.confファイルを編集してみましょう。

$ sudo vim /etc/bind/named.conf

ファイル内で、コードの最後の行の下に次の行を追加してください。

options {
   directory "/var/cache/bind";
   recursion yes;
   allow-query { localhost; };
   
   forwarders {
      8.8.8.8;
      8.8.4.4;
   };
   dnssec-enable no;
   dnssec-validation no;
   auth-nxdomain no; # conform to RFC1035
   listen-on-v6 { any; };
};
include "/etc/bind/consul.conf";

出力は、次のスクリーンショットに示すようになります。

次のBindコマンドを使用して、Consulを構成できます。

$ sudo vim /etc/bind/consul.conf

ファイルを作成するときに次の行を追加します-

zone "consul" IN {
   type forward;
   forward only;
   forwarders { 127.0.0.1 port 8600; };
};

これで、次のコマンドを使用して領事エージェントの実行を開始できます。(bind9サービスも再起動することを忘れないでください。)

$ sudo service bind9 restart $ consul agent -server -bootstrap-expect 1 -data-dir = /tmp/consul -configdir = [Path]

システムは、ローカルの領事エージェントのDNSサーバーにクエリを送信するように構成する必要があります。これは、resolv.conf127.0.0.1を指すようにシステム上のファイル。ほとんどの場合、領事はポート53で実行するように構成する必要があります。

次の情報を/etc/resolv.confに追加できます。

nameserver 127.0.0.1

DNSキャッシング

Consulは、すべてのDNS結果を「0TTL」(存続時間)値で提供します。これにより、キャッシュが防止されます。ただし、TTL値により、DNS結果をConsulのダウンストリームにキャッシュできるように設定できます。TTL値を高くすると、Consulサーバーでのルックアップの数が減り、クライアントのルックアップが高速化されますが、結果はますます古くなります。

この目的のために、以下の方法を使用してDNSキャッシングを使用します-

$ sudo apt-get install dnsmasq

出力は、次のスクリーンショットに示すようになります。

これで、非常に簡単な構成を行うことができます-

$ echo "server = /consul/127.0.0.1#8600" > /etc/dnsmasq.d/10-consul

ここで行っているのは、ポート8600の127.0.0.1にあるDNSサーバーによって処理される領事サービスのDNS要求を指定することだけです。領事のデフォルトを変更しない限り、これは機能するはずです。

通常、次のコマンドを使用する必要があります。

$ dig @127.0.0.1 -p 8600 web.service.consul

Dnsmasq、次のコマンドを使用する必要があります。

$ dig web.service.consul

出力は、次のスクリーンショットに示すようになります。

この章では、次の関数を使用してノードをクエリする方法を学習します。

  • digを使用する
  • 監視コマンドの使用
  • ウォッチコマンドの使用
  • 外部サービスを登録することにより

これらの各機能を詳しく理解しましょう。

Digを使用する

領事は127.0.0.1:8600で領事のDNSクエリをリッスンします。サービスを提供するために使用できるノードを決定する方法は、次のいずれかのチェックを使用することです。

  • 実行され、それが返すスクリプト nagios compliant code

  • HTTP応答コードを返すHTTPチェック。

  • ポートが開いているかどうかをチェックするTCPチェック。

試すための一般的なコマンド dig は−

$ dig @127.0.0.1 -p <port> <service-name>.consul

それでは、サンプルを試してみましょう dig コマンド-

$ dig @127.0.0.1 -p 8600 web.service.consul

出力は、次のスクリーンショットに示すようになります。

監視コマンドの使用

これは、実行中のConsulエージェントのログに接続して表示するために使用されます。このコマンドは、最近のログを表示します。また、比較的高いログレベルでエージェントをログに記録することもできます。これは、トレース、デバッグ、情報、警告、エラーなど、さまざまなログレベルで構成されています。

次のコマンドを試してみましょう-

$ consul monitor

出力は、次のスクリーンショットに示すようになります。

-log-levelや-rpc-addressなどのサブコマンドを使用してmonitorコマンドを設定することもできます。デフォルトでは、RPCのアドレスは127.0.0.1:8400です。詳細については、ここをクリックしてください。

ウォッチコマンドの使用

このコマンドは、ノード、サービスメンバー、キー値などのリストの変更を監視するメカニズムを提供します。また、ビューの最新の値を使用してプロセスを呼び出します。プロセスが指定されていない場合、現在の値は次のように処理されます。STDOUT、これは領事館のデータを検査するのに便利な方法です。次のスクリーンショットに示すように、Consul WatchCommandヘルプにはさまざまなオプションがあります-

でデモを試してみましょう -type = service 次のコマンドに示すように。

$ consul watch -type = service -service = consul

このトピックの詳細については、ここをクリックしてください。

外部サービスを登録することにより

登録されると、DNSインターフェイスはサービスの適切な「Aレコード」またはCNAMEレコードを返すことができます。次のコードブロックとスクリーンショットに示すように、Amazonなどの外部サービスを登録しましょう。

$ sudo curl -X PUT -d '{"Datacenter": "dc1", "Node": "amazon",
"Address": "www.amazon.com",
"Service": {"Service": "shop", "Port": 80}}'
http://127.0.0.1:8500/v1/catalog/register

上記のコマンドは、shopと呼ばれるサービスを指定します。このノードはamazonと呼ばれ、そのURLはポート80のwww.amazon.comで入手できます。領事館の出力をチェックして、このサービスが正しくインストールされていることを確認しましょう。このためには、localhost:8500でブラウザウィンドウを開いてください。

サービスを削除するには、次のコマンドを使用するだけです。

$ curl -X PUT -d '{"Datacenter": "dc1", "Node": "amazon"}'
http://127.0.0.1:8500/v1/catalog/deregister

次のスクリーンショットに示すように、UIを確認してみましょう。

この章では、領事館でのフェイルオーバーイベントについて学習します。これは、次の機能の助けを借りて行われます-

  • 単一クラスターの障害
  • ジェプセンテスト
  • 複数のクラスター障害
  • スナップショットを撮る

これらのそれぞれを詳細に理解しましょう。

単一クラスターの障害

単一クラスターの障害では、データセンターの1つに配置されたクラスターが障害を開始します。すべての場合のシナリオで、フェイルオーバーの場合にシステムがそれを防ぐだけでなく、信頼できるバックアップも持っていることを確認することが重要です。領事フェイルオーバーイベントを防ぐために、領事アラートと呼ばれるものを使用します。メインプロジェクトは次の場所にあります–https://github.com/AcalephStorage/consul-alerts。

Consul-alertsは、ConsulHealthチェックに基づいて通知とリマインダーを送信するための高可用性デーモンです。このプロジェクトは、localhost:9000でデーモンとAPIを実行し、デフォルトのデータセンター(dc1)を使用してローカル領事エージェント(localhost:8500)に接続します。

プロジェクトを開始するには2つの方法があります。最初の方法は、GO。GOをインストールして構成したユーザーの場合、以下の手順に従うことができます。

$ go get github.com/AcalephStorage/consul-alerts $ go install
$ consul-alerts start

最後のコマンドは、consul-alert、datacenterオプション、consul-aclトークンなどのデフォルトポートを上書きするために簡単に使用できます。このコマンドは、次のように記述することもできます。

$ consul-alerts start --alert-addr = localhost:9000 --consul-addr = localhost:8500
--consul-dc = dc1 --consul-acl-token = ""

2番目の方法では、ユーザーがDockerを使用します。どちらの方法も、さまざまなシナリオで等しく役立ちます。DockerでConsul-alertsを使用する場合は、次のコマンドを使用してDockerHubからイメージをプルします。

$ docker pull acaleph/consul-alerts

Dockerメソッドでは、次の3つのオプションを検討できます。

  • コンテナ自体に組み込まれているConsulAgentを使用します。
  • 別のDockerコンテナ上で実行されているConsulAgentを使用する。
  • 領事アラートを使用して、リモート領事インスタンスを介してリンクします。

ここで、これらの両方について詳しく説明します。

コンテナ自体に組み込まれているConsulAgentを使用する

次のコマンドを使用して領事エージェントを起動しましょう-

$ docker run -ti \
   --rm -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \  
   --entrypoint = /bin/consul \
   acaleph/consul-alerts \
   agent -data-dir /data -server -bootstrap -client = 0.0.0.0

ここでは、 entrypoint 旗で言及されている領事のために --entrypoint。それに加えて、を使用して使用されるポートに言及することにより、クライアントをブートストラップしています-p flag, data directory /data フラグ-data-dirとclientを0.0.0.0として使用します。

新しいターミナルウィンドウで、consul-alertsオプションを開始しましょう。

$ docker exec -ti consul-alerts /bin/consul-alerts start --alertaddr = 0.0.0.0:9000
--log-level = info --watch-events --watch-checks

ここでは、上記の手順で、consul-alertsを実行してインタラクティブモードで開始します。アラートアドレスポートは9000と記載されています。ウォッチは、領事チェックとともに、領事エージェントが有効になっているかどうかをチェックします。

領事アラートが簡単に開始され、領事エージェントが追加された新しいヘルスチェックが登録されていることがはっきりとわかります。データセンターはdc1と見なされ、ユーザーに応じて変更できます。

別のDockerコンテナ上で実行されているConsulAgentの使用

ここでは、任意のタイプの領事イメージを使用して、Dockerコンテナー上で実行できます。consul-alertsイメージを使用すると、consul-alertsコンテナーをconsul-alertsコンテナーに簡単にリンクできます。これは、--link flag

Note −次のコマンドを使用する前に、領事コンテナがすでに別の端末で実行されていることを確認してください。

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   --link consul:consul \
   acaleph/consul-alerts start \
   --consul-addr=consul:8500 \
   --log-level = info --watch-events --watch-checks

Consul-alertsを使用してリモートConsulインスタンスを介してリンクする

ここでは、次のコマンドを使用して、Consul-alertsを使用してリモートのconsulインスタンスを介してリンクする必要があります。

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   acaleph/consul-alerts start \
   --consul-addr = remote-consul-server.domain.tdl:8500 \
   --log-level = info --watch-events --watch-checks

ジェプセンテスト

Jespenは、任意のシステムで部分的な許容範囲とネットワークをテストするために作成されたツールです。システム上でいくつかのランダムな操作を作成することにより、システムをテストします。Jepsen is written in Clojure。残念ながら、デモの場合、Jepsenテストでは、データベースシステムを使用した膨大なレベルのクラスター形成が必要であるため、ここで説明する範囲外です。

Jepsenは、5つの異なるホストでテスト対象のデータストアをセットアップすることで機能します。テスト対象のデータストア用にクライアントを作成し、5つのノードのそれぞれにリクエストを送信するように指示します。また、「ネメシス」と呼ばれる特別な一連のクライアントを作成します。これは、次を使用してノード間のリンクを切断するように、クラスターに大混乱をもたらします。iptables。次に、ネットワークを交互に分割および修復しながら、異なるノードに対して同時に要求を行います。

テスト実行の最後に、クラスターを修復し、クラスターが回復するのを待ってから、システムの中間状態と最終状態が期待どおりであるかどうかを確認します。ここからいくつかの抜粋が取られています。

Jepsen Testingの詳細については、こちらを確認してください。

複数のクラスター障害

複数クラスターフェイルオーバーイベント中に、複数のデータセンターにデプロイされたクラスターは、顧客にサポートされているサービスをサポートできません。領事は、そのような状況の1つが発生した場合に、そのような状況でサービスを有効にするのに役立つ機能を確実に提供できるようにします。

これを実現するために、Consulを1つのクラスターから複数のクラスターに複製できるようにするためのプロジェクトを検討します。このプロジェクトは、consul-replicateデーモンを使用して複数のConsulデータセンター間でK / Vペアを複製する方法を提供します。このHashicorpプロジェクトは-で見ることができますhttps://github.com/hashicorp/consul-replicate。このプロジェクトを試すための前提条件には、次のものがあります。

  • Golang
  • Docker
  • Consul
  • Git

次のコマンドから始めましょう-

Note −次のコマンドを実行する前に、Gitがマシンに正しくインストールおよび構成されていることを確認してください。

$ git clone − https://github.com/hashicorp/consul-replicate.git

出力は、次のスクリーンショットに示すようになります。

$ cd consul-replicate $ make

出力は、次のスクリーンショットに示すようになります。

バイナリのビルドで問題が発生した場合は、次のコマンドを使用してDockerイメージを手動でプルすることもできます-

$ docker pull library/golang:1.7.4

上記のコマンドは、バイナリとして呼び出すことができるbin / consul-replicateを作成します。次の表は、対象となるサブコマンドの完全なリストを示しています。

オプション 説明
auth コロンで区切られた基本認証ユーザー名(およびオプションのパスワード)。デフォルト値はありません。
領事* ポートを使用してクエリを実行する領事インスタンスの場所(IPアドレスまたはFQDNの場合があります)。
max-stale クエリの最大の古さ。指定した場合、領事館はリーダーだけでなくすべてのサーバーに作業を分散します。デフォルト値は0(なし)です。
ssl 領事と話している間はHTTPSを使用してください。領事サーバーは、サーバーの安全な接続をサーバーとして構成する必要があります。デフォルト値はfalseです。
ssl-verify SSL経由で接続するときに証明書を確認します。これには、-sslを使用する必要があります。デフォルト値はtrueです。
Syslog ログ出力をsyslogに送信します(stdoutとstderrに加えて)。デフォルト値はfalseです
Syslog-ファシリティ Syslogに送信するときに使用する機能。これには、-syslogを使用する必要があります。デフォルトはLOCALです
トークン 領事APIトークン。デフォルト値はありません。
プレフィックス* コロンで区切られた、オプションの宛先プレフィックスを含むソースプレフィックス。:)。このオプションは付加的であり、複数のプレフィックスを複製するために複数回指定できます。
除外する レプリケーション中に除外するプレフィックス。このオプションは追加機能であり、複数のプレフィックスを除外するために複数回指定できます。
待つ コロン(で区切られた、複製する前に安定性を待つminium(:maximum):)。オプションの最大値を省略した場合、必要な最小値の4倍と見なされます。デフォルト値はありません。
リトライ ConsuleがAPIとの通信時にエラーを返した場合に待機する時間。デフォルト値は5秒です。
設定 現在の作業ディレクトリを基準にした、ディスク上の構成ファイルまたは構成ファイルのディレクトリへのパス。CLIで指定された値は、構成ファイルで指定された値よりも優先されます。デフォルト値はありません。
ログレベル 出力のログレベル。これは、stdout / stderrロギングとsyslogロギング(有効な場合)に適用されます。有効な値は「debug」、「info」、「warn」、および「err」です。デフォルト値は「warn」です。
一度 Consule Replicateを1回実行して終了します(デーモンのデフォルトの動作とは対照的です)。(CLIのみ)
バージョン バージョン情報を出力して終了します。(CLIのみ)

スナップショットを撮る

スナップショットは、バックアップの場合にConsulクラスターを管理するために不可欠で重要な部分です。デフォルトでは、領事は領事クラスターのスナップショットを保存する方法を提供します。Consulは、consulを使用してスナップショットを作成できる4つの個別のサブコマンドを提供します。

  • 領事スナップショット保存
  • スナップショットエージェント領事
  • 領事スナップショット検査
  • 領事スナップショットの復元

これらのそれぞれを詳細に理解しましょう。

領事スナップショット保存

このコマンドは、キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、およびACLを含む、領事サーバーの状態のアトミックなポイントインタイムスナップショットを取得するように設定されています。スナップショットは、指定されたファイル名で保存されます。

$ consul snapshot save <name-of-the-file>.snap

出力は、次のスクリーンショットに示すようになります。

現在のディレクトリにファイルが存在するかどうかを確認するには、現在のディレクトリで実行して確認してください。非リーダーノードの場合は、以下のコマンドを実行してください-

$ consul snapshot save -stale <name-of-file>.snap

スナップショットエージェント領事

このサブコマンドは、Consulサーバーの状態のスナップショットを取得してローカルに保存するプロセスを開始するか、オプションのリモートストレージサービスにプッシュします。

領事スナップショット検査

これは、キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、およびACLを含む、Consulサーバーの状態のポイントインタイムスナップショットを検査するために使用されます。コマンドは次のように実行できます-

Note −次のコマンドは、スナップショットが保存されているディレクトリでのみ実行できることに注意してください。

$ consul snapshot save <name-of-the-file>.snap

出力は、次のスクリーンショットに示すようになります。

領事スナップショットの復元

スナップショット復元コマンドは、キー/値エントリ、サービスカタログ、準備されたクエリ、セッション、およびACLを含むConsulサーバーの状態のポイントインタイムスナップショットを復元するために使用されます。スナップショットは、保存されたバックアップファイルから読み取られます。

Note −次のコマンドは、スナップショットが保存されているディレクトリでのみ実行できることに注意してください。

$ consul snapshot restore <name-of-the-file>.snap

出力は、次のスクリーンショットに示すようになります。

AWSでConsulに取り組んでいる場合、このプロジェクトは時間を節約するのに役立つ可能性があります- https://github.com/pshima/consul-snapshot。

この章では、Consul UI(ユーザーインターフェイス)の使用方法を学び、その重要なコンポーネントを理解します。

UISetup領事

領事は、物事を簡単に管理できる便利なインターフェースを提供してくれます。領事のユーザーインターフェイスは、任意のポートで簡単に起動できます。領事UIは、次の3つの重要な部分に分けることができます。

  • ACL −クラスターを簡単にロックするための一連のルール

  • Datacenter −データセンターを簡単に管理し、クラスターを操作できるようにします。

  • Nodes −Consulクラスターが使用しているノードのクイックアップデート

領事UIの使用

領事UIを使用するには、Hashicorpチームから提供されたUIパッケージを領事のプロジェクトサイトにインストールする必要があります。それでは、ソースからダウンロードして使い始めましょう。使ってくださいsudo すべてのコマンドの前に Permission Denied error 示されています。

$ mkdir /opt/consul-ui
$ cd /opt/consul-ui $ wget https://releases.hashicorp.com/consul/0.7.2/consul_0.7.2_web_ui.zip
$ unzip consul_0.7.2_web_ui.zip $ rm consul_0.7.2_web_ui.zip

次のコマンドを任意のエージェントで使用して、ConsulUIの出力を表示できます。

$ consul agent -dev -ui -data-dir /tmp/consul

出力は、次のスクリーンショットに示すようになります。

デフォルトでは、UIは次の場所で確認できます。 http://localhost:8500/ui。/ uiの部分は、領事のHTTPAPIと同じです。

Dockerを介してConsulUIを使用するには、Dockerイメージに対して次のコマンドを実行してください(progrium / consul)-

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul
-server -bootstrap -ui-dir /ui

出力は、次のスクリーンショットに示すようになります。

領事UIの機能

次のような機能のいくつかを確認することで、ConsulUIの閲覧を開始できます。

  • Nodes
  • ACL
  • Key/Value
  • Settings
  • Datacenter
  • Services

これらのそれぞれを詳細に理解しましょう。

ノード

次のスクリーンショットに示すように、UIダッシュボードでのノードの基本的な使用法を確認できます。

この場合、node1のような特定のノードをクリックすると、ノードの情報が次のように簡単に表示されることがわかります。

いつでも領事からノードの登録を解除できます。これにより、高領事クラスターの観点からノードを簡単に管理できます。

ACL(アクセス制御リスト)

領事の最高の機能の1つは、アクセス制御リストです。さまざまなデータセンターにまたがるさまざまなクラスターに対して、さまざまな権限を書き込むことができます。ACLをオンにする最も簡単な方法の1つは、Consulのデータディレクトリに新しいjsonファイルを追加することです。ACLを有効にして更新するには、設定のフィールドにマスターACLトークンを追加し、[ACL]タブを使用して更新します。

詳しくはこちらをご確認ください

キー/値

ConsulのKeyValueオプションは、デフォルトでConsulUIにあります。Consul UIを使用して、独自のキーを作成できます。また、キーを保存するフォルダーを作成するオプションもあります。

設定

画面の右上にある領事UIの設定オプションを確認できます。そのオプションをクリックすると、Consulがローカルストレージ設定と検証用のトークンシステムを構成できるオプションを提供していることが簡単にわかります。

データセンター

データセンターオプションは、選択によって簡単に変更および切り替えることができます。Consul UIは、Consulが作業しているデータセンターの数の検出を自動的に更新します。

サービス

Consul UIには、Consulを使用して現在展開されているサービスを構成および表示するための[サービス]タブもあります。ノードに応じてサービスを構成するオプションを提供します。

この章では、AWS(Amazon Web Services)でConsulを使用する方法を学習します。

AWSの機能

AWSでConsulを使用する際に役立ついくつかの機能は次のとおりです。

  • クラスターの状態を簡単に維持できます。
  • スケーラビリティと高可用性。
  • 複数のデータセンターにまたがるクラスターを管理するための優れたユーザーインターフェイス。
  • 使いやすいコマンドラインオプション。

Dockerを使用してAWSにConsulを簡単にデプロイできるソリューションをお探しの場合。次のリンクをチェックしてください-https://github.com/dwmkerr/terraform-consul-cluster。

AWSのデプロイ

AWSを使用するには、まずVPCを作成します。AWSにconsulをデプロイするために、AWSサービスが提供するクイックスタートテンプレートを使用します。このテンプレートは次の場所で簡単に見つけることができます–https://aws.amazon.com/quickstart/architecture/consul/。

この章では、AWSの基本をすでに理解していることを前提としています。AWS CloudFormationテンプレートは、次のコンポーネントを作成します-

  • A VPC 3つのアベイラビリティーゾーンにまたがるパブリックサブネットとプライベートサブネットを使用します。

  • A Seed Consul serverSeed client 2つの自動スケーリンググループと一緒に。

  • 3、5、または7台のサーバーを作成することを選択できます。クライアントの数はデフォルトで3に設定されていますが、ユーザーが構成できます。

  • Dnsmasq、インストールの一部として領事のためにインストールおよび構成されます。

  • を使用する領事クラスター bootstrap_expect オプション。

次の図を見て、さまざまなコンポーネントがどのように相互接続されているかを理解してください。

AWSの使用

Webコンソールを使用してAWSインフラストラクチャにすでにサインインしていることを確認してください。さて、ブラウザウィンドウに以下のURLを入力してください。URLを入力してEnterキーを押すと、AWSWebサイトが開きます。

このデモでは、新しいVPC(仮想プライベートクラウド)に展開することを選択します。AWSのVPC管理は、https:// <awsregion> .console.aws.amazon.com / vpc / homeでいつでも確認できます。初めてのユーザーの場合、デフォルトの地域は米国の西オレゴンです。したがって、次のURLに直接アクセスできます– https:// us-west-2.console.aws.amazon.com/vpc/home。

ご覧のとおり、AWSのVPCサービスは動作可能であり、VPCはありません。つまり、AWSアカウントですでに実行/構成されています。次に、選択に応じて、AWSの[デプロイ]オプションをクリックして新しいVPCに配置するか、既存のVPCにデプロイしてください。次のスクリーンショットに示すように、Webサイトでオプションを表示できます。

上記のオプションをクリックすると、以下に示すような別のウィンドウが開くことがわかります。

テンプレートに示されているように、URLはAWSによって既に選択されています。また、クラウド形成テンプレートを自由にカスタマイズできます。必要に応じてカスタマイズし、[次へ]ボタンをクリックして続行できます。

ご覧のとおり、ここで構成できるさまざまな値とオプションがあります。一部の変更については、HashiCorp-Consulという名前の代わりに、選択に応じて名前を変更できます。他のオプションは、ご都合に合わせてお気軽に変更してください。

上記のように、選択に応じていくつかのオプションをカスタマイズできます。Consul Setupセクションでわかるように、デフォルトのConsulClusterインスタンスタイプはt2.medium。選択したインスタンスに変更できます。

Note −任意のIPアドレスを許可するために、許可される範囲を0.0.0.0/0として入力します。

デフォルトでは、領事サーバーの数は3つです。領事環境でより多くのサーバーをテストするために、5に変更できます。クイックスタート構成では、次のことがわかります。S3 bucketまた、デフォルトでクイックスタートリファレンスに使用され、名前が付けられます。変更が完了したら、画面の下部にある[次へ]ボタンをクリックします。

上のスクリーンショットでは、識別と使用法を改善するためにタグを使用するオプションがあることがわかります。それに加えて、VPCスタックへの他のユーザーへのアクセスを提供するためのIAMロールを選択するオプションも提供されます。オプションの選択に応じて選択できます。

より高度なオプションについては、 advanced tab、VPCの通知用にAmazonSNSを有効にできます。詳細が完了したら、次のオプションに進んでください。

上の画面は、選択した領事スタックの詳細を確認したものです。VPCスタック用に選択したオプションを確認して画面の下部に進み、IAMリソースの作成の確認のチェックボックスをオンにして、[作成]ボタンをクリックしてスタックの形成を完了することができます。

AWS管理コンソールのCloudFormationStackセクションで出力を確認できます。VPCの出力に従って、以下のスクリーンショットに示すように、AWSコンソールのVPCセクションで確認することもできます。

領事テンプレートのみをテストする場合は、使用したリソースを必ず削除してください。これは、CloudFormationセクションのCloudFormationスタックとVPCダッシュボードのVPCを削除することで簡単に実行できます。