Mysql实例用HAProxy来检测MySQL复制的延迟的教程
《Mysql实例用HAProxy来检测MySQL复制的延迟的教程》要点: MYSQL学习?在MySQL世界里,HAProxy 通常来作为软件负载均衡器使用.彼得.博罗什在过去的邮件中解释了如何使用percona xtradb集群(pxc)来对其设置.所以它只发送查询到可应用的节点.同样的办法可用于常规主从设置来读取负载并分散到多个从节点.不过,使用MySQL复制,另一个因素开始发挥作用:复制延迟.在这种情况下,被提及到的 Percona xtraDB 集群以及我们提出只返回“向上”或者“向下”的检查办法行不通.我们将希望依赖其复制延迟来调整内部Haproxy的一个权重.这就是我们要做的在这篇文章中使用HAProxy 1.5. MYSQL学习HAProxy的代理检测 MYSQL学习 MYSQL学习代理是什么呢?它是一个简单的可以拜访给定端口上TCP连接的程.所以,如果我们要在一台MySQL服务器上运行代理,这需要:
MYSQL学习 MYSQL学习
$ less agent.php
<!--?php
// Simple socket server
// See http://php.net/manual/en/function.stream-socket-server.php
$port = $argv[1];
$mysql_port = $argv[2];
$mysql = "/usr/bin/mysql";
$user = 'haproxy';
$password = 'haproxy_pwd';
$query = "SHOW SLAVE STATUS";
function set_weight($lag){
# Write your own rules here
if ($lag == 'NULL'){
return "down";
}
else if ($lag < 10){
return "up 100%";
}
else if ($lag -->= 10 && $lag < 60){
return "up 50%";
}
else
return "up 5%";
}
set_time_limit(0);
$socket = stream_socket_server("tcp://127.0.0.1:$port",$errno,$errstr);
if (!$socket) {
echo "$errstr ($errno)
n";
} else {
while ($conn = stream_socket_accept($socket,9999999999999)) {
$cmd = "$mysql -h127.0.0.1 -u$user -p$password -P$mysql_port -Ee "$query" | grep Seconds_Behind_Master | cut -d ':' -f2 | tr -d ' '";
exec("$cmd",$lag);
$weight = set_weight($lag[0]);
unset($lag);
fputs ($conn,$weight);
fclose ($conn);
}
fclose($socket);
}
?>
MYSQL学习如果你希望脚本从端口6789发出连接到运行在3306端口上的MySQL实例,这样运行: MYSQL学习
$ php agent.php 6789 3306
MYSQL学习你还必要指定MySQL用户: MYSQL学习
mysql> GRANT REPLICATION CLIENT ON *.* TO 'haproxy'@'127.0.0.1' IDENTIFIED BY 'haproxy_pwd';
MYSQL学习代理启动后,你可以检测一下它是否正常运行: MYSQL学习
# telnet 127.0.0.1 6789
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
up 100%
Connection closed by foreign host.
MYSQL学习假设它运行在本地的应用服务器上,有两个复制正在运行(192.168.10.2和192.168.10.3),应用的读哀求在3307端口,你需要在HAProxy中配置一个前端和后端,像这样: frontend read_only-front bind *:3307 mode tcp option tcplog log global default_backend read_only-back backend read_only-back mode tcp balance leastconn server slave1 192.168.10.2 weight 100 check agent-check agent-port 6789 inter 1000? rise 1? fall 1 on-marked-down shutdown-sessions server slave2 192.168.10.3 weight 100 check agent-check agent-port 6789 inter 1000? rise 1? fall 1 on-marked-down shutdown-sessions MYSQL学习现在所有的都准备好了,现在让我们看看怎么使用HAProxy来动态的改变重滞服务器,代码如下: # Slave1 $ mysql -Ee "show slave status" | grep Seconds_Behind_Master ??????? Seconds_Behind_Master: 0 # Slave2 $ mysql -Ee "show slave status" | grep Seconds_Behind_Master ??????? Seconds_Behind_Master: 0 # HAProxy $ echo "show stat" | socat stdio /run/haproxy/admin.sock | cut -d ',' -f1,2,18,19 # pxname,svname,status,weight read_only-front,FRONTEND,OPEN, read_only-back,slave1,UP,100 read_only-back,slave2,BACKEND,200? MYSQL学习时延1 # Slave1 $ mysql -Ee "show slave status" | grep Seconds_Behind_Master ??????? Seconds_Behind_Master: 25 # Slave2 $ mysql -Ee "show slave status" | grep Seconds_Behind_Master ??????? Seconds_Behind_Master: 0 # echo "show stat" | socat stdio /run/haproxy/admin.sock | cut -d ',50 read_only-back,150? MYSQL学习时延2 # Slave1 $ mysql -Ee "show slave status" | grep Seconds_Behind_Master ??????? Seconds_Behind_Master: 0 # Slave2 $ mysql -Ee "show slave status" | grep Seconds_Behind_Master ??????? Seconds_Behind_Master: NULL # echo "show stat" | socat stdio /run/haproxy/admin.sock | cut -d ',DOWN (agent),100? MYSQL学习结论 MYSQL学习在HAProxy 1.5中代理检查是一个很好的新增功能. 在上面的设置中是简单的: 举例来说,如果 HAProxy 连接代理失败,它就不会被标记. 推荐与代理检查一起,坚持常规的健康度检查. MYSQL学习细心的读取者们(reads)将会注意到这个配置,如果在所有节点上都被复制,HAProxy将会停止发送给读取者. 这可能不是最好的办理方案.但可能的选项是:停止代理并标记服务器为UP,使用状态套接字(socket)或者添加主节点作为备份服务器. MYSQL学习最后一点,使用Percona工具集的pt-heartbeat替代Seconds_Behind_Master,您可以编纂代理的代码,可以对复制的延迟进行测量 . 编程之家PHP培训学院每天发布《Mysql实例用HAProxy来检测MySQL复制的延迟的教程》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |