本篇文章給大家主要講的是關(guān)于使用HAProxy 代理 MySQL Master-Sl方法的內(nèi)容,感興趣的話就一起來看看這篇文章吧,相信看完使用HAProxy 代理 MySQL Master-Sl方法對大家多少有點參考價值吧。
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供做網(wǎng)站、網(wǎng)站設(shè)計服務(wù),網(wǎng)站設(shè)計,網(wǎng)站改版維護(hù)等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出成都創(chuàng)新互聯(lián)公司。
我有一個MySQL Master-Slave Replication, 想要通過HAProxy代理, 做讀寫分離.
寫流量給到Master 節(jié)點, 讀流量給到Slave 節(jié)點.
首先我應(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
很明顯, 這么寫僅僅只實現(xiàn)了流量的分發(fā), 但并不能實現(xiàn)我的需求: 把寫流量給Master, 讀流量給Slave 節(jié)點.
那么問題來了,首先我要能夠識別Master Slave 節(jié)點, 才能有接下來的流量分離.
HAProxy有個配置項叫做 mysql-check. 但是這里并不能用它去做Master-Slave的檢測,因為這個option只提供存活檢測.
只要能夠連上,就代表這個mysql后端是Health OK的.
這還是不符合我的需求.
MySQL 如果能夠通過tcp-check 檢測是Master還是Slave就好了.
既然這樣, 寫一個TCP-check Wrapper 不就可以了?
這個Wrapper應(yīng)該監(jiān)聽在TCP端口上,并以守護(hù)進(jìn)程的方式運行.
當(dāng)HAproxy連接至其監(jiān)聽的端口時, 會執(zhí)行相應(yīng)的腳本, 并將腳本執(zhí)行結(jié)果通過 TCP 連接發(fā)送至Haproxy.
代碼如下:
放置好mysqlchk 腳本, 然后在每個MySQL節(jié)點上把tcp-check-wrapper服務(wù)跑起來.
在Master節(jié)點上測試一下腳本
[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é)點上測試一下
[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é)點上, 運行 tcp-check-wrapper.
haproxy_tcp_check &
基于我們前面所做的, 現(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
至此, 我們已經(jīng)通過HAProxy, 借助了 "TCP-Check-Wrapper" + "mysqlchk", 實現(xiàn)了MySQL Master-Slave Replication 的讀寫分離,
TCP-Check-Wrapper 幫助我們對一些不能使用tcp-check option 的應(yīng)用執(zhí)行檢查.
mysqlchk 提供了具體檢測的方法.
其實再多想一點, 可以再進(jìn)一步利用MHA + HAPRoxy, 可以實現(xiàn) MySQL Master-Slave Replication 高可用.
即: 在Master發(fā)生故障時, 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://jinyejixie.com/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)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)