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

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

用HAProxy來(lái)檢測(cè)MySQL復(fù)制的延遲的教程

2024-07-24 13:07:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了用HAProxy來(lái)檢測(cè)MySQL復(fù)制的延遲的教程,HAProxy需要使用到PHP腳本,需要的朋友可以參考下
 

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

HAProxy的代理檢測(cè)


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

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

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


我們可以使用這樣一個(gè)腳本:

  1. $ less agent.php 
  2. <!--?php 
  3. // Simple socket server 
  4. // See http://php.net/manual/en/function.stream-socket-server.php 
  5. $port = $argv[1]; 
  6. $mysql_port = $argv[2]; 
  7. $mysql = "/usr/bin/mysql"
  8. $user = 'haproxy'
  9. $password = 'haproxy_pwd'
  10. $query = "SHOW SLAVE STATUS"
  11. function set_weight($lag){ 
  12.   # Write your own rules here 
  13.   if ($lag == 'NULL'){ 
  14.     return "down"
  15.   } 
  16.   else if ($lag < 10){ 
  17.     return "up 100%"
  18.   } 
  19.   else if ($lag -->= 10 && $lag < 60){ 
  20.     return "up 50%"
  21.   } 
  22.   else 
  23.     return "up 5%"
  24. set_time_limit(0); 
  25. $socket = stream_socket_server("tcp://127.0.0.1:$port", $errno, $errstr); 
  26. if (!$socket) { 
  27.   echo "$errstr ($errno) 
  28. n"; 
  29. else { 
  30.   while ($conn = stream_socket_accept($socket,9999999999999)) { 
  31.     $cmd = "$mysql -h127.0.0.1 -u$user -p$password -P$mysql_port -Ee "$query" | grep Seconds_Behind_Master | cut -d ':' -f2 | tr -d ' '"
  32.     exec("$cmd",$lag); 
  33.     $weight = set_weight($lag[0]); 
  34.     unset($lag); 
  35.     fputs ($conn, $weight); 
  36.     fclose ($conn); 
  37.   } 
  38.   fclose($socket); 
  39. ?> 


 

 

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

  1. $ php agent.php 6789 3306 
?
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肥东县| 长丰县| 彰化市| 宜章县| 洛隆县| 永仁县| 舟曲县| 禹州市| 武安市| 怀远县| 施甸县| 衡阳县| 云梦县| 江口县| 凌源市| 诸城市| 滕州市| 社旗县| 东兰县| 连平县| 龙岩市| 沧源| 南郑县| 象州县| 洛南县| 宣威市| 本溪| 临江市| 榕江县| 府谷县| 平昌县| 临洮县| 垣曲县| 齐齐哈尔市| 文水县| 依兰县| 新巴尔虎右旗| 东丽区| 兴海县| 黄石市| 孟连|