我有两个MySQL服务器,并且复制是双向配置的。与数据库的连接由HAProxy处理。任何时候,一个mysql服务器将成为主要服务器(接受所有连接),而另一个将成为备用服务器。截至目前,haproxy.cfg中的后端池位于以下
# define frontend and backend servers
frontend mysql-in
bind *:3306
default_backend mysqlservers
backend mysqlservers
mode tcp
server mysqldb_01 X.X.X.1:3306 check
server mysqldb_02 X.X.X.X.2:3306 check backup
但是此检查不知道从属延迟。我想让haproxy从属延迟知道,这样我就不会处于haproxy将数据库连接路由到我的备用节点的情况,该备用节点仍然需要在中继日志中应用一些事务。
偶然发现了这个博客,该博客解释了我们如何利用代理检查来使haproxy复制延迟有效。 https://blog.pythian.com/haproxy-mysql-lag-awareness-via-systemd/
listen mysql-secondary-slaves
bind :53307
option httpchk
option tcplog
mode tcp
server po-slave1 X.X.X.1:53306 check port 9876 inter 12000 rise 3 fall 3 on-marked-down shutdown-sessions
server po-slave1 X.X.X.2:53306 check port 9876 inter 12000 rise 3 fall 3 on-marked-down shutdown-sessions
现在,通过这种方法,haproxy通过运行在我的mysql主机中的代理检查mysql的运行状况和复制滞后。
我担心的是,如果数据库主机中作为服务运行的代理由于某种原因崩溃或关闭,该怎么办?我的代理人现在认为该主机中的MySQL服务不可用。
现在问我一个问题:
有没有办法对我的后端mysql服务器进行运行状况检查和代理检查,并且仅当两个条件都满足时,才让haproxy标记服务器的启动或关闭吗?
谢谢