私は、クライアントから私のサービスの別のインスタンスに到着するまでにロードバランスソープリクエストを行いたいと考えています。私はクライアントを変更することはできませんし、要求のペイロードを調べて特定のIDを抽出して、同じIDを持つすべての要求が同じインスタンスに終わるようにして、要求を固執したいと思っています。ハプロキシでのluaスクリプトの実行で "yield not allowed"が返される
私は、必要なペイロードと追加情報を調べるためのluaスクリプトを書いています。しかし、いくつかの理由で、すべての5-6th要求が接続を確立するために50-60msの待ち時間を持っている(間にリクエストが0msと待ち時間を有する)と私は
私はこの遅延を防止しにエラーを回避するにはどうすればよいOct 15 23:27:48 rp-proxy-p1 haproxy[30995]: Lua sample-fetch 'parseElement': yield not allowed.
Oct 15 23:27:48 rp-proxy-p1 haproxy[30995]: Lua sample-fetch 'parseElement': yield not allowed.
のようなエントリをログ参照します何が起こるのでしょうか?
私haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
lua-load /etc/haproxy/routing.lua
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
timeout connect 1000
timeout client 500000
timeout server 500000
frontend my_frontend
bind *:7001
default_backend my_backend
backend my_backend
option tcp-check
balance source
stick-table type string size 30000k expire 30m
stick on "lua.parseElement"
server server1 server1.domain.com:8080 check port 8080 weight 1
server server2 server2.domain.com:8080 check port 8080 weight 1
routing.lua
function parseElement(txn, salt)
local payload = txn.req:dup()
local trx_id = payload.match(payload, "<transaction_id>(.-)</transaction_id>")
core.Info("value: "..trx_id)
return trx_id
end
core.register_fetches("parseElement", parseElement)