国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

用HAProxy來檢測MySQL復(fù)制的延遲的教程

2024-07-24 12:46:15
字體:
供稿:網(wǎng)友

 在MySQL世界里,HAProxy 通常來作為軟件負(fù)載均衡器使用。彼得.博羅什在過去的郵件中解釋了如何使用percona xtradb集群(pxc)來對其設(shè)置。所以它只發(fā)送查詢到可應(yīng)用的節(jié)點(diǎn)。同樣的方法可用于常規(guī)主從設(shè)置來讀取負(fù)載并分散到多個從節(jié)點(diǎn)。不過,使用MySQL復(fù)制,另一個因素開始發(fā)揮作用:復(fù)制延遲。在這種情況下,被提及到的 Percona xtraDB 集群以及我們提出只返回“向上”或者“向下”的檢查方法行不通。我們將希望依賴其復(fù)制延遲來調(diào)整內(nèi)部Haproxy的一個權(quán)重。這就是我們要做的在這篇文章中使用HAProxy 1.5。

HAProxy的代理檢測


HAProxy 1.5運(yùn)行我們運(yùn)行一個代理檢測,這是一項(xiàng)可以添加到常規(guī)健康檢測項(xiàng)的檢測。代理檢測的好處是返回值可以是‘up'或 ‘down',但也可以是個權(quán)重值。

代理是什么呢?它是一個簡單的可以訪問給定端口上TCP連接的程。所以,如果我們要在一臺MySQL服務(wù)器上運(yùn)行代理,這需要:

    如果不運(yùn)行復(fù)制的話確保服務(wù)在HAProxy上是停止的     如果復(fù)制延遲小于10s,設(shè)置weight為100%     如果延遲大于等于10s,小于50s,設(shè)置weight為50%     在其他情況下設(shè)置weight為5%


我們可以使用這樣一個腳本:
 

$ 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);}?>

如果你希望腳本從端口6789發(fā)出連接到運(yùn)行在3306端口上的MySQL實(shí)例,這樣運(yùn)行:
 

$ php agent.php 6789 3306

你還需要指定MySQL用戶:
 

mysql> GRANT REPLICATION CLIENT ON *.* TO 'haproxy'@'127.0.0.1' IDENTIFIED BY 'haproxy_pwd';

代理啟動后,你可以檢測一下它是否正常運(yùn)行:
 

# telnet 127.0.0.1 6789Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.up 100%Connection closed by foreign host.
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳西县| 青州市| 岳西县| 曲水县| 宝清县| 政和县| 北安市| 旬邑县| 义马市| 墨江| 丁青县| 奉新县| 广宁县| 达孜县| 德格县| 措美县| 屏南县| 临安市| 宕昌县| 阿合奇县| 岳西县| 文山县| 衡山县| 延寿县| 深泽县| 丹棱县| 惠水县| 全南县| 涪陵区| 伊吾县| 永丰县| 临安市| 板桥市| 惠来县| 罗源县| 平阳县| 尤溪县| 广州市| 专栏| 德清县| 阜南县|