docker swarm使用keepalived+haproxy搭建基於percona-xtradb-cluster方案的高可用mysql集群
阿新 • • 發佈:2019-01-23
router syslog add alived name tcp 客戶端 負載 start
一、部署環境
序號 | hostname | ip | 備註 |
1 | manager107 | 10.0.3.107 | centos7;3.10.0-957.1.3.el7.x86_64 |
2 | worker68 | 10.0.3.68 | centos7;3.10.0-957.1.3.el7.x86_64 |
3 | worker80 | 10.0.3.80 | centos7;3.10.0-957.1.3.el7.x86_64 |
docker版本
docker version Client: Version: 18.09.0 API version: 1.39 Go version: go1.10.4Git commit: 4d60db4 Built: Wed Nov 7 00:48:22 2018 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.0 API version: 1.39 (minimum version 1.12) Go version: go1.10.4 Git commit: 4d60db4 Built: Wed Nov7 00:19:08 2018 OS/Arch: linux/amd64 Experimental: false
二、首先搭建基於swarm的percona-xtradb-cluster集群,參見上一篇
三、三臺服務器安裝haproxy
1、編寫haproxy-Dockerfile
1 cd /home/workspace/haproxy 2 vim haproxy-Dockerfile
haproxy-Dockerfile內容:
1 FROM haproxy 2 COPY ./haproxy.cfg /usr/local/etc/haproxy/ 3 EXPOSE 4567 33064 CMD ["/usr/local/sbin/haproxy", "-db", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]
2、編輯haproxy配置文件
vim haproxy.cfg
輸入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:4567 #訪問協議 mode http #URI相對地址 stats uri /haproxy #統計報告格式 stats realm Global\ statistics #登陸帳戶信息 stats auth admin:abc123456 #數據庫負載均衡 listen proxy-mysql #訪問的IP和端口(前面ip=0代表任何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 node1 node1:3306 check weight 1 maxconn 2000 server node2 node2:3306 check weight 1 maxconn 2000 server node3 node3:3306 check weight 1 maxconn 2000 #使用keepalive檢測死鏈 option tcpka
註:node1、node2、node3分別為三臺服務器上的pxc集群的容器名字。
3、構建haproxy鏡像
docker build -t haproxy01 .
4、三臺服務器啟動haproxy容器服務
1 docker run -it -d -p 3106:3306 -p 7010:4567 --name c_haproxy01 --net=pxc-net --privileged haproxy01 2 docker run -it -d -p 3106:3306 -p 7010:4567 --name c_haproxy02 --net=pxc-net --privileged haproxy01 3 docker run -it -d -p 3106:3306 -p 7010:4567 --name c_haproxy03 --net=pxc-net --privileged haproxy01
這時訪問http://10.0.3.107:7010/haproxy,應該可以看到統計頁面了。
四、三臺服務器安裝keepalived
1、三臺服務器yum安裝keepalived
2、選擇107作為master,兩外兩臺作為backup
在107配置keepalived:
1 cd /etc/keepalived/ 2 vim keepalived.conf
keepalived.conf內容:
1 ! Configuration File for keepalived 2 3 vrrp_instance VI_1 { 4 state MASTER 5 interface enp0s31f6 6 virtual_router_id 51 7 priority 100 8 advert_int 1 9 authentication { 10 auth_type PASS 11 auth_pass 1111 12 } 13 virtual_ipaddress { 14 10.0.3.63 15 } 16 } 17 18 virtual_server 10.0.3.63 7010 { 19 delay_loop 6 20 lb_algo rr 21 lb_kind NAT 22 persistence_timeout 50 23 protocol TCP 24 25 real_server 10.0.3.107 7010 { 26 weight 1 27 } 28 29 real_server 10.0.3.68 7010 { 30 weight 1 31 } 32 33 real_server 10.0.3.80 7010 { 34 weight 1 35 } 36 37 } 38 39 virtual_server 10.0.3.63 3106 { 40 delay_loop 6 41 lb_algo rr 42 lb_kind NAT 43 persistence_timeout 50 44 protocol TCP 45 46 real_server 10.0.3.107 3106 { 47 weight 1 48 } 49 50 real_server 10.0.3.68 3106 { 51 weight 1 52 } 53 54 real_server 10.0.3.80 3106 { 55 weight 1 56 } 57 58 }
啟動keepalived
systemctl start keepalived
同樣,在68和80上配置keepalived:
1 ! Configuration File for keepalived 2 3 vrrp_instance VI_1 { 4 state BACKUP 5 interface enp3s0 6 virtual_router_id 51 7 priority 100 8 advert_int 1 9 authentication { 10 auth_type PASS 11 auth_pass 1111 12 } 13 virtual_ipaddress { 14 10.0.3.63 15 } 16 } 17 18 19 virtual_server 10.0.3.63 7010 { 20 delay_loop 6 21 lb_algo rr 22 lb_kind NAT 23 persistence_timeout 50 24 protocol TCP 25 26 real_server 10.0.3.107 7010 { 27 weight 1 28 } 29 30 real_server 10.0.3.68 7010 { 31 weight 1 32 } 33 34 real_server 10.0.3.80 7010 { 35 weight 1 36 } 37 38 } 39 40 virtual_server 10.0.3.63 3106 { 41 delay_loop 6 42 lb_algo rr 43 lb_kind NAT 44 persistence_timeout 50 45 protocol TCP 46 47 real_server 10.0.3.107 3106 { 48 weight 1 49 } 50 51 real_server 10.0.3.68 3106 { 52 weight 1 53 } 54 55 real_server 10.0.3.80 3106 { 56 weight 1 57 } 58 59 }
同樣啟動keepalived。
五、測試
現在可以用vip來訪問統計頁面(http://10.0.3.63:7010/haproxy)和連接數據庫集群(10.0.3.63:3106)了。
模擬keepalived掛掉:
ip a
可以看到現在63正掛在107下面,現在在107上停掉keepalived
systemctl stop keepalived
可以看到63已經漂移到了68下面了。
當然還可以配置服務器檢查策略。
docker swarm使用keepalived+haproxy搭建基於percona-xtradb-cluster方案的高可用mysql集群