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協議 | 支援 | 剛剛支援 | 不支援 | 支援 |
支援外掛 | 不支援 | 支援 | 不支援 | 不支援 |
效能 | 好 | 好 | 一般 | 最好 |