程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 用HAProxy來檢測MySQL復制的延遲的教程

用HAProxy來檢測MySQL復制的延遲的教程

編輯:MySQL綜合教程

用HAProxy來檢測MySQL復制的延遲的教程。本站提示廣大學習愛好者:(用HAProxy來檢測MySQL復制的延遲的教程)文章只能為提供參考,不一定能成為您想要的結果。以下是用HAProxy來檢測MySQL復制的延遲的教程正文


 在MySQL世界裡,HAProxy 平日來作為軟件負載平衡器應用。彼得.博羅什在曩昔的郵件中說明了若何應用percona xtradb集群(pxc)來對其設置。所以它只發送查詢到可運用的節點。異樣的辦法可用於慣例主從設置來讀取負載並疏散到多個從節點。不外,應用MySQL復制,另外一個身分開端施展感化:復制延遲。在這類情形下,被說起到的 Percona xtraDB 集群和我們提出只前往“向上”或許“向下”的檢討辦法行欠亨。我們將願望依附其復制延遲來調劑外部Haproxy的一個權重。這就是我們要做的在這篇文章中應用HAProxy 1.5。

HAProxy的署理檢測


HAProxy 1.5運轉我們運轉一個署理檢測,這是一項可以添加到慣例安康檢測項的檢測。署理檢測的利益是前往值可所以‘up'或 ‘down',但也能夠是個權重值。

署理是甚麼呢?它是一個簡略的可以拜訪給定端口上TCP銜接的程。所以,假如我們要在一台MySQL辦事器上運轉署理,這須要:

  •     假如不運轉復制的話確保辦事在HAProxy上是停滯的
  •     假如復制延遲小於10s,設置weight為100%
  •     假如延遲年夜於等於10s,小於50s,設置weight為50%
  •     在其他情形下設置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收回銜接到運轉在3306端口上的MySQL實例,如許運轉:
 

$ php agent.php 6789 3306

你還須要指定MySQL用戶:
 

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

署理啟動後,你可以檢測一下它能否正常運轉:
 

# 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.

假定它運轉在當地的運用辦事器上,有兩個復制正在運轉(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

如今一切的都預備好了,如今讓我們看看怎樣應用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,UP,100
read_only-back,BACKEND,UP,200 

時延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 ',' -f1,2,18,19
# pxname,svname,status,weight
read_only-front,FRONTEND,OPEN,
read_only-back,slave1,UP,50
read_only-back,slave2,UP,100
read_only-back,BACKEND,UP,150 

時延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 ',' -f1,2,18,19
# pxname,svname,status,weight
read_only-front,FRONTEND,OPEN,
read_only-back,slave1,UP,100
read_only-back,slave2,DOWN (agent),100
read_only-back,BACKEND,UP,100 

結論

在HAProxy 1.5中署理檢討是一個很好的新增功效。 在下面的設置中是簡略的: 舉例來講, 假如 HAProxy 銜接署理掉敗,它就不會被標志。 推舉與署理檢討一路,堅持慣例的安康度檢討。

仔細的讀取者們(reads)將會留意到這個設置裝備擺設,假如在一切節點上都被復制, HAProxy將會停滯發送給讀取者. 這能夠不是最好的處理計劃。但能夠的選項是:停滯署理並標志辦事器為UP,應用狀況套接字(socket)或許添加主節點作為備份辦事器。

最初一點,應用Percona對象集的pt-heartbeat替換Seconds_Behind_Master,您可以編纂署理的代碼,可以對復制的延遲停止丈量 。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved