Я применил эти настройки: haproxy.cfg
lua-load /etc/haproxy/scripts/choosebackend.lua
frontend psql-front
bind *:5432
mode tcp
use_backend %[lua.choose_backend]
backend backend1
mode tcp
balance roundrobin
server pg1 111.111.111.111:5432 check port 5432
backend backend2
mode tcp
balance roundrobin
server pg2 222.222.222.222:5432 check port 5432
choosebackend.lua
luasql = require "luasql.postgres"
env = luasql.postgres()
con = assert (env:connect('postgres', 'postgres', 'postgres','333.333.333.333','5432')) --master
backend = function(txn)
res = assert (con:execute('select client_addr from pg_stat_replication order by replay_lag asc limit 1'))
row = res:fetch ({}, "a")
while row do
ip = string.format("%-12s", row.client_addr)
row = res:fetch (row, "a")
end
result = "backend1"
if ip == '111.111.111.111' then
result = "backend1"
elseif ip == '222.222.222.222' then
result = "backend2"
end
return result
end
core.register_fetches("choose_backend", backend)
Haproxy должен быть скомпилирован из источникапотому что по умолчанию поддержка LUA в нем отключена. Кроме того, вам необходимо установить luarocks и luasql-postgres