HAProxy が久し振りの自称 HAProxy 芸人のかっぱです。
tl;dr
HAProxy 1.6 がリリースされたのを Twitter を介して知った。この 1.6 から Lua をサポートするようになったとのことで Lua は名前しか知らないけどドキュメントを参考にして試してみることにした。
参考
Lua とは
Lua の特徴
こちら を抜粋させて頂くと...
- クロスプロットフォーム
- 高速な動作
- 組み込みに特化
なるほど。
Hello Lua
後ほど。
HAProxy 1.6 と Lua
検証環境
# cat /etc/debian_version
8.2
Lua のビルドとインストール
# apt-get install make gcc libreadline-dev # cd /usr/local/src # curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz # tar zxf lua-5.3.0.tar.gz # cd lua-5.3.0 # make linux # make INSTALL_TOP=/usr/local/lua53 install
HAProxy のビルドとインストール
# apt-get install libpcre3-dev libssl-dev # cd /usr/local/src/ # wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.0.tar.gz # tar zxvf haproxy-1.6.0.tar.gz # cd haproxy-1.6.0 # make TARGET=linux2628 USE_OPENSSL=1 USE_PCRE=1 USE_LUA=1 LUA_LIB=/usr/local/lua53/lib/ LUA_INC=/usr/local/lua53/include/ # make install
make install
すると install-doc タスクでコケたので以下のように修正して回避。
# diff -u Makefile.bk Makefile --- Makefile.bk 2015-10-15 23:29:04.007615940 +0000 +++ Makefile 2015-10-15 23:29:13.637471208 +0000 @@ -798,7 +798,7 @@ install-doc: install -d "$(DESTDIR)$(DOCDIR)" - for x in configuration architecture haproxy-en haproxy-fr; do \ + for x in configuration architecture ; do \ install -m 644 doc/$$x.txt "$(DESTDIR)$(DOCDIR)" ; \ done
確認。
# haproxy -v [ALERT] 287/233108 (4351) : SSLv3 support requested but unavailable. HA-Proxy version 1.6.0 2015/10/13 Copyright 2000-2015 Willy Tarreau <willy@haproxy.org>
Lua スクリプトと HAProxy の設定
# cat hello_world.lua core.register_service("hello_world", "tcp", function(applet) applet:send("hello world\n") end)
- HAProxy の設定
# cat haproxy.cfg global lua-load hello_world.lua listen proxy bind 127.0.0.1:10001 tcp-request content use-service lua.hello_world
Hello Lua on HAProxy
- HAProxy の起動
# haproxy -f haproxy.cfg & [1] 4356 root@6ae3970b4075:/tmp# [ALERT] 287/233444 (4356) : SSLv3 support requested but unavailable. [WARNING] 287/233444 (4356) : config : missing timeouts for proxy 'proxy'. | While not properly invalid, you will certainly encounter various problems | with such a configuration. To fix this, please ensure that all following | timeouts are set to a non-zero value: 'client', 'connect', 'server'.
- 起動の確認
# ss -pl Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port nl UNCONN 0 0 rtnl:kernel * nl UNCONN 4352 0 tcpdiag:ss/4357 * nl UNCONN 768 0 tcpdiag:kernel * nl UNCONN 0 0 6:kernel * nl UNCONN 0 0 10:kernel * nl UNCONN 0 0 12:kernel * nl UNCONN 0 0 15:kernel * nl UNCONN 0 0 16:kernel * tcp LISTEN 0 128 127.0.0.1:10001 *:* users:(("haproxy",pid=4356,fd=4))
- アクセスしてみる
# curl localhost:10001
hello world
おお。
ということで...
本当にザクっと触ってみただけだが、HAProxy の設定をスクリプト言語で書けるようになったというのは色々と夢が広がる。振り分けの定義等も Lua で書けたりするのだろうか。引き続き、調査を続けたい。