最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年04月22日 11:19:28   投稿:goldensun  
這篇文章主要介紹了用HAProxy來檢測(cè)MySQL復(fù)制的延遲的教程,HAProxy需要使用到PHP腳本,需要的朋友可以參考下

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

$ 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';

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

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

假設(shè)它運(yùn)行在本地的應(yīng)用服務(wù)器上,有兩個(gè)復(fù)制正在運(yùn)行(192.168.10.2和192.168.10.3),應(yīng)用的讀請(qǐng)求在3307端口,你需要在HAProxy中配置一個(gè)前端和后端,像這樣:
 

復(fù)制代碼 代碼如下:

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

現(xiàn)在所有的都準(zhǔn)備好了,現(xiàn)在讓我們看看怎么使用HAProxy來動(dòng)態(tài)的改變重滯服務(wù)器,代碼如下:
  

復(fù)制代碼 代碼如下:

# 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 

時(shí)延1
  

復(fù)制代碼 代碼如下:

# 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 

時(shí)延2
  

復(fù)制代碼 代碼如下:

# 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 

結(jié)論

在HAProxy 1.5中代理檢查是一個(gè)很好的新增功能。 在上面的設(shè)置中是簡(jiǎn)單的: 舉例來說, 如果 HAProxy 連接代理失敗,它就不會(huì)被標(biāo)記。 推薦與代理檢查一起,保持常規(guī)的健康度檢查。

細(xì)心的讀取者們(reads)將會(huì)注意到這個(gè)配置,如果在所有節(jié)點(diǎn)上都被復(fù)制, HAProxy將會(huì)停止發(fā)送給讀取者. 這可能不是最好的解決方案。但可能的選項(xiàng)是:停止代理并標(biāo)記服務(wù)器為UP,使用狀態(tài)套接字(socket)或者添加主節(jié)點(diǎn)作為備份服務(wù)器。

最后一點(diǎn),使用Percona工具集的pt-heartbeat替代Seconds_Behind_Master,您可以編輯代理的代碼,可以對(duì)復(fù)制的延遲進(jìn)行測(cè)量 。

相關(guān)文章

  • MYSQL常用命令與實(shí)用技巧

    MYSQL常用命令與實(shí)用技巧

    MYSQL常用命令與實(shí)用技巧...
    2007-07-07
  • MySQL數(shù)據(jù)類型之淺談字符串(string)

    MySQL數(shù)據(jù)類型之淺談字符串(string)

    這篇文章主要介紹了MySQL數(shù)據(jù)類型之字符串(string)的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Navicat連接mysql報(bào)錯(cuò)2003(10060)的解決方法

    Navicat連接mysql報(bào)錯(cuò)2003(10060)的解決方法

    本來好好的navicat連接數(shù)據(jù)庫,突然間今天就打不開數(shù)據(jù)庫了,下面這篇文章主要給大家介紹了關(guān)于Navicat連接mysql報(bào)錯(cuò)2003(10060)的解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 給mysql數(shù)據(jù)庫的字段設(shè)默認(rèn)值方式

    給mysql數(shù)據(jù)庫的字段設(shè)默認(rèn)值方式

    這篇文章主要介紹了給mysql數(shù)據(jù)庫的字段設(shè)默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • MySQL Installer 8.0.21安裝教程圖文詳解

    MySQL Installer 8.0.21安裝教程圖文詳解

    這篇文章主要介紹了MySQL Installer 8.0.21安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Mysql如何解決1251 client does not support問題

    Mysql如何解決1251 client does not support問題

    這篇文章主要介紹了Mysql如何解決1251 client does not support問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • MySQL 中定義和使用變量的方法

    MySQL 中定義和使用變量的方法

    MySQL 提供了多種類型的變量,以適應(yīng)不同的應(yīng)用場(chǎng)景,用戶定義的變量適用于簡(jiǎn)單的會(huì)話內(nèi)數(shù)據(jù)傳遞,局部變量適合在復(fù)雜的存儲(chǔ)過程中使用,而會(huì)話變量則用于調(diào)整和優(yōu)化數(shù)據(jù)庫會(huì)話的行為,這篇文章主要介紹了MySQL 中定義和使用變量,需要的朋友可以參考下
    2024-04-04
  • Mysql的SELECT語句與顯示表結(jié)構(gòu)詳解

    Mysql的SELECT語句與顯示表結(jié)構(gòu)詳解

    這篇文章主要介紹了Mysql的SELECT語句與顯示表結(jié)構(gòu)詳解的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • mysql優(yōu)化之路----hash索引優(yōu)化

    mysql優(yōu)化之路----hash索引優(yōu)化

    本文是筆者自己做的關(guān)于mysql的優(yōu)化方面的小測(cè)試,暫時(shí)僅僅做了hash索引優(yōu)化的測(cè)試,以后會(huì)做更多方面,希望能夠給您帶來收獲,祝您工作愉快。
    2014-08-08
  • mysql查詢上下級(jí)機(jī)構(gòu)的方法實(shí)例

    mysql查詢上下級(jí)機(jī)構(gòu)的方法實(shí)例

    大家應(yīng)該都知道表里有上下級(jí)機(jī)構(gòu)的,下面這篇文章主要給大家介紹了關(guān)于mysql查詢上下級(jí)機(jī)構(gòu)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評(píng)論

永年县| 同心县| 宁远县| 临海市| 明溪县| 当涂县| 黑山县| 旺苍县| 许昌市| 浮梁县| 大丰市| 吴旗县| 乌兰县| 岳池县| 衡南县| 东山县| 象山县| 稻城县| 西盟| 剑河县| 内江市| 道真| 重庆市| 诸城市| 剑河县| 宜君县| 曲周县| 台州市| 万安县| 辰溪县| 罗定市| 木里| 高唐县| 凤山市| 婺源县| 吴川市| 都安| 陈巴尔虎旗| 渝中区| 宣威市| 禄丰县|