目次
昨年の11月入社の佐藤です。
今回は入社して初めて触ったツールのconsulについて学習していきたいと思います。
Consulとは?
Consulは、分散システムのためのオープンソースのサービスメッシュ、キー/値ストア、および一貫性のあるサービス発見と監視を提供するツールです。HashiCorp社によって開発され、広く使われています。マイクロサービスアーキテクチャやクラウドネイティブなアプリケーションの開発において、以下のような役割を果たします。
- サービスディスカバリとロードバランシング: Consulは、サービスディスカバリのためのDNSまたはHTTPエンドポイントを提供し、新しいサービスの登録や古いサービスの削除を自動的に検出します。これにより、サービス間の通信をシームレスにルーティングし、負荷分散を実現できます。
- 分散キー/値ストア: Consulは、分散キー/値ストアを提供し、アプリケーションの設定、フラグ、機能トグルなどのデータを保存できます。この機能は、設定管理やフィーチャーフラグの切り替えなどの用途に使用されます。
- 健康監視とヘルスチェック: Consulは、サービスの健康状態を監視し、ヘルスチェックを定期的に実行して、サービスの可用性を確保します。また、健康状態に変更があった場合には、アラートを発生させることも可能です。
これらの機能を組み合わせることで、分散システムの管理、監視、およびセキュリティの強化を実現することができます。
Consulの基本的な使い方
Consulの基本的な使い方を理解するには、次のステップに従います。
- Consulのインストールとセットアップ: オフィシャルのドキュメントを参照して、Consulをインストールし、セットアップします。通常、Consul Agentを各ノードにインストールし、起動します。
- サービスの登録とディスカバリ: Consul Agentが実行されている各ノードでサービスを登録し、他のサービスから利用できるようにします。これには、サービスの名前、アドレス、ポートなどを指定します。
- キー/値ストアの使用: Consulのキー/値ストアを使用して、アプリケーションの設定やデータを保存します。キー/値ストアに値を保存し、取得する方法を学びます。
- 健康監視とヘルスチェック: サービスの健康状態を監視し、ヘルスチェックを定期的に実行して、サービスの可用性を確保します。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が登録され、ヘルスチェック追加されてることを確認できました。
基本的な操作が学習できたので今回はこの辺で終わりたいと思います。