docker mysql pxc集群

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密码保持一致就行。

2.4 C节点创建PXC服务,同B节点。

3. 验证集群同步。创建表,加入数据,同步成功。

4. 后续加入HAPROXY和KEEPALIVED负载均衡服务

猜你喜欢

转载自www.cnblogs.com/everythingok001/p/11652674.html