Simple MySQL Proxy Failover
March 27th, 2008 - by Sheeri Cabralmysql-proxy defaults to round-robin load balancing. There are fancy tricks around to get mysql-proxy to balance connections based on how many idle connections there are in a proxy-based connection pool.
But there is no code that I found that would simply load balance based on “always go to one server, go to another server only when the first server is down.”
Well, I spent way too long figuring this out today, again running into the problem where the manual hasn’t been updated. I have indeed made a Forge snippet of this code, but it does not hurt to post it here.
This was in fact taken from http://jan.kneschke.de/projects/mysql/mysql-proxy-learns-r-w-splitting, which I referenced above as having the fancy trick above — but there is one very important difference — the internal structure proxy.servers has been changed to proxy.backends. Sadly, the manual page for the Internal Structures has not been updated to reflect this.
At least now there’s a comment on the documentation page that states that.
function connect_server()
for i = 1, #proxy.backends do
local s = proxy.backends[i]
if s.state ~= proxy.BACKEND_STATE_DOWN then
proxy.connection.backend_ndx = i
-- print ("connecting to " .. i)
return
end
end
end
function read_query(packet)
for i = 1, #proxy.backends do
local s = proxy.backends[i]
if s.state ~= proxy.BACKEND_STATE_DOWN then
proxy.connection.backend_ndx = i
-- print ("connecting to " .. i)
return
end
end
end
Tags: fail over • failover • load balancer • load balancing • MySQL • proxy







March 31st, 2008 at 11:18 am
Hi Sheeri .
Thanks for your posting.
I got a Problem. It does not work mysql-proxy 0.6.1 on RHEL4.
Which version of mysql-proxy do you use for testing your lua script?
Thanks.
yw kim.
March 31st, 2008 at 11:58 am
YoungWoo — I’m using
mysql-proxy-0.6.0-solaris10-x86_64
Can you give more details on how it does not work? ie, are you getting a syntax error with Lua, or are you finding that it does not work with failover? If that’s the case, what’s the behavior you’re seeing — are you seeing it do round-robin load balancing? Have you set up 2 backend servers with the –proxy-addresses startup option to mysql-proxy?
March 31st, 2008 at 9:02 pm
Sheeri,
Thanks for your advice.
So, I tested mysql-proxy 0.6.0.
As a result, It works fine with 0.6.0. :-)
In my case, I have two mysql servers with master-master replication scheme.
I think, mysql-proxy(0.6.1) does not recognize backends status(UP or DOWN).
Thanks.
Regards,
yw kim.