基于docker部署pxc mysql集群(亲身踩坑经历) - Go语言中文社区

基于docker部署pxc mysql集群(亲身踩坑经历)


1.PXC概述

公司架构之前用的是mysql原生cluster,经过讨论准备玩把骚操作(实际上是自己和自己讨论),经过技术选型将原本想要使用的TiDB换成了galera cluster。主要是因为TiDB官方推荐的Ansible太烧钱,需要多台物理服务器支持(其实是因为自己没有这个技术栈)。Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法,具体是个啥,各位麻烦百度一下,这篇文章主要讲一下实际部署经历以及踩过的坑。
网上太多的教程教的都是理想化的部署,而且没有一个按照原本的方式部署能成功的,总会出现各种各样的问题,这篇文章就拿我部署时候出现的问题,写个教程。

2.部署开始,缓慢起步

首先,你需要准备一个CentOS7的服务器,如果这个都没有,门口在右上角,请您离开,帮忙关下门谢谢。
然后,那我就开始了!等等,先自己装个docker,如果没有装,再您马的见,请百度。

2.1镜像拉取

 docker pull percona/percona-xtradb-cluster

这里没什么坑,只是要注意下载速度,因为docker默认为国外镜像节点,可能会断掉。
成功截图

2.2改个名

docker tag docker.io/percona/percona-xtradb-cluster pxc

不然太长了

2.3建个网络

docker network create --subnet=172.18.0.0/24   net1

2.4创建3个docker卷

这一步看自己需求,想建几个建几个,我反正建了3个,直到这一步,基本都不会出错。

docker volume create v1
docker volume create v2
docker volume create v3

2.5主节点启动

docker run -d -p 3307: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

密码自己改一下,但是基本上我试过的,-e配置的MYSQL_ROOT_PASSWORD没啥用,在docker里面登录不进去。
登录docker的node1镜像里面登录mysql

docker exec -it node1 /bin/sh

第一个坑来了

sh-4.2$ mysql -uroot -p
mysql: [ERROR] unknown option '--ck

原因是什么呢,打开 vi /etc/mysql/node.cnf 你会发现,多了一个ck,就很奇怪。赶紧删掉,然后登录进去。
第二个坑来了,你原本设的密码,一点用都没有,反正我是进不去。

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

这时候请使用这个命令进去改个密码

mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
mysql -uroot -p

不用输密码,修改密码,然后给root开放远程访问权限。

update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
flush privileges;

查看下docker日志

 WSREP: Synchronized with group, ready for connections

基本上没啥问题了,接下来就是第二个,第三个节点的启动。

2.6 v2节点启动

docker run -d -p 3308: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

第三个坑然后看看日志,你就会发现起不来,这个卡了我一天时间解决。

2019-11-07T07:03:30.960490Z 0 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '172.18.0.3' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' --parent '1' --mysqld-version '5.7.27-30-57'   '' : 2 (No such file or directory)
2019-11-07T07:03:30.960538Z 0 [ERROR] WSREP: Failed to read uuid:seqno from joiner script.
2019-11-07T07:03:30.960562Z 0 [ERROR] WSREP: SST script aborted with error 2 (No such file or directory)
2019-11-07T07:03:30.960609Z 0 [ERROR] WSREP: SST failed: 2 (No such file or directory)
2019-11-07T07:03:30.960633Z 0 [ERROR] Aborting

最终发现,是因为mysql数据库里面没有原本配置的集群的同步账户,这不是坑爹嘛!解决方案,在主节点的mysql里添加账户呗,密码就是原本docker启动命令里的密码。

GRANT ALL PRIVILEGES ON *.* TO 'xtrabackup'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;

2.6 v3节点启动

docker run -d -p 3309: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

3 然后最后一步了

当然是远程连接下试试了,然后就成功了。其他简单的坑我就不多说了,感觉原生镜像好多坑呀,好在我成功了。希望你们都能搞定吧,不说了,我去搬砖了!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39010411/article/details/102947904
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢