HAProxy が久し振りの自称 HAProxy 芸人のかっぱです。

tl;dr

blog.haproxy.com

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 

Lua スクリプトと HAProxy の設定

  • Lua スクリプト
# cat hello_world.lua
core.register_service("hello_world", "tcp", function(applet)
   applet:send("hello worldn")
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 で書けたりするのだろうか。引き続き、調査を続けたい。

元記事はこちら

(超メモ)HAProxy 1.6 で Lua がサポートされたので触ってみた