1. 程式人生 > >docker swarm使用keepalived+haproxy搭建基於percona-xtradb-cluster方案的高可用mysql集群

docker swarm使用keepalived+haproxy搭建基於percona-xtradb-cluster方案的高可用mysql集群

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.4
Git 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 Nov
7 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 3306
4 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集群