中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用HAProxy 代理 MySQL Master-Sl

發布時間:2020-07-28 09:32:44 來源:網絡 閱讀:332 作者:wx5e047b1f71dff 欄目:系統運維

背景

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

寫流量給到Master 節點, 讀流量給到Slave 節點.

如何利用HAProxy 代理 MySQL Master-Sl

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

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

很明顯, 這么寫僅僅只實現了流量的分發, 但并不能實現我的需求: 把寫流量給Master, 讀流量給Slave 節點.

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

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

這還是不符合我的需求.

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

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

TCP-Check-Wrapper

這個Wrapper應該監聽在TCP端口上,并以守護進程的方式運行.
當HAproxy連接至其監聽的端口時, 會執行相應的腳本, 并將腳本執行結果通過 TCP 連接發送至Haproxy.

代碼如下:

  • TCP-Check-Wrapper
  • mysqlchk

放置好mysqlchk 腳本, 然后在每個MySQL節點上把tcp-check-wrapper服務跑起來.

在Master節點上測試一下腳本

[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節點上測試一下

[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 腳本已經可以幫助我們區分Master還是Slave了.

然后配置好tcp-check-wrapper.

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

在每個MySQL節點上, 運行 tcp-check-wrapper.

haproxy_tcp_check &

HAProxy的配置

基于我們前面所做的, 現在可以寫出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

總結

至此, 我們已經通過HAProxy, 借助了 "TCP-Check-Wrapper" + "mysqlchk", 實現了MySQL Master-Slave Replication 的讀寫分離,

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

其實再多想一點, 可以再進一步利用MHA + HAPRoxy, 可以實現 MySQL Master-Slave Replication 高可用.
即: 在Master發生故障時, MHA可以將其中一臺 MySQL Slave提升為Master, 并且配置其他的Slave指向新的Master.

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嵩明县| 迭部县| 额尔古纳市| 肇庆市| 广元市| 北宁市| 宁德市| 安徽省| 肇东市| 庄河市| 察隅县| 荣昌县| 长兴县| 沁源县| 浏阳市| 滨海县| 富宁县| 阳新县| 墨玉县| 曲松县| 扎赉特旗| 洛南县| 东丰县| 宣汉县| 洮南市| 察哈| 永清县| 石台县| 广宁县| 海丰县| 马尔康县| 安多县| 马边| 永寿县| 当雄县| 榆林市| 衡东县| 鄢陵县| 鄂托克旗| 永宁县| 烟台市|