1. 程式人生 > >docker簡易搭建MySQL叢集的負載均衡

docker簡易搭建MySQL叢集的負載均衡

docker簡易搭建MySQL叢集的負載均衡


寫在前面:為什麼要搭建MySQL叢集的負載均衡呢?在擁有叢集的情況,如果始終都是對叢集中的某個節點伺服器進行資料庫請求,仍然是會造成負載高,效能差。故使用harpoxy中介軟體進行負載均衡。 注:在閱讀此文之前,最好請先閱讀《docker簡易搭建MySQL叢集》https://blog.csdn.net/belonghuang157405/article/details/80774506

第一步 安裝Haproxy:

在centos視窗中 執行如下命令,拉取haproxy映象:

docker pull haproxy

第二步 建立Haproxy配置檔案

由於拉取下來的haproxy映象中並不包含haproxy配置檔案。故首先在宿主機上centos視窗中 執行如下兩條命令建立haproxy配置檔案:

mkdir /home/soft/haproxy
vi /home/soft/haproxy/haproxy.cfg

注:讀者並非一定要指定在/home/soft/haproxy目錄下,可自行選擇,該目錄將用於對映與docker容器中使用。

按 i 鍵,進入編輯模式,並將下方haproxy配置內容複製到haproxy.cfg中,讀者可根據自身的環境進行修改,內容如下:

global
    #工作目錄
    chroot /usr/local/etc/haproxy
    #日誌檔案,使用rsyslog服務中local5日誌裝置(/var/log/local5),等級info
    log 127.0.0.1 local5 info
    #守護程序執行
    daemon

defaults
    log global
    mode    http
    #日誌格式
    option  httplog
    #日誌中不記錄負載均衡的心跳檢測記錄
    option  dontlognull
    #連線超時(毫秒)
    timeout connect 5000
    #客戶端超時(毫秒)
    timeout client  50000
    #伺服器超時(毫秒)
    timeout server  50000

#監控介面   
listen  admin_stats
    #監控介面的訪問的IP和埠
    bind  0.0.0.0:8888
    #訪問協議
    mode        http
    #URI相對地址
    stats uri   /dbs
    #統計報告格式
    stats realm     Global\ statistics
    #登陸帳戶資訊
    stats auth  admin:abc123456
#資料庫負載均衡
listen  proxy-mysql
    #訪問的IP和埠
    bind  0.0.0.0:3306  
    #網路協議
    mode  tcp
    #負載均衡演算法(輪詢演算法)
    #輪詢演算法:roundrobin
    #權重演算法:static-rr
    #最少連線演算法:leastconn
    #請求源IP演算法:source 
    balance  roundrobin
    #日誌格式
    option  tcplog
    #在MySQL中建立一個沒有許可權的haproxy使用者,密碼為空。Haproxy使用這個賬戶對MySQL資料庫心跳檢測
    option  mysql-check user haproxy
    server  MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000  
    server  MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000  
    server  MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 
    server  MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000
    #使用keepalive檢測死鏈
    option  tcpka  

*注:bind 0.0.0.0:3306 | 不限定訪問ip。
option mysql-check user haproxy | 用於心跳的mysql使用者,請在mysql叢集資料庫進行建立該使用者haproxy,讀者可自己配置該使用者名稱。在此處我們按照約定俗成定為haproxy。
server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 | 172.18.0.2(容器的ip):3306(容器的埠),check(心跳檢測),weight 1(權重,只有當演算法為static-rr才生效),maxconn 2000(最大連線數)*

貼上內容後,按 Esc 鍵,並輸入 :wq ,退出並儲存檔案。
在這還需用做一步的是在mysql視窗中,建立mysql使用者,執行如下命令:

create user 'haproxy'@'%'  identified by '';

也可以用圖形化工具建立該使用者,如圖所示:

第三步 建立Haproxy容器,並執行Haproxy中介軟體

在centos視窗中,執行如下命令:

docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name haproxy1 --privileged --net=net1 haproxy 

建立Haproxy容器完成後,執行如下命令啟動Haproxy:

haproxy -f /usr/local/etc/haproxy/haproxy.cfg

第四步 訪問Haproxy監控介面

在瀏覽器訪問 http://宿主機ip:4001/dbs , 輸入haproxy.cfg中配置的賬號密碼。
如圖所示:

登陸後,可以檢視資料叢集的執行情況,如圖所示:

第五步 試驗是否監控成功

掛起其中一個容器,進行測試,在宿主機centos視窗中輸入如下命令:

docker stop node2

再次重新整理haproxy重新整理介面,即可檢視到結果,發現對應node2的MySQL_2變紅,如圖所示:

驗證完成後,在centos視窗中執行如下命令,重新啟動node2:

docker start node2

再次重新整理haproxy監控介面即可看到恢復正常。

第五步 使用Haproxy中介軟體連線資料庫

利用MySQL圖形介面建立haproxy資料庫連線,如圖所示:

注:4002埠,就是第三步操作中 -p 4002:3306 命令,將docker容器的3306埠對映給宿主機的4002埠,讀者可自行替換。

接下來建立好haproxy資料連線,就可以在該haproxy資料庫連線中進行資料庫操作,haproxy會幫你將操作按照haproxy配置的策略分發到各個容器(node1,node2,node3,node4)的資料庫中,從而實現負載均衡。

附錄:

docker 停止容器

docker stop 容器名/容器id

docker 啟動容器

docker start 容器名/容器id

docker 暫停容器

docker pause 容器名/容器id

docker 恢復容器

docker unpause  容器名/容器id

寫在最後:為什麼沒有考慮到其他中介軟體來做負載均衡?由於本人的centos安裝在vmware中,故排除了LVS,又由於本次博文使用到的TCP/IP協議故排除Apache,最後在Haproxy與Nginx中,由於Haproxy支援TCP/IP協議支援的時間較為長遠,故最終選擇了Haproxy。讀者可根據自身的情況,自行選擇合適的中介軟體。
請參考如下 負載均衡中介軟體對比表格:

比較項 Haproxy Nginx Apache LVS
是否免費 免費 免費 免費 免費
支援虛擬機器 支援 支援 支援
HTTP協議 支援 支援 支援 支援
TCP/IP協議 支援 剛剛支援 不支援 支援
支援外掛 不支援 支援 不支援 不支援
效能 一般 最好