はじめに
先日、以下のような記事を書きましたが、Nginx以外のロードバランサーツールはないかと探してみたところ、golang製のロードバランサーが見つかったので使用してみました。
GitHub - yyyar/gobetween: :cloud: Modern & minimalistic load balancer for the Сloud era
:cloud: Modern & minimalistic load balancer for the Сloud era - yyyar/gobetween
L4バランサーで、各種プロトコルに対応、設定ファイルのフォーマットもtomlとjsonに対応、またREST APIも用意され、バックエンドとの接続についてはリストなどを用意することもでき、またconsulやDocker、LXDとも連携して、自動的にバックエンドに組み込むなど、柔軟に設定できるようになっています。フットプリントも40MB程度と小さめです。
また、ロードバランスとの性能について、公式のドキュメントではNginxにやや劣る程度とされています。
Performance tests · yyyar/gobetween Wiki
とりあえず前回のようにロードバランスする設定を書いてみました。書式フォーマットはtomlです。
ちなみに確認環境は以下の通り。
確認環境
$ gobetween -v 2018/12/09 06:26:15 gobetween v0.6.1 0.6.1
設定内容
[logging] level = "info" output = "stdout" [api] enabled = false bind = ":8888" cors = false [servers.default] bind = ":1053" protocol = "udp" balance = "roundrobin" max_connections = 0 client_idle_timeout = "10m" backend_idle_timeout = "10m" backend_connection_timeout = "5s" [servers.default.udp] max_requests = 0 max_responses = 0 [servers.default.discovery] failpolicy = "keeplast" interval = "0s" timeout = "5s" kind = "static" static_list = [ "1.1.1.1:53", "1.0.0.1:53", "9.9.9.9:53", "9.9.9.10:53" ] [servers.auth] bind = ":1153" protocol = "udp" balance = "roundrobin" max_connections = 0 client_idle_timeout = "10m" backend_idle_timeout = "10m" backend_connection_timeout = "5s" [servers.auth.discovery] failpolicy = "keeplast" interval = "0s" timeout = "5s" kind = "static" static_list = [ "192.168.1.2:53" ] [servers.default.access] default = "deny" rules = [ "allow 127.0.0.1", "allow ::1", "allow 192.168.1.0/24", ] [servers.auth.access] default = "deny" rules = [ "allow 127.0.0.1", "allow ::1", "allow 192.168.1.0/24", ]
ここではdefaultとauthと2つのパターンで振り分けるようにしています。それぞれに設定をすることができるので、こちらも柔軟に設定できるかなと思います。
ちなみに設定ファイルの読み込みですが、gobetweenはローカルにファイルを配置しなくても、webからの読み込みや、consul KVSからの読み込みにも対応しているので、管理もしやすいかなと思います。
Configuration · yyyar/gobetween Wiki
ちょっと残念なのは、reloadが無いっぽいので、接続断が発生しちゃうことでしょうか。