有些业务场景需要保证mysql节点的数据强一致性,我们可以通过pxc集群来实现
#创建数据卷(存储路径:/var/lib/docker/volumes
)
docker volume create v1
docker volume create v2
docker volume create v3
提示:docker volume rm my-vol
删除数据卷,如果创建错了可以删除
#拉取镜像,建议拉取5.7.21版本 ,自测拉取5.7版本会一直阻塞,拉取最新版本,在运行容器时会报错
docker pull percona/percona-xtradb-cluster:5.7.21
#重命名
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
#创建网络
docker network create --subnet=172.30.0.0/24 pxc-network
注意:删除创建的静态网络docker network rm pxc-network
.如果创建错了可以删除
#创建容器
#第一节点
docker create -p 13306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node1 --net=pxc-network --ip=172.30.0.2 pxc
#第二节点(增加了CLUSTER_JOIN参数)
docker create -p 13307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node2 -e CLUSTER_JOIN=pxc_node1 --net=pxc-network --ip=172.30.0.3 pxc
#第三节点(增加了CLUSTER_JOIN参数)
docker create -p 13308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc_node3 -e CLUSTER_JOIN=pxc_node1 --net=pxc-network --ip=172.30.0.4 pxc
需要注意的是:先启动第一个节点,等到mysql客户端可以连接到服务后再启动其它节点。 启动节点:
docker start pxc_node1 && docker logs -f pxc_node1
启动成功1后再启动2和3,因为2和3要加入到1的集群中
docker start pxc_node2 && docker logs -f pxc_node2
docker start pxc_node3 && docker logs -f pxc_node3
#查看集群节点
show status like 'wsrep_cluster%';
如果出现如下图所示,恭喜你搭建成功