すいません、引き続き consul-haproxy のかっぱ(@inokara)です。
おさらい
- あの hashicorp のツールです(これだけでも導入の障壁は下がること請け合い)
- consul から情報を取得して HAProxy の設定を動的生成します
- ついでに HAProxy のリロードも請負ます
- Consul とはなんぞやは @zenbutsu さんの qiita 記事やブログは要チェック!
動作としては…
README ベースだと…
- Consul のエージェントに
backend_name=tag.service@datacenter:port
な感じでバックエンド対象のノードを問い合わせる - あらかじめ用意しておいたテンプレート内のタグにマッチさせて取得したノードを展開する
非常にシンプルだと思いますが、ポイントはやはり問い合わせ先に Consul が居るというところでしょうか。
うさげ(Usage)
Usage をオレオレ和訳。
CLI flags
オプション | 内容 |
---|---|
-addr | Consul エージェントのアドレスを指定する / デフォルトは 127.0.0.1:8500 |
-backend | HAProxy のバックエンドアドレスを指定する / 複数指定可能 |
-dry | Dry Run / Config ファイルを標準出力に表示する |
-f | 設定ファイルのパスを指定する |
-in | テンプレートファイルのパスを指定する / 郷のテンプレートシステムで記載可能 |
-out | HAProxy の設定ファイル書き出し先を指定する |
-reload | HAProxy の設定ファイルを書きだした後で HAProxy をリロードする |
バックエンドの指定
以下のようなシンタックスで指定します。
backend_name=tag.service@datacenter:port
テンプレート
テンプレートは上記のように郷のテンプレートシステムを利用可能です。
global daemon maxconn 256 defaults mode tcp timeout connect 5000ms timeout client 60000ms timeout server 60000ms listen http-in bind *:8000{{range .c}} {{.}}{{end}}
例えば…
以下のように実行した場合…
./consul-haproxy_linux_amd64 -addr=demo.consul.io -in in.conf -backend "c=consul@nyc1:80" -backend "c=consul@sfo1:80" -dry
demo.consul.io をエージェントとしてバックエンドとなるノードの条件を指定(-backend “c=consul@nyc1:80” -backend “c=consul@sfo1:80″)して、in.conf テンプレートを利用して HAProxy の設定を生成します。
出力は下記のようになります。
global daemon maxconn 256 defaults mode tcp timeout connect 5000ms timeout client 60000ms timeout server 60000ms listen http-in bind *:8000 server 0_nyc1-consul-1_consul 192.241.159.115:80 server 0_nyc1-consul-3_consul 198.199.77.133:80 server 0_nyc1-consul-2_consul 192.241.158.205:80 server 1_sfo1-consul-1_consul 107.170.195.169:80 server 1_sfo1-consul-3_consul 107.170.195.158:80 server 1_sfo1-consul-2_consul 162.243.155.82:80
なぜ上記のように展開されるかについては先述の郷のテンプレートシステムを読み解く必要があります。
consul-haproxy の魅力と疑問
consul-haproxy の魅力
- Consul と併用することで HAProxy のバックエンド環境を柔軟にスケールさせることが出来る
ちょい疑問
- 動的に指定出来るのは Backend のみ?
- frontend も出来ると嬉しい
- Consul 側に frontend と backend の関連性を持たせておきたいなあとか…
類似ツール?
- Synapseと比較するとバックエンド情報を保存する環境として Consul オンリー
- Synapse は Apache/zookeeper になるけど
元記事は、こちらです。