docker搭建pxc集羣與haproxy負載均衡

轉載自https://blog.csdn.net/FlyDevon/article/details/82317689
另注:本人實際操做pxc的時候,遇到節點數據庫不一樣步,通過一番折騰,最後緣由居然pxc版本有問題,換成5.6的沒有問題,各位同窗能夠注意一下。php

Percona XtraDB Cluster簡稱PXC。Percona Xtradb Cluster實現是在原mysql代碼上經過Galera包將不一樣的mysql實例鏈接起來,實現了multi-master的集羣架構。css

一、安裝pxc鏡像html

docker pull percona/percona-xtradb-cluster

二、修改鏡像名稱node

docker tag percona/percona-xtradb-cluster pxc
#docker images 出現兩個imageId相同鏡像,這時不能用docker rmi imageId刪除,可經過docker rmi repository:tag刪除

三、建立網絡python

docker network ls  #查看docker網絡
docker network create --subnet=172.18.0.0/24 net1  #建立網絡
docker inspect net1 #查看網絡
[
    {
        "Name": "net1",
        "Id": "d06c2ce7488c64df8c2278279be9342bf339e1650691abab9b8a576c14075a20",
        "Created": "2018-09-02T10:37:27.626037191Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/24"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

四、建立數據卷mysql

#數據卷是虛擬機與宿主機之間共享文件,若是容器出現異常,被刪除掉,可是容器中的重要數據仍是被保存下來,只需將新建立的容器掛載到數據捲上面便可。
#建立3臺pxc集羣,所以我準備3個數據卷v一、v二、v3
docker volume create v1 #建立數據卷
docker inspect v1 #查看數據卷,咱們也能夠去docker安裝目錄中volumes目錄中查看數據卷是否建立成功

五、建立pxc容器算法

#建立第一個節點
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql --privileged --name=node1 --net=net1 --ip=172.18.0.2 pxc
#建立第二個節點
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=net1 --ip=172.18.0.3 pxc
#建立第三個節點
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip=172.18.0.4 pxc

docker run [param ...] imageName  #建立容器命令
-d 後臺運行
-p 容器與宿主機端口映射
-e MYSQL_ROOT_PASSWORD=abc123456 數據庫密碼
-e CLUSTER_NAME=PXC 指定集羣名稱
-e XTRABACKUP_PASSWORD=abc123456 指定集羣之間同步須要的密碼
v v1:/var/lib/mysql 把剛剛建立的數據卷掛載到mysql中
--name=node1 指定容器名稱(當前咱們把node1做爲主節點、後面會建立node2)
--net=net1 指定網段
--ip=172.18.0.2 指定ip

六、建立haproxy容器sql

docker pull haproxy #拉取鏡像
cd /usr/local/ & mkdir -p docker/haproxy/
vim docker/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 
    #使用keepalive檢測死鏈
    option  tcpka 
######################################################################################
docker run -it -d -p 4001:8888 -p 4002:3306 -v /usr/local/docker/haproxy:/usr/local/etc/haproxy --name haproxy --privileged --net=net1 --ip 172.18.0.7 haproxy
#進入haproxy啓動容器
docker exec -it haproxy bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
#根據haproxy.cfg配置文件中、咱們須要在db1數據庫中建立一個haproxy用戶
create user 'haproxy'@'%' identified by '';

 

七、pxc強一致性與haproxy負載均衡測試docker

node_01節點建立表,可同步到node_02和node_03
haproxy代理端口4002實現負載均衡
pxc節點監控
相關文章
相關標籤/搜索