![HaProxy 在一定时间间隔内重定向 Mysql 流量](https://linux22.com/image/702986/HaProxy%20%E5%9C%A8%E4%B8%80%E5%AE%9A%E6%97%B6%E9%97%B4%E9%97%B4%E9%9A%94%E5%86%85%E9%87%8D%E5%AE%9A%E5%90%91%20Mysql%20%E6%B5%81%E9%87%8F.png)
我有一个带有 HaProxy 的 MariaDB 集群。由于 cronjobs 工作繁重,我需要每天在 07.00-07.10 之间将我的客户端重定向到其他机器。例如,我有 3 个服务器,ip 分别为 192.168.1.2、192.168.1.3、192.168.1.4。在 07.00-07.10 之间,我的 192.168.1.1 应用服务器不应使用 192.168.1.2。我该怎么做?
答案1
我认为最简单的方法是使用 haproxy-agent。例如:
haproxy 部分:
listen mysql
bind *:3306
mode tcp
option tcplog
balance leastconn
default-server port 3306 agent-check agent-port 6789 weight 100 inter 1000 on-marked-down shutdown-sessions
server server1 192.168.1.2 check
server server2 192.168.1.3 check
server server3 192.168.1.4 check
mysql 主机上的 /etc/xinet.d/haproxy-agent:
service haproxy-agent
{
disable = no
flags = REUSE
log_on_failure += USERID
port = 6789
server = /usr/local/bin/haproxy-agent
socket_type = stream
type = UNLISTED
user = nobody
wait = no
}
在/usr/local/bin/haproxy-代理:
#!/bin/bash
RES="up 100%"
TIME=$(date "+%H%M" | sed 's/^0\+//')
[[ "${TIME}" -ge 700 && "${TIME}" -le 710 ]] && RES="down"
echo "${RES}"
当然,代理代码应该更智能一些,不会重叠关闭 RDBMS 主机。顺便说一句,代理响应对于 haproxy 来说是可选的,因此如果它没有响应 - 好的,haproxy 会忽略这个事实。