すいません、引き続き consul-haproxyかっぱ@inokara)です。

おさらい

consul-haproxy とは

  • あの 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 オンリー
  • SynapseApache/zookeeper になるけど

元記事は、こちらです。