使用HAProxy代理MySQLMaster-Sl方法

本篇文章給大家主要講的是關(guān)于使用HAProxy 代理 MySQL Master-Sl方法的內(nèi)容,感興趣的話就一起來看看這篇文章吧,相信看完使用HAProxy 代理 MySQL Master-Sl方法對大家多少有點(diǎn)參考價(jià)值吧。 

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供做網(wǎng)站、網(wǎng)站設(shè)計(jì)服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站改版維護(hù)等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出成都創(chuàng)新互聯(lián)公司。

背景

我有一個MySQL Master-Slave Replication, 想要通過HAProxy代理, 做讀寫分離.

寫流量給到Master 節(jié)點(diǎn), 讀流量給到Slave 節(jié)點(diǎn).

使用HAProxy 代理 MySQL Master-Sl方法

首先我應(yīng)該由一個HAProxy的配置, 我想應(yīng)該這樣寫(偽配置):

listen  mysql
        bind *:3316
        mode tcp
        ...
        server 192.168.1.111 192.168.1.111:3306 check
        server 192.168.1.112 192.168.1.112:3306 check
        server 192.168.1.113 192.168.1.113:3306 check

很明顯, 這么寫僅僅只實(shí)現(xiàn)了流量的分發(fā), 但并不能實(shí)現(xiàn)我的需求: 把寫流量給Master, 讀流量給Slave 節(jié)點(diǎn).

那么問題來了,首先我要能夠識別Master Slave 節(jié)點(diǎn), 才能有接下來的流量分離.

HAProxy有個配置項(xiàng)叫做 mysql-check. 但是這里并不能用它去做Master-Slave的檢測,因?yàn)檫@個option只提供存活檢測.
只要能夠連上,就代表這個mysql后端是Health OK的.

這還是不符合我的需求.

MySQL 如果能夠通過tcp-check 檢測是Master還是Slave就好了.

既然這樣, 寫一個TCP-check Wrapper 不就可以了?

TCP-Check-Wrapper

這個Wrapper應(yīng)該監(jiān)聽在TCP端口上,并以守護(hù)進(jìn)程的方式運(yùn)行.
當(dāng)HAproxy連接至其監(jiān)聽的端口時(shí), 會執(zhí)行相應(yīng)的腳本, 并將腳本執(zhí)行結(jié)果通過 TCP 連接發(fā)送至Haproxy.

代碼如下:

  • TCP-Check-Wrapper
  • mysqlchk

放置好mysqlchk 腳本, 然后在每個MySQL節(jié)點(diǎn)上把tcp-check-wrapper服務(wù)跑起來.

在Master節(jié)點(diǎn)上測試一下腳本

[root@control-01 ~]# mysqlchk.mysql
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 43

<html><body>MySQL master is running.</body></html>

在Slave節(jié)點(diǎn)上測試一下

[root@control-02 ~]# mysqlchk.mysql
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 43

<html><body>MySQL slave is running. (Slave lag: 0)</body></html>

OK, 通過 mysql check 腳本已經(jīng)可以幫助我們區(qū)分Master還是Slave了.

然后配置好tcp-check-wrapper.

# /etc/haproxy-tcp-check-wrapper
host = "0.0.0.0"
port = 9090
script = "/usr/bin/mysqlchk.mysql"

在每個MySQL節(jié)點(diǎn)上, 運(yùn)行 tcp-check-wrapper.

haproxy_tcp_check &

HAProxy的配置

基于我們前面所做的, 現(xiàn)在可以寫出HAProxy的配置文件了.

listen  mysql_write
        bind *:3316
        mode tcp
        timeout client  10800s
        timeout server  10800s
        balance leastconn
        option tcp-check
        tcp-check expect string MySQL\ master\ is\ running.
        option allbackups
        default-server port 9090 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
        server 192.168.1.111 192.168.1.111:3306 check
        server 192.168.1.112 192.168.1.112:3306 check
        server 192.168.1.113 192.168.1.113:3306 check

listen  mysql_read
        bind *:3317
        mode tcp
        timeout client  10800s
        timeout server  10800s
        balance leastconn
        option tcp-check
        tcp-check expect string MySQL\ slave\ is\ running.
        option allbackups
        default-server port 9090 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
        server 192.168.1.111 192.168.1.111:3306 check
        server 192.168.1.112 192.168.1.112:3306 check
        server 192.168.1.113 192.168.1.113:3306 check

總結(jié)

至此, 我們已經(jīng)通過HAProxy, 借助了 "TCP-Check-Wrapper" + "mysqlchk", 實(shí)現(xiàn)了MySQL Master-Slave Replication 的讀寫分離,

TCP-Check-Wrapper 幫助我們對一些不能使用tcp-check option 的應(yīng)用執(zhí)行檢查.
mysqlchk 提供了具體檢測的方法.

其實(shí)再多想一點(diǎn), 可以再進(jìn)一步利用MHA + HAPRoxy, 可以實(shí)現(xiàn) MySQL Master-Slave Replication 高可用.
即: 在Master發(fā)生故障時(shí), MHA可以將其中一臺 MySQL Slave提升為Master, 并且配置其他的Slave指向新的Master.

以上關(guān)于使用HAProxy 代理 MySQL Master-Sl方法詳細(xì)內(nèi)容,對大家有幫助嗎?如果想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。

當(dāng)前題目:使用HAProxy代理MySQLMaster-Sl方法
文章來源:http://www.muchs.cn/article30/jdodpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、建站公司、網(wǎng)站導(dǎo)航、小程序開發(fā)Google、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)