91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何利用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

开化县| 彭山县| 神农架林区| 靖江市| 宝清县| 睢宁县| 青龙| 潢川县| 通州区| 绥江县| 通许县| 吴旗县| 三明市| 格尔木市| 黄浦区| 城口县| 防城港市| 循化| 崇左市| 宁武县| 浙江省| 丘北县| 汕尾市| 红安县| 新宁县| 颍上县| 铁岭市| 昌平区| 岐山县| 菏泽市| 凤庆县| 田林县| 南宫市| 云龙县| 乌兰县| 福州市| 陇川县| 石林| 水城县| 深水埗区| 万年县|