官方鏡像地址:https://hub.docker.com/r/percona/percona-xtradb-clusternode
docker pull percona/percona-xtradb-cluster
percona/percona-xtradb-cluster 太長,咱們換個名字叫作pxc,操做以下:mysql
docker tag percona/percona-xtradb-cluster pxc
並將開始拉去的鏡像刪除,操做以下:算法
docker rmi percona/percona-xtradb-cluster
出於安全考慮,將PXC集羣放置於docker內部網絡中。只需將宿主的端口與之映射並開放出來便可。sql
docker network create --subnet=172.18.0.0/24 net1
其中,--subnet=172.18.0.0/24自定義網段172.18.0.0,24是指24位子網掩碼 net1 網段名稱。docker
執行成功後,咱們能夠經過sudo docker inspect net1
查看內部網絡信息。數據庫
docker容器的運行規則:經過目錄映射的方法,將業務數據寫入到宿主機中。好處是若是容器故障,只需將容器刪除,從新啓用一個容器便可,這樣就不會丟失原來的數據。 因爲PXC較爲特殊,沒法直接使用映射目錄的方法作映射(使用後會閃退),故使用docker卷。 在命令行使用以下命令:安全
docker volume create --name v1 docker volume create --name v2 docker volume create --name v3
計劃建立3個數據庫節點,因此這裏對應建立3個數據卷。bash
docker run -d -p 3306:3306 -v v1:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -e CLUSTER_NAME=PXC \ -e XTRABACKUP_PASSWORD=123456 \ --privileged \ --name=node1 \ --net=net1 \ --ip 172.18.0.2 \ pxc
-d 默認在後臺運行, -p 3306(宿主):3306(容器) 端口映射,將容器3306端口映射到宿主3306端口 -v 目錄映射,將第四步建立的v1映射到容器/var/lib/mysql -e MYSQL_ROOT_PASSROWD 建立的用戶實例的密碼,默認實例root -e CLUSTER_NAME 集羣名稱, -e XTRABACKUP_PASSWORD 數據庫之間同步使用的密碼 --privileged 權限.給予最高權限 --name 給容器容命名 --net 使用內部網段 --ip 內部網段分到的地址服務器
須要注意的是容器啓動的速度雖然很快,可是pxc初始化是須要一點時間的(大概兩分鐘左右),必須等第一個容器初始化完成後再啓動第二個pxc容器,否則會報錯。網絡
測試鏈接成功後就能夠啓動其餘pxc容器了
在啓動其餘容器的時候須要更改映射的宿主機端口、容器的名稱,還有指定 IP 地址。
注意:在啓動其餘容器的時候須要更改映射的宿主機端口、容器的名稱,還有指定 IP 地址。
-e CLUSTER_JOIN=node1 用於鏈接第一個數據庫節點
docker run -d -p 3307:3306 -v v2:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -e CLUSTER_NAME=PXC \ -e XTRABACKUP_PASSWORD=123456 \ -e CLUSTER_JOIN=node1 \ --privileged \ --name=node2 \ --net=net1 \ --ip 172.18.0.3 \ pxc
docker run -d -p 3308:3306 -v v3:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -e CLUSTER_NAME=PXC \ -e XTRABACKUP_PASSWORD=123456 \ -e CLUSTER_JOIN=node1 \ --privileged \ --name=node3 \ --net=net1 \ --ip 172.18.0.4 \ pxc
用數據庫鏈接工具鏈接三個數據庫,在node建立數據庫test
CREATE database test;
若是其餘數據庫都同步過來那就沒有問題了。
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:123456 #數據庫負載均衡 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_2 172.18.0.4:3306 check weight 1 maxconn 2000 #使用keepalive檢測死鏈 option tcpka
/Users/xinaogudu/hproxy 是我放置配置文件的目錄。
docker run -dit -p 4001:8888 -p 4002:3306 \ -v /Users/xinaogudu/hproxy:/usr/local/etc/haproxy \ --privileged \ --net=net1 \ --name h1 \ --ip 172.18.0.5 \ haproxy
docker exec -it h1 bash
# 指定 haproxy 配置文件位置 haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg
create user 'haproxy'@'%' identified by '';