1. 程式人生 > 資料庫 >docker 搭建Mysql叢集的方法示例

docker 搭建Mysql叢集的方法示例

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環境,我們可以這麼操作:

搜尋:
[root@VM_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]
下載:
[root@VM_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
執行:
[root@VM_71_225_centos ~]# docker run -it --name myjava docker.io/java bash
root@25623e12b759:/# java


-i: 以互動模式執行容器,通常與 -t 同時使用;


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

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

安裝PXC映象

docker pull percona/percona-xtradb-cluster

檢視本地映象

[root@VM_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 太長,進行改名:

[root@VM_71_225_centos ~]# docker tag percona/percona-xtradb-cluster pxc
[root@VM_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

檢視資料卷位置:

[root@VM_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實現雙擊熱備

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。