MySQL集群通过PXC 集群方案( Percona XtraDB Cluster )搭建
docker pull percona/percona-xtradb-cluster
出于安全考虑,将PXC集群放置于docker内部网络中。只需将宿主的端口与之映射并开放出来即可
docker network create --subnet=172.18.0.0/24 net1
执行成功后,查看net1详细信息执行如下命令
docker inspect net1
返回结果
[
{
"Name": "net1",
"Id": "cfe8279ff4bff1561c33bc2aec88f37800829f7fd5377ac284005c4c8a275e07",
"Created": "2020-04-27T00:12:30.448769804+08:00",
"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": {}
}
]
PXC较为特殊,无法直接使用映射目录的方法做映射(使用后会闪退),故使用docker卷
docker volume create --name volume1
执行成功后,想查看映射的地址执行如下命令
docker inspect volume1
返回结果
[
{
"CreatedAt": "2020-05-15T13:04:24+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/volume1/_data",
"Name": "volume1",
"Options": {},
"Scope": "local"
}
]
docker volume create --name volume2
docker volume create --name volume3
docker volume create --name volume4
docker volume create --name volume5
docker run -d -p 3306:3306 -v volume1:/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 percona/percona-xtradb-cluster
-d:默认在后台运行,为守护进程
-p:3306(宿主):3306(容器)端口映射,将容器3306端口映射到宿主3306坤口
-v v1:/var/lib/mysql:目录映射,将第三步创建的v1映射到容器/var/lib/mysql
-e MYSQL_ROOT_PASSROWD:创建的用户实例的密码,默认实例root
-e CLUSTER_NAME:集群名称
-e XTRABACKUP_PASSWORD:数据库之间同步使用的密码
--privileged:权限给予最高权限
--name:给容器容命名
--net:使用内部网段
--ip:内部网段分到的地址
percona:percona镜像
docker run -d -p 3307:3306 -v volume2:/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 percona/percona-xtradb-cluster
docker run -d -p 3308:3306 -v volume3:/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 percona/percona-xtradb-cluster
docker run -d -p 3309:3306 -v volume4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node4 --net=net1 --ip 172.18.0.5 percona/percona-xtradb-cluster
docker run -d -p 3310:3306 -v volume5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node5 --net=net1 --ip 172.18.0.6 percona/percona-xtradb-cluster
用Navicat for mysql连接到之前四个节点的数据库,在四个节点数据库中 在任意一个数据库进行建库、建表、增删改查数据等操作后,再查看其它节点进行查看,或者在其它不同的节点进行操作看是否数据能成功进行同步