Consul-quick-guide

提供:Dev Guides
移動先:案内検索

領事-はじめに

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

  • サービスの検出-DNSまたはHTTPを使用して、アプリケーションは依存するサービスを簡単に見つけることができます。
  • Health Check Status -任意の数のヘルスチェックを提供できます。 異常なホストからトラフィックをルーティングするために、サービス検出コンポーネントによって使用されます。
  • キー/値ストア-Consulの階層キー/値ストアを、動的構成、機能フラグ設定、調整、リーダー選出など、さまざまな目的に使用できます。
  • 複数のデータセンターの展開-Consulは複数のデータセンターをサポートしています。 複数の地域に成長するための抽象化の追加レイヤーを構築するために使用されます。
  • Web UI -Consulは、Consulのすべての機能を簡単に使用および管理できる、美しいWebインターフェイスをユーザーに提供します。

サービス発見

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

EtcdおよびZookeeperとの比較

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

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

Properties Consul Etcd Zoo Keeper
User Interface Available image image
RPC Available Available image
Health Check HTTP API HTTP API TCP
Key Value 3 Consistency modes Good Consistency Strong Consistency
Token System Available image image
Language Golang Golang Java

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

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

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

  • ノード名-これはマシンのホスト名です。
  • データセンター-エージェントが実行するように構成されているデータセンター。 各ノードは、そのデータセンターにレポートするように構成する必要があります。
  • サーバー-エージェントがサーバーモードまたはクライアントモードで実行されているかどうかを示します。 サーバーノードはコンセンサスクォーラムに参加し、クラスターの状態を保存し、クエリを処理します。
  • クライアントアドレス-エージェントがクライアントインターフェースに使用するアドレスです。 HTTP、DNS、およびRPCインターフェイスのポートが含まれます。
  • Cluster Addr -クラスタ内のConsul Agent間の通信に使用されるアドレスとポートのセットです。 このアドレスは、他のすべてのノードから到達可能でなければなりません。

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

領事-建築

1つのデータセンターで動作する領事のアーキテクチャ図は、以下に示すように最もよく説明することができます-

アーキテクチャ

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

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

いかだアルゴリズム

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

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

次の図では、いかだアルゴリズムが機能するワークフローモデルについて説明します-

ラフトアルゴリズム

キー値データ

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

kv := consul.KV()
  • KVPair構造*は、単一のキー/値エントリを表すために使用されます。 Consul KVペアの構造は、次のプログラムで確認できます。
type KVPair struct {
   Key string
   CreateIndex uint64
   ModifyIndex uint64
   LockIndex uint64
   Flags uint64
   Value []byte
   Session string
}

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

  • キー-スラッシュURL名です。 たとえば、sites/1/domain。
  • CreateIndex -キーが最初に作成されたときに割り当てられたインデックス番号。
  • ModifyIndex -キーが最後に更新されたときに割り当てられたインデックス番号。
  • LockIndex -キー/値エントリで新しいロックが取得されたときに作成されたインデックス番号
  • フラグ-カスタム値を設定するためにアプリで使用できます。
  • -最大512kbのバイト配列です。
  • Session -セッションオブジェクトの作成後に設定できます。

プロトコルの種類

Consulには、2種類のプロトコルがあります。

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

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

コンセンサスプロトコル

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

ゴシッププロトコル

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

  • teknek-gossip -UDPで動作し、Javaで書かれています。
  • gossip-python -TCPスタックを利用し、構築されたネットワークを介してデータを共有することもできます。
  • Smudge -Goで記述され、UDPを使用してステータス情報を交換します。

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

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

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

ConsulでRPCを使用することの本当の美しさは、以前のほとんどのディスカバリーサービスツールにあった遅延の問題を回避するのに役立ちます。 RPC以前は、Consulは TCP および UDP ベースの接続のみを持っていました。これはほとんどのシステムで良好でしたが、分散システムの場合はそうではありませんでした。 RPCは、ある場所から別の場所へのパケット情報の転送時間を短縮することにより、このような問題を解決します。 この分野では、Googleのhttp://www.grpc.io/[GRPC]は、ベンチマークを観察してパフォーマンスを比較したい場合に期待できる素晴らしいツールです。

領事-インストール

デモンストレーションのために、-devモードを使用して開発者モードでconsulエージェントを使用します。 ローカルマシンのセットアップのためだけに、単一のシステムコンソールセットアップを行います。 本番環境ではこの単一ノードのconsulクラスターを使用しないでください。 Hashicorpは、単一ノードの領事クラスターのケースシナリオで既に言及しているように、データ損失は避けられません

Consulのインストール

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

Consulのインストール

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

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

ここで、*-devフラグ*を使用してconsulの使用を開始しましょう。

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

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

開発フラグ

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

$ consul members

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

メンバー

あなたはこのノードに他のノードを結合したい場合-

$ consul join <Node 2> <Node 3>

または、ノード2および3で次のコマンドを実行できます-

$ consul join <Node 1>

コマンドラインを使用する

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

  • agent -Consulエージェントを実行します。
  • configtest -構成ファイルを検証します。
  • event -新しいイベントを開始します。
  • exec -Consulノードでコマンドを実行します。
  • force-leave -クラスターのメンバーを強制的にクラスターから離脱させます。
  • info -オペレーターのデバッグ情報を提供します。
  • join -Consulエージェントをクラスターに参加させる。
  • keygen -新しい暗号化キーを生成します。
  • keyring -ゴシップ層の暗号化キーを管理します。
  • kv -キーと値のストアと対話します。
  • leave -Consulクラスターを終了し、無理なくシャットダウンする。
  • lock -ロックを保持するコマンドを実行します。
  • maint -ノードまたはサービスのメンテナンスモードを制御します。
  • members -Consulクラスターのメンバーを一覧表示します。
  • monitor -Consulエージェントからログをストリーミングします。
  • operator -Consulオペレーター向けのツールのクラスターを提供します。
  • reload -エージェントをトリガーして構成ファイルをリロードします。
  • rtt -ノード間のネットワーク往復時間を推定します。
  • snapshot -Consulサーバーの状態のスナップショットを保存、復元、検査します。
  • version -現在のConsulバージョンを出力します。
  • watch -領事の変更に注意してください。

領事テンプレート

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

consulテンプレートは、 /tmp/<ファイル名> .conf.tmpfl に作成されます。 Hashicorp Configuration Language (HCL)に従ってテンプレートが作成される言語。

このhttps://releases.hashicorp.com/consul-template/[page]からconsul-templateをダウンロードできます。

テンプレート

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

$ ./consul-template -h

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

テンプレート出力

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

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

デモのために、 nginx のサンプル構成を使用して、サービスとして使用します。 [[1]]

$ vim/tmp/nginx.conf.ctmpl

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

nginx

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

{{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 indexl;
   }
   location/stub_status {
      stub_status;
   }
   {{range services}} {{$name := .Name}}
   location/{{$name}} {
      proxy_pass http://{{$name}};
   }
   {{end}}
}

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

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

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

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

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

出力

領事-マイクロサービスの使用

この章では、MicroservicesがConsulと連携する方法を理解します。 また、次のコンポーネントがConsulに与える影響についても学習します。

  • ドッカーを使用する
  • サービス発見のための登録者の構築
  • rktとNomadを使用する

次に、これらのそれぞれについて詳しく説明します。

Dockerを使用する

開始する前に、*このセットアップは実稼働では使用しないでください*デモ目的でのみ使用されます。 Dockerはコンテナベースのサービスであり、これを使用してアプリケーションを簡単にデプロイできます。 Consulを使用するには、次のリンクの画像を使用します–0

[[2]]

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

$ docker pull progrium/consul

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

プルプログラム

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

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

また、プルごとに、ホスト名の名前を node1 に設定します。以下に示すように、独自のホスト名で* -hフラグ*を使用して、任意の名前に変更できます。

$ 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
*http://localhost:8500* でUIベースの出力を確認できます。 次のスクリーンショットは、UIベースの出力に関するより良いアイデアを提供します。

UIベース

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

Node1で

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

ここで、*-bootstrap-expect 3 *は、3つのピアが接続されるまでconsulサーバーが待機してから、自己ブートストラップして作業クラスターになることを意味します。

先に進む前に、コンテナを検査してコンテナの内部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

サービス発見のための登録者の構築

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

$ docker pull gliderlabs/registrator:latest

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

gliderlabs

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

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

gliderlabs

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

$ docker ps -a

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

docker ps

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

$ docker logs registrator

rktとNomadを使用する

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

Consulについては、Rkt Registratorを使用して、Consulでのサービス検出に取り組んでいます。 rktの対象となるこの特定の登録者プロジェクトは開発中であり、生産レベルでの使用にはお勧めできません

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

$ ./rkt

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

Rkt登録者

rktとConsulを試すには、https://github.com/r3boot/rkt-registratorをチェックしてください。

ノマドツール

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

Consul-ブートストラップとDNS

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

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

次に、これらのそれぞれについて詳しく説明します。

自動ブートストラップ

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

$ sudo consul info

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

自動ブートストラップ

このコマンドは、*実際の作業シナリオ*でのconsulの実際の作業を表示します。 Consulで動作するRaft Algorithmが表示されます。 自動ブートストラップコマンドは、次のコマンドを使用して表示することができます-

$ consul agent -server -data-dir = ”/tmp/consul” -bootstrap-expect 3
  • -devモードでは自動ブートストラップは実行できません。*

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

手動ブートストラップ

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

この場合、3ノードのconsulクラスターが構築されると仮定します。

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

  • 2つのノードでコマンドを実行する:ノードBとノードCでは、次のことができます-
$ consul join <Node A Address>
  • 1ノードでコマンドを実行する-
$ consul join <Node B Address> <Node C Address>

DNS転送を使用する

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

Consul DNSインターフェイスは、* SRVレコード*を介してサービスのポート情報を利用できるようにします。 コードに手動でロジックを追加しなくても、通常はIPアドレス情報のみに制限されます(つまり、 クエリするサービスのレコード)。

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

バインドの使用

バインド機能を使用して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; };
};

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

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

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

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

nameserver 127.0.0.1

DNSキャッシング

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

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

$ sudo apt-get install dnsmasq

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

dnsmasq

今、私たちは非常に簡単な構成を行うことができます-

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

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

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

$ dig @127.0.0.1 -p 8600 web.service.consul
*Dnsmasq* では、次のコマンドを使用する必要があります。
$ dig web.service.consul

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

web.service

Consul-クエリノード

この章では、次の機能を使用してノードを照会する方法を学習します-

  • digを使用する
  • Monitorコマンドを使用する
  • 監視コマンドを使用する
  • 外部サービスを登録する

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

Digを使用する

Consulは、127.0.0.1:8600で、consul内のDNSクエリをリッスンします。 サービスを提供するために利用可能なノードを決定する方法は、次のいずれかのチェックを使用しています-

  • 実行され、* nagios準拠のコード*を返すスクリプト。

  • 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

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

dig

Monitorコマンドの使用

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

私たちは次のコマンドを試してみましょう-

$ consul monitor

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

モニターコマンド

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

監視コマンドの使用

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

ウォッチコマンド

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

$ consul watch -type = service -service = consul

ウォッチタイプ

このトピックの詳細については、https://www.consul.io/docs/agent/watchesl [こちら]をクリックしてください。

外部サービスを登録する

登録されると、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と呼ばれるサービスを指定します。 このノードは、ポート80のhttp://www.amazon.com/[www.amazon.com]でURLを使用できるAmazonと呼ばれます。 consulの出力をチェックして、このサービスが正しくインストールされていることを確認してください。 これには、localhost:8500でブラウザウィンドウを開いてください。

外部サービスの登録

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

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

サービスの削除

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

サービスの削除

Consul-フェールオーバーイベント

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

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

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

単一クラスター障害

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

Consul-alertsは、Consul Healthチェックに基づいて通知とリマインダーを送信するための可用性の高いデーモンです。 このプロジェクトは、localhost:9000でデーモンとAPIを実行し、デフォルトのデータセンター(dc1)でローカルのconsulエージェント(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を使用するには、次のコマンドを使用してDocker Hubからイメージをプルします。

$ docker pull acaleph/consul-alerts

Consul-Alerts

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

  • コンテナ自体に組み込まれているConsul Agentを使用します。
  • 別のDocker Container上で実行されているConsul Agentを使用します。
  • Consul-alertsを使用して、リモートConsulインスタンスをリンクします。

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

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

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

$ 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 で言及されているように、Consulの *entrypoint をオーバーライドしています。 それに加えて、*-pフラグを使用して使用されるポート、フラグ-data-dirを使用するデータディレクトリ/data *、および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 Container上で実行されているConsul Agentの使用

ここでは、Dockerコンテナ上で実行される任意のタイプの領収書イメージを使用できます。 consul-alertsイメージを使用して、consulコンテナをconsul-alertsコンテナに簡単にリンクできます。 これは*-linkフラグ*を使用して行われます。

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

$ 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はClojure で書かれています。 残念ながら、デモでは、Jepsenのテストにはデータベースシステムとの膨大なレベルのクラスター形成が必要であるため、ここではカバーしません。

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

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

Jepsenテストの詳細については、https://aphyr.com/posts/281-call-me-maybe-carly-rae-jepsen-and-the-perils-of-network-partitions [こちら]をご覧ください。

複数のクラスター障害

複数クラスターフェールオーバーイベント中に、複数のデータセンターに展開されたクラスターは、お客様がサポートしているサービスをサポートできません。 Consulでは、このような状態の1つが発生したときに、Consulがそのような状態のサービスを有効にするのに役立つ機能を備えていることを確認できます。

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

  • ゴラン
  • 港湾労働者
  • 領事
  • Git

私たちは次のコマンドで始めましょう-

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

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

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

Git Clone

$ cd consul-replicate
$ make

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

複製

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

$ docker pull library/golang:1.7.4

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

Option Description
auth The basic authentication username (and optional password), separated by a colon. There is no default value.
consul* The location of the consul instance to query (may be an IP address or FQDN) with port.
max-stale The maximum staleness of a query. If specified, Consule will distribute work among all servers instead of just the leader. The default value is 0 (none).
ssl Use HTTPS while talking to Consul. Requires the consule server to be configured to server secure connections. The default value is false.
ssl-verify Verify certificates when connecting via SSL. This requires the use of -ssl. The default value is true.
syslog Send log output to syslog (in addition to stdout and stderr). The default value is false
syslog-facility The facility to use when sending to syslog. This requires the use of -syslog. The default is LOCAL
token The Consul API token. There is no default value.
prefix* The source prefix including the, with options destination prefix, separated by a colon(:). This option is additive and may be specified multiple times for multiple prefixes to replicate.
exclude A prefix to exclude during replication. This option is additive and may be specified multiple times for multiple prefixes to exclude.
wait The minium(:maximum) to wait for stability before replicating, separated by a colon(:). If the optional maximum value is omitted, it is assumed to be 4x the required minimum value. There is no default value.
retry The amount to time to wait if Consule returns an error when communicating with the API. The default value is 5 seconds.
config The path to a configuration file or directory of configuration files on disk, relative to the current working directory. Values specified on the CLI take precedence over values specified in the configuration file. There is no default value.
log-level The log level for output. This applies to the stdout/stderr logging as well as syslog logging (if eneabled). Valid values are "debug", "info", "warn, and "err". The default value is "warn".
once Run Consule Replicate once and exit (as opposed to the default behavior of daemon). (CLI-only)
version Output version information and quit. (CLI-only)

スナップショットを撮る

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

  • 領事スナップショット保存
  • Consulスナップショットエージェント
  • 領事スナップショット検査
  • Consul snapshot restore

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

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

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

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

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

スナップショット保存

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

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

Consul Snapshot Agent

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

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

Consul Snapshot Inspect

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

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

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

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

スナップショット検査

Consul Snapshot Restore

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

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

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

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

スナップショット復元

AWSでConsulを使用している場合、このプロジェクトは時間を節約するのに役立ちます-https://github.com/pshima/consul-snapshot。

Consul-UIの使用

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

Consul UISetup

Consulは、物事を簡単に管理できる便利なインターフェースを提供します。 任意のポートでconsulユーザーインターフェイスを簡単に起動できます。 Consul UIは3つの重要な部分に分割できます。

  • ACL -クラスターを簡単にロックするためのルールのセット
  • データセンター-データセンターを簡単に管理し、クラスターで作業できるようにします。
  • ノード-Consulクラスターが使用しているノードのクイックアップデート

Consul UIの使用

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

$ 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

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

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

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

エージェント

デフォルトでは、 http://localhost:8500/ui でUIを観察します。/uiの部分は、領事のHTTP APIと同じです。

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

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

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

progrium/consul

Consul UIの機能

Consul UIの閲覧を開始するには、次のような機能のいくつかを見てください-

  • ノード
  • ACL
  • キー/値
  • 設定
  • データセンター
  • サービス内容

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

ノード

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

UIダッシュボード

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

node1

Consulからいつでもノードを登録解除できます。 高度なコンサルクラスターの観点からノードを簡単に管理できます。

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

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

詳細については、https://jovandeginste.github.io/2016/05/04/turning-on-acl-s-in-our-consul-clusterl [こちら]を確認してください

ACLタブ

キー/値

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

キー/値

設定

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

設定

データセンター

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

サービス内容

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

Consul-AWSでのConsulの使用

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

AWSの機能

AWSでConsulを使用しているときに役立ついくつかの機能は次のとおりです-

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

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

AWSの展開

AWSを使用するには、そのためのVPCを作成することから始めます。 AWSに領事をデプロイするには、AWSサービスで提供されているクイックスタートテンプレートを使用します。 このテンプレートは、https://aws.amazon.com/quickstart/architecture/consul/で簡単に見つけることができます。

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

  • 3つのアベイラビリティーゾーンにわたるパブリックおよびプライベートサブネットを持つ VPC
  • * Seed Consulサーバー*および* Seedクライアント*と2つのAuto Scalingグループ。
  • 3つ、5つ、または7つのサーバーを作成することを選択できます。 クライアントの数はデフォルトで3に設定されていますが、ユーザーが構成できます。
  • Dnsmasq 。インストールの一部としてConsul用にインストールおよび構成されます。
  • bootstrap_expect オプションを使用するConsulクラスター。

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

Interconnected

AWSを使用する

ウェブコンソールを使用してAWSインフラストラクチャに既にサインインしていることを確認してください。 次に、次のhttps://aws.amazon.com/quickstart/architecture/consul/[URL]をブラウザーウィンドウに入力してください。 URLを入力してEnterキーを押すと、AWSウェブサイトが開きます。

AWSの使用

このデモでは、新しいVPC(Virtual Private Cloud)にデプロイすることを選択します。 [<awsregion&gt|https://<awsregion&gt ]; .console.aws.amazon.com/vpc/homeのリンクで、AWSのVPC管理をいつでも確認できます。 初めてのユーザーの場合、デフォルトの地域は米国の西オレゴンです。 したがって、https://us-west-2.console.aws.amazon.com/vpc/homeのURLに直接アクセスできます。

VPC管理

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

VPCサービス

上記のオプションをクリックすると、次のウィンドウに似た別のウィンドウが開くことがわかります。

スタックの作成

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

詳細を指定

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

構成

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

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

デフォルトでは、consulサーバーの数は3です。 consul環境でより多くのサーバーをテストするために、5に変更できます。 クイックスタート設定では、* S3バケット*も使用され、デフォルトでクイックスタート参照に名前が付けられていることがわかります。 変更が完了したら、画面の下部にある[次へ]ボタンをクリックします。

オプション

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

より高度なオプションについては、* advancedタブ*を選択してください。ここで、通知用にVPCのAmazon SNSを有効にできます。 詳細を完了したら、[次へ]オプションに進んでください。

レビュー

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

AWS管理コンソールのCloudFormation Stackセクションで出力を確認できます。 VPC出力ごとに、以下のスクリーンショットに示すように、AWSコンソールのVPCセクションでチェックアウトすることもできます。

CloudFormation

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