1. 程式人生 > >docker 搭建pxc Mysql叢集

docker 搭建pxc Mysql叢集

轉自:https://www.cnblogs.com/zhenghongxin/p/9228101.html

docker基本指令:

更新軟體包

yum -y update

安裝Docker虛擬機器(centos 7)

yum install -y docker

執行、重啟、關閉Docker虛擬機器

service docker start
service docker stop

搜尋映象

 docker search 映象名稱

下載映象

docker pull 映象名稱

檢視映象

docker images

刪除映象

docker rmi 映象名稱

執行容器

docker run 啟動引數  映象名稱

檢視容器列表

docker ps -a

當我們想要使用java環境,我們可以這麼操作:

複製程式碼

搜尋:
[[email protected]_71_225_centos ~]# docker search java
INDEX       NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/node                                         Node.js is a JavaScript-based platform for...   5752      [OK]
docker.io   docker.io/tomcat                                       Apache Tomcat is an open source implementa...   1891      [OK]
docker.io   docker.io/java                                         Java is a concurrent, class-based, and obj...   1745      [OK]
docker.io   docker.io/openjdk                                      OpenJDK is an open-source implementation o...   1031      [OK]

複製程式碼

複製程式碼

下載:
[[email protected]_71_225_centos ~]# docker pull docker.io/java
Using default tag: latest
Trying to pull repository docker.io/library/java ...
latest: Pulling from docker.io/library/java
5040bd298390: Downloading [=>                                                 ] 1.572 MB/51.36 MB

複製程式碼

複製程式碼

執行:
[[email protected]_71_225_centos ~]# docker run -it --name myjava docker.io/java bash
[email protected]:/# java
  • -i: 以互動模式執行容器,通常與 -t 同時使用;

  • -t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;

複製程式碼

安裝PXC叢集(在此不做mysql pxc叢集與replication叢集的方案優劣說明,在此選用pxc叢集方案[多節點備份與強聯合性]):

安裝PXC映象

docker pull percona/percona-xtradb-cluster

檢視本地映象

複製程式碼

[[email protected]_71_225_centos ~]# docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world                      latest              e38bc07ac18e        2 months ago        1.85 kB
docker.io/percona/percona-xtradb-cluster   latest              f1439de62087        3 months ago        413 MB
docker.io/java                             latest              d23bdf5b1b1b        17 months ago       643 MB

複製程式碼

docker.io/percona/percona-xtradb-cluster 太長,進行改名:

複製程式碼

[[email protected]_71_225_centos ~]# docker tag percona/percona-xtradb-cluster pxc
[[email protected]_71_225_centos ~]# docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world                      latest              e38bc07ac18e        2 months ago        1.85 kB
docker.io/percona/percona-xtradb-cluster   latest              f1439de62087        3 months ago        413 MB
pxc                                        latest              f1439de62087        3 months ago        413 MB
docker.io/java                             latest              d23bdf5b1b1b        17 months ago       643 MB

複製程式碼

建立net1網段:

docker network create --subnet=172.18.0.0/16 net1

建立五個資料卷(pxc無法直接存取宿組機的資料,所以建立五個docker資料卷)

docker volume create v1
docker volume create v2
docker volume create v3
docker volume create v4
docker volume create v5

檢視資料卷位置:

複製程式碼

[[email protected]_71_225_centos code]# docker inspect v1
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/v1/_data",
        "Name": "v1",
        "Options": {},
        "Scope": "local"
    }
]

複製程式碼

建立5節點的PXC叢集

#建立第1個MySQL節點
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc

等待2分鐘後,再建立第二個節點,等待第一個節點例項化完畢後,才能開啟第二個節點例項,不然會瞬間停止

建立其他節點:

複製程式碼

#建立第2個MySQL節點
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 -v backup:/data --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
#建立第3個MySQL節點
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
#建立第4個MySQL節點
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
#建立第5個MySQL節點
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc

複製程式碼

測試在任意mysql節點建立資料庫:

mysql -h 172.18.0.3 -uroot -pabc123456

mysql> create database test;
Query OK, 1 row affected (0.03 sec)

登入其他節點資料庫,能看到已經進行了同步,構成簡單的mysql叢集

安裝Haproxy進行高可用與負載均衡

 拉取haproxy

docker pull haproxy

編寫Haproxy配置檔案

vi /home/soft/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
    server  MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000
    #使用keepalive檢測死鏈
    option  tcpka  

複製程式碼

建立第1個Haproxy負載均衡伺服器

docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy

進入h1容器,啟動Haproxy

docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

檢視是否啟動成功:

訪問http://ip:4001/dbs

 安裝keepalive實現雙擊熱備