在上節中我們創建了 mysql 集群。
實際工作中,我們不希望讓某一數據庫節點處理所有的請求,這樣的話單個負載高,性能差。
image.png
在這里我們使用haproxy作為負載均衡的中間件,類似的還有LVS,但是好像不支持虛擬機,在docker中用不了。
image.png
實現流程:
下載鏡像 docker pull haproxy 宿主機創建 haproxy 的配置文件,比如路徑是 D:\Docker\haproxy\haproxy.cfg最重要的就是配置文件了。這里內容如下:globaldaemon# nbproc 1# pidfile /var/run/haproxy.pid# 工作目錄chroot /usr/local/etc/haproxydefaultslog 127.0.0.1 local0 err #[err warning info debug]mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OKretries 2 #兩次連接失敗就認為是服務器不可用,也可以通過后面設置option redispatch #當serverId對應的服務器掛掉后,強制定向到其他健康的服務器option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接option dontlognull #日志中不記錄負載均衡的心跳檢測記錄maxconn 4096 #默認的最大連接數timeout connect 5000ms #連接超時timeout client 30000ms #客戶端超時timeout server 30000ms #服務器超時#timeout check 2000 #=心跳檢測超時######## 監控界面配置 #################
listen admin_status# 監控界面訪問信息bind 0.0.0.0:8888mode http# URI相對地址stats uri /dbs# 統計報告格式stats realm Global\ statistics# 登錄賬戶信息stats auth admin:123456
########frontend配置###################### mysql負載均衡配置 ###############
listen proxy-mysqlbind 0.0.0.0:3306mode tcp# 負載均衡算法# static-rr 權重, leastconn 最少連接, source 請求IP, 輪詢 roundrobinbalance roundrobin# 日志格式option tcplog# 在 mysql 創建一個沒有權限的haproxy用戶,密碼為空。 haproxy用戶# create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;option mysql-check user haproxy# 這里是容器中的IP地址,由于配置的是輪詢roundrobin,weight 權重其實沒有生效server MYSQL_1 172.18.0.2:3306 check weight 1 maxconn 2000server MYSQL_2 172.18.0.3:3306 check weight 1 maxconn 2000server MYSQL_3 172.18.0.4:3306 check weight 1 maxconn 2000# 使用keepalive檢測死鏈# option tcpka
#########################################
啟動 haproxy 的容器,鏡像名稱為 h1,網絡名稱使用上節中創建的 pxc-network,就是和 mysql 集群處于同一網絡。
docker run -it -d -p 4001:8888 -p 4002:3306 -v D:/Docker/haproxy:/usr/local/etc/haproxy --name h1 --net=pxc-network 進去容器,并讓 haproxy 加載配置
docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/ 宿主機打開 http://localhost:4001/dbs 這是haproxy 提供的圖形界面 image.png
可以看到每個mysql節點運行狀態是綠色,說明正常。
測試,停掉一個數據庫節點 docker stop pxc_node1 ,發現有一個變紅了。 image.png
項目中可以使用配置的 4002 來連接數據庫,這樣請求會被分發到各個子節點。總結:
數據庫的負載均衡配置還是比較簡單的,關鍵是負載均衡算法,如果每個數據庫節點配置都一樣,可以使用輪詢算法,如果不一樣,可以使用權重算法,讓配置高的多接收請求。官方的教程 問題:
啟動停掉的節點 docker start pxc_node1,mysql恢復不起來了。待研究。有誰知道麻煩告訴我。 image.png
總結
以上是生活随笔為你收集整理的docker学习系列14 使用haproxy实现mysql集群的负载均衡...的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。