基于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 然后最后一步了

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值