[linux][udp][負荷分散] C言語で書かれたミニマルなロードバランサー「pen」を使用してみた

AIX、UNIX、LinuxNetwork
621px-Elasticsearch_Cluster_August_2014

相変わらずUDPの(主にDNSの問い合わせ)ロードバランスができるツールを探しているのですが、その中で非常にサイズが小さく軽量なツールである「pen」というのを見つけたので使用してみました。

chnagelogを見ると2000年から始まっているようで、このあたりのツールとしても古株なのではないかと思います。

READMEにも書かれているように、ロードバランサーとしての基本的な機能は実装されていますが、バージョンとしては1未満なので、実用はどうなのでしょうか。

関連のある外部パッケージもOpenSSL(またはlibressl)ぐらいです。この辺りは軽くてありがたいです。
ポーリングに関しても基本的にはepoll、またはpoll、*BSDの場合はkqeueが使用できます。
ただ、APIは実装されていないようで、代わりにpenctlというコマンドが実装されています。この辺りは開発が始まった年代から考えるとそうなのかなと。

ファイルはtagが切られていないので、以下のWebサイトからダウンロードするのが良さそうです。

Index of /pub/pen / http://siag.nu/pub/pen/

buildすると以下のようにするだけでとりあえずは使用できます。

./pen -dfU 53 8.8.8.8:53

-dはデバッグ、-fはプロセスをフォアグラウンドで実行、-UはUDPで待ち受け、の意味です。使えるオプションは多いので、helpまたはmanを確認するようにしてください。

configファイルを作成して、それを読み込むようにもできるのですが、記述方法が独特で、こちらはpenctlで指定できるオプションを羅列する形になります。これはpenctlのmanを見た方が良いです。

listen :::53
server 0 address 8.8.8.8 port 53
server 1 address 1.1.1.1 port 53
roundrobin
socket 4
idle_timeout 10
tracking 12018-12-21 16:10:14: read_cfg(/etc/pen/pen_auth.conf)
2018-12-21 16:10:14: do_cmd: server 0 address 8.8.8.8
2018-12-21 16:10:14: pen_aton returns 0
address family = 2
2018-12-21 16:10:14: do_cmd: server 1 address 1.1.1.1
2018-12-21 16:10:14: pen_aton returns 1
address family = 2
2018-12-21 16:10:14: Before: conns = 0, connections_max = 0, clients = 0, clients_max = 0
2018-12-21 16:10:14: expand_conntable(500)
2018-12-21 16:10:14: After: conns = 0xaaaad7d43020, connections_max = 500, clients = 0xffffa15d5020, clients_max = 2048
2018-12-21 16:10:14: pen 0.35.0 starting
2018-12-21 16:10:14: servers:
2018-12-21 16:10:14: 0 8.8.8.8:53:0:0:0:0
2018-12-21 16:10:14: 1 1.1.1.1:53:0:0:0:0
:::1153

実行中のpenに対して、control portを設定することで、外部からpenctlコマンドを実行する子ができます。

ちなみにdebugの-dは複数設定できるので、2個とか3個とか付与すると、epollとかラウンドロビンしている状態の動作を確認することができます。

Docker containerを用意して試用しているのですが、ほとんどCPUの負荷が上がらなくて不安になるのですが、少なくとも動作しているのは確認しています。個人で試用しているだけなので、どこまでの負荷に耐えられるのかなーと気にはなっているのですが、テスト環境を用意できず・・・

惜しむらくは、reuseportが実装されていないこと、マルチポートには対応していないので、必要なサービスごとにpenを実行する必要がある、ぐらいでしょうか。

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました