grasys blog

[Consul入門]Consulの基本的な使い方について

昨年の11月入社の佐藤です。

今回は入社して初めて触ったツールのconsulについて学習していきたいと思います。

Consulとは

Consulは、分散システムのためのオープンソースのサービスメッシュ、キー/値ストア、および一貫性のあるサービス発見と監視を提供するツールです。HashiCorp社によって開発され、広く使われています。マイクロサービスアーキテクチャやクラウドネイティブなアプリケーションの開発において、以下のような役割を果たします。

  • サービスディスカバリとロードバランシング: Consulは、サービスディスカバリのためのDNSまたはHTTPエンドポイントを提供し、新しいサービスの登録や古いサービスの削除を自動的に検出します。これにより、サービス間の通信をシームレスにルーティングし、負荷分散を実現できます。
  • 分散キー/値ストア: Consulは、分散キー/値ストアを提供し、アプリケーションの設定、フラグ、機能トグルなどのデータを保存できます。この機能は、設定管理やフィーチャーフラグの切り替えなどの用途に使用されます。
  • 健康監視とヘルスチェック: Consulは、サービスの健康状態を監視し、ヘルスチェックを定期的に実行して、サービスの可用性を確保します。また、健康状態に変更があった場合には、アラートを発生させることも可能です。

これらの機能を組み合わせることで、分散システムの管理、監視、およびセキュリティの強化を実現することができます。

Consulの基本的な使い方

Consulの基本的な使い方を理解するには、次のステップに従います。

  1. Consulのインストールとセットアップ: オフィシャルのドキュメントを参照して、Consulをインストールし、セットアップします。通常、Consul Agentを各ノードにインストールし、起動します。
  2. サービスの登録とディスカバリ: Consul Agentが実行されている各ノードでサービスを登録し、他のサービスから利用できるようにします。これには、サービスの名前、アドレス、ポートなどを指定します。
  3. キー/値ストアの使用: Consulのキー/値ストアを使用して、アプリケーションの設定やデータを保存します。キー/値ストアに値を保存し、取得する方法を学びます。
  4. 健康監視とヘルスチェック: サービスの健康状態を監視し、ヘルスチェックを定期的に実行して、サービスの可用性を確保します。Consulのヘルスチェックの設定と監視方法を学びます。

以上のステップを通じて、Consulの基本的な使い方を理解することができます。これにより、分散システムの管理と監視を効果的に行うための基礎を築くことができます。

今回は検証のために以下のdocker-compose.yamlを作りました

version: '3'
services:
  consul:
    image: hashicorp/consul
    ports:
      - "8500:8500"
    command: "consul agent -server -ui -data-dir /tmp -bootstrap-expect=1 -client=0.0.0.0"

  nginx:
    image: nginx
    ports:
      - "80:80"

起動したらnginxのコンテナに入ります

$ docker compose up
$ docker exec -it <nginxのコンテナのid> bash

その後consulの設定をします。

$ apt-get update
$ apt-get install wget unzip
$ wget https://releases.hashicorp.com/consul/1.18.0/consul_1.18.0_linux_amd64.zip
$ unzip consul_1.18.0_linux_amd64.zip
$ mv consul /usr/local/bin/

// nginxのnodeをconsulにjoinさせる
$ consul agent -retry-join=consul -data-dir=/tmp

consul membersにnginxのnodeが追加されることが確認できます

% docker exec -it <consulのコンテナのid> consul members
Node          Address          Status  Type    Build   Protocol  DC   Partition  Segment
f344cb05700e  172.21.0.2:8301  alive   server  1.18.0  2         dc1  default    <all>
e4892b8c6f7c  172.21.0.3:8301  ailve  client  1.18.0  2         dc1  default    <default>

実験としてnginxのcontainerをストップさせてみます

$ docker compose stop nginx

ステータスがfailedに変わりました(確認が終わったらもう一度nginxを起動させます)

% docker exec -it <consulのコンテナのid>consul members
Node          Address          Status  Type    Build   Protocol  DC   Partition  Segment
f344cb05700e  172.21.0.2:8301  alive   server  1.18.0  2         dc1  default    <all>
e4892b8c6f7c  172.21.0.3:8301  failed  client  1.18.0  2         dc1  default    <default>

次にnginxをサービスとして追加し、ヘルスチェックを追加します

$ docker exec -it <nginxのコンテナのid> bash
$ mkdir -p /etc/consul.d
$ cd /etc/consul.d
$ cat service.json
$ cat <<EOF > service.json
{
	"service": {
		"name": "nginx"
	}
}

$ cat <<EOF > check.json
{
  "check": {
    "id": "web",
    "name": "HTTP API on port web",
    "http": "http://localhost:80/",
    "method": "GET",
    "interval": "10s",
    "timeout": "1s"
  }
}
EOF

consul agent -retry-join=consul -data-dir=/tmp -config-dir=/etc/consul.d

http://localhost:8500にアクセスし、services>nginxを選択します

consul uiを見るとserviceにnginxが登録され、ヘルスチェック追加されてることを確認できました。

基本的な操作が学習できたので今回はこの辺で終わりたいと思います。


採用情報
お問い合わせ