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

     
    • 最終更新日時:2018/12/22 10:33:04

    Embed
    621px-Elasticsearch_Cluster_August_2014.png

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

    Pen
    UlricE/pen: 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 1

    2018-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を実行する必要がある、ぐらいでしょうか。
    関連記事


    Pagination

    Trackback

    Trackback URL

    https://kometchtech.blog.fc2.com/tb.php/2199-d1549b5e

    Comment

    Post Your Comment

    コメント登録フォーム
    公開設定

    Utility

    Profile

    kometchtech

    Author:kometchtech
    なんちゃってエンジニアです。
    2009年10月から業務都合により大阪勤務になりました。
    2010年1月、HYBRID W-ZERO3を購入しました。
    2010年11月、HTC Desire HDを購入しました。
    2012年2月、都内の会社に転職しました。
    2012年5月、HTC One Xを購入しました。
    2012年8月、事情により休職しました。
    2012年8月、SONY Xperia SXを購入しました。
    2013年1月、一身上の都合により退職しました。
    2014年3月、都内の会社に就職しました。
    2016年8月、HPC系の会社に転職しました。
    2018年6月、Xperia XZ1 compactに機種変。

    Amazonほしい物リスト
    何か問題などありましたら、こちらまで。 Twitter:@kometchtech follow us in feedly

    カレンダー

    02 | 2019/03 | 04
    - - - - - 1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    31 - - - - - -

    記事リスト

    最新の記事

    全記事(数)表示

    全タイトルを表示

    バロメーター

    カテゴリー

    カテゴリークラウド

    アーカイブ

    検索フォーム

    FCカウンター

    オンライン

    現在の閲覧者数:

    Amazonアソシエイト

    スポンサードリンク

    月間ページランキング

    ブログパーツ

    サイトランキング