docker mysql pxc集群
引言:网络上有好多搭建集群的文章,但是没有我需要的。研究了一段时间,自己可以搭建成功,并且是基于多台服务器。
作者:everythingok
前台:docker安装忽略,本文章从swarm集群开始。有服务器A,B,C各有自己的外网地址(当然内网可以连通更好),并且已经将互相开放端口。
cnentos7以上开放对ip开放任意端口
firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="45.124.124.162" accept"
firewall-cmd --reload
1. SWARM集群
1.1 A节点建立master集群
docker swarm init --advertise-addr A.A.A.A:2377
[root@xq-test-docker-master01 svn]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-274lmt9n21byry6tqshvcldfot2t8cvd455308l5d71a2g2t96-brff30kahfeu9jfokocurp9hj A.A.A.A:2377
1.2 B 节点加入集群
docker swarm join --token SWMTKN-1-274lmt9n21byry6tqshvcldfot2t8cvd455308l5d71a2g2t96-brff30kahfeu9jfokocurp9hj A.A.A.A:2377
1.3 C 节点加入集群
docker swarm join --token SWMTKN-1-274lmt9n21byry6tqshvcldfot2t8cvd455308l5d71a2g2t96-brff30kahfeu9jfokocurp9hj A.A.A.A:2377
1.4 A节点查看集群情况
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
hmavp6p0u9r1dgjl2fxtdorao * 161 Ready Active Leader 19.03.2
tzoini4a1hka4rawnzxxky84i 162 Ready Active 19.03.2 11maitff254rab4atq9e7qd2d 164 Ready Active 19.03.2
1.5 A节点建立overlay网络
1.5.1 建立网络
docker network create -d overlay --attachable pxc-network
1.5.2 查看网络
docker network inspect pxc-network
问题 1.在B、C节点执行docker network inspect pxc-network命令查不到网络,但是是实际可用的。
2. 搭建PXC集群
2.1 A、B、C节点拉取percona-xtradb-cluster
2.1.1 拉取镜像
docker pull percona/percona-xtradb-cluster
2.1.2 给镜像修改名字
docker tag docker.io/percona/percona-xtradb-cluster pxc
2.2 A节点创建PXC服务
2.2.1 创建volume,这一步必须要,因为pxc服务要挂载。
docker volume create mysql-data-node
docker volume inspect mysql-data-node //可以查看挂载点路径等信息
2.2.2 A节点启动pxc服务
docker run -d -e MYSQL_ROOT_PASSWORD=******** -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=******** --net=pxc-network --privileged -p 3306:3306 -v mysql-data-node:/var/lib/mysql --name=pxc-node-1 pxc
问题1. 在/etc/mysql/node.cnf配置文件里最后一行里多一个ck字符,去掉这个字符。
问题2. 启动完成之后root连接不成功,进入pxc服务,修改root密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' flush privileges;
问题3. 如果还是不能连接,这时候修改配置文件/etc/mysql/node.cnf,加入 skip-name-resolve。
问题4. 我要两遍docker run才能真正启动,还没时间去研究这个问题。
注意. 使用navicat连接mysql等服务真正可以使用的时候再去创建其他节点。
2.3 B节点创建PXC服务
2.3.1 创建volume
docker volume create mysql-data-node
docker volume inspect mysql-data-node //可以查看挂载点路径等信息
2.3.2 A节点启动pxc服务
docker run -d -e MYSQL_ROOT_PASSWORD=******** -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=******** --net=pxc-network --privileged -p 3306:3306 -v mysql-data-node:/var/lib/mysql --name=pxc-node-1 pxc
docker run -d -e MYSQL_ROOT_PASSWORD=******** -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=******* --net=pxc-network -e CLUSTER_JOIN=pxc-node-1 --privileged -p 3306:3306 -v mysql-data-node:/var/lib/mysql --name=pxc-node-2 pxc
注意,其他节点命令多一个-e CLUSTER_JOIN=pxc-node-1,意思是和哪个节点进行同步
我在做swarm集群测试的时候,有时候会提示network不存在的问题。这个没有实际去验证到底是什么原因导致的,我是将集群解散,然后重新加入。后边就没产生这个问题
我这边会发现第二个节点启动失败,查找原因是PXC服务没有默认创建一个xtrabackup用户,需要手工建立一个用户。
GRANT ALL PRIVILEGES ON *.* TO 'xtrabackup'@'localhost' IDENTIFIED BY '*****' flush privileges;
这个密码和B节点的XTRABACKUP_PASSWORD密码保持一致就行。