2017-10-15 12 views
-1

私は、クライアントから私のサービスの別のインスタンスに到着するまでにロードバランスソープリクエストを行いたいと考えています。私はクライアントを変更することはできませんし、要求のペイロードを調べて特定の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) 

答えて

0

は実際に私はちょうど私の構成で障害を発見しました。

第一)のluaスクリプトは体(txn.req)にアクセスしようとしたが、ボディはまだ時に到着していないことができないとき)バックエンドはHTTPモードで実行する必要があり、そのため私はbackend my_backend

第二に mode httpを追加しましたスクリプトが実行されます。スクリプトを実行する前にhaproxyに身体が到着するのを待たせてbackend my_backend

backend my_backend 
    mode http 
    option http-buffer-request 
    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 
関連する問題