《Mysql實例用HAProxy來檢測MySQL復制的延遲的教程》要點:
本文介紹了Mysql實例用HAProxy來檢測MySQL復制的延遲的教程,希望對您有用。如果有疑問,可以聯系我們。
MYSQL學習?在MySQL世界里,HAProxy 通常來作為軟件負載均衡器使用.彼得.博羅什在過去的郵件中解釋了如何使用percona xtradb集群(pxc)來對其設置.所以它只發送查詢到可應用的節點.同樣的辦法可用于常規主從設置來讀取負載并分散到多個從節點.不過,使用MySQL復制,另一個因素開始發揮作用:復制延遲.在這種情況下,被提及到的 Percona xtraDB 集群以及我們提出只返回“向上”或者“向下”的檢查辦法行不通.我們將希望依賴其復制延遲來調整內部Haproxy的一個權重.這就是我們要做的在這篇文章中使用HAProxy 1.5.
MYSQL學習HAProxy的代理檢測
MYSQL學習
HAProxy 1.5運行我們運行一個代理檢測,這是一項可以添加到常規健康檢測項的檢測.代理檢測的好處是返回值可以是‘up'或 ‘down',但也可以是個權重值.
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中配置一個前端和后端,像這樣:
?
MYSQL學習現在所有的都準備好了,現在讓我們看看怎么使用HAProxy來動態的改變重滯服務器,代碼如下:
??
MYSQL學習時延1
??
MYSQL學習時延2
??
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全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9502.html