PXC多主集群架构

1 PXC架构思维导图

PXC多主集群架构

 

2 架构示意图

2.1 数据节点读写示意图

PXC多主集群架构

 

2.2 节点信息交互图

 

PXC多主集群架构

3.PXC节点规划和集群服务

Host主机操作系统版本 节点IP 主机名称

Centos7.5     10.20.8.34     PXCnode04     PXCnode04.byton.com

Centos7.5     10.20.8.35     PXCnode05     PXCnode05.byton.com

Centos7.5     10.20.8.36     PXCnode06     PXCnode06.byton.com

3.1 修改IP地址(三个节点都修改)

节点1需要修改的地方

BOOTPROTO=static

IPADDR=10.20.8.34

NETMASK=255.255.255.0

GATEWAY=10.20.8.1

DNS1=10.13.0.251

ONBOOT=yes

 

节点2需要修改的地方

IPADDR=10.20.8.35

NETMASK=255.255.255.0

GATEWAY=10.20.8.1

DNS1=10.13.0.251

#由于是clone出来的主机,需要添加物理网卡mac地址,并注释掉UUID

HWADDR=00:50:56:94:a1:25

#UUID=e7dc6f03-1843-4eba-8aa5-d60a93d96187

 

节点3需要修改的地方

BOOTPROTO=static

IPADDR=10.20.8.36

NETMASK=255.255.255.0

GATEWAY=10.20.8.1

DNS1=10.13.0.251

#由于是clone出来的主机,需要添加物理网卡mac地址,并注释掉UUID

HWADDR=00:50:56:94:8b:44

#UUID=e7dc6f03-1843-4eba-8aa5-d60a93d96187

ONBOOT=yes

PXC多主集群架构

 

3.2 禁用firewalld,禁用selinux(三个节点都执行)

不禁用防火墙,禁用端口的方式:

firewall-cmd --add-port=3306/tcp –permanent

firewall-cmd --add-port=4567/tcp –permanent

firewall-cmd --add-port=4568/tcp –permanent

firewall-cmd --add-port=4444/tcp –permanent

firewall-cmd --reload

PXC多主集群架构

 

3.3 修改/etc/host主机信息(三个节点都执行)

10.20.8.34   PXCnode04.byton.com  PXCnode04

10.20.8.35   PXCnode05.byton.com  PXCnode05

10.20.8.36   PXCnode06.byton.com  PXCnode06

 

scp /etc/hosts 10.20.8.35:/etc/hosts

scp /etc/hosts 10.20.8.36:/etc/hosts

PXC多主集群架构

 

3.4 修改主机名称(三个节点都执行)

PXC多主集群架构

 

3.5 搭建本地yum源(三个节点都执行)

scp /etc/yum.repos.d/local.repo 10.20.8.35:/etc/yum.repos.d/local.repo

scp /etc/yum.repos.d/local.repo 10.20.8.36:/etc/yum.repos.d/local.repo

PXC多主集群架构

 

[[email protected] yum.repos.d]# yum clean all

Loaded plugins: fastestmirror

Cleaning repos: local_server

Cleaning up everything

Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos

 

[[email protected] yum.repos.d]# yum makecache

Loaded plugins: fastestmirror

Determining fastest mirrors

local_server                                                                                                                                                                            | 3.6 kB  00:00:00

(1/4): local_server/group_gz                                                                                                                                                            | 166 kB  00:00:00

(2/4): local_server/primary_db                                                                                                                                                          | 5.9 MB  00:00:00

(3/4): local_server/filelists_db                                                                                                                                                        | 6.9 MB  00:00:00

(4/4): local_server/other_db                                                                                                                                                            | 2.5 MB  00:00:00

Metadata Cache Created

3.6 搭建本地时间同步服务器(节点1为时间同步服务器,节点2,3同步节点1时间)

节点1:Yum安装ntp软件

PXC多主集群架构

 

节点2,3安装ntpdate客户端

PXC多主集群架构

 

启动ntpd服务,并设置成开机启动

systemctl start ntpd

systemctl enable ntpd

节点1修改ntp.conf配置文件,指定一个外部同步服务器,这里就指定本地

server 127.127.1.0 prefer

如果不指定此参数,会报如下错误

PXC多主集群架构

 

节点2,3

创建crontab定时和节点一同步

*/10 * * * * ntpdate PXCnode04.byton.com

PXC多主集群架构

 

3.7 官网下载Percona集群的rpm包

下载地址: https://www.percona.com/downloads/percona-release/redhat/

选择LATEST版本,下载到本地并上传至三个节点的/soft目录下

PXC多主集群架构

 

3.8 rpm方式安装percona集群yum包

PXC多主集群架构

 

检查/etc/yum.repo/目录下是否有新增配置文件

PXC多主集群架构

 

报错信息如下

PXC多主集群架构

 

暂时忽略报错信息

Yum list是正常的,认证没通过

PXC多主集群架构

 

3.8 安装Percona软件(三个节点都执行)

 

PXC多主集群架构

PXC多主集群架构

 

更具报错信息安装依赖的安装包

yum install perl* rsync lsof socat

PXC多主集群架构

 

依赖包安装完成

继续安装percona集群软件包,采用yum的方式

PXC多主集群架构

 

还是有问题,由于系统采用最小化模式安装的,缺少libev.so.4类库包,我们可以从网上下载源码包或者rpm包安装

PXC多主集群架构

 

scp epel.repo.bak 10.20.8.34:/etc/yum.repos.d/

scp epel.repo.bak 10.20.8.35:/etc/yum.repos.d/

scp epel.repo.bak 10.20.8.36:/etc/yum.repos.d/

 

PXC多主集群架构

再次安装percona集群软件包

yum install Percona-XtraDB-Cluster-57

 

 

PXC多主集群架构

PXC多主集群架构

主要安装如下软件包

Percona-XtraDB-Cluster-server-57-5.7.28-31.41.2.el7.x86_64                                                                                                                                 

Percona-XtraDB-Cluster-57-5.7.28-31.41.2.el7.x86_64                                                                                                                                         

percona-xtrabackup-24-2.4.20-1.el7.x86_64                                                                                                                                                   

qpress-11-1.el7.x86_64                                                                                                                                                                     

Percona-XtraDB-Cluster-shared-compat-57-5.7.28-31.41.2.el7.x86_64                                                                                                                          

  Percona-XtraDB-Cluster-shared-57-5.7.28-31.41.2.el7.x86_64                                                                                                                                  

  Percona-XtraDB-Cluster-client-57-5.7.28-31.41.2.el7.x86_64                                                                                                                                  

  mariadb-libs-5.5.56-2.el7.x86_64       

 

安装的过程中可能会出现,网络不好,耐心等待

PXC多主集群架构    

至此节点1 Percona-XtraDB-Cluster软件安装完成,按照此步骤完成节点2,节点3的软件安装

即可

3.9 配置mysql和集群配置文件

集群配置文件主要包括如下:

/etc/my.cnf   已经被修改过,!includedir /etc/percona-xtradb-cluster.conf.d/涵盖了集群目录下的三个配置文件

PXC多主集群架构

PXC多主集群架构

 

 

mysqld.cnf                ----数据库主服务进程的配置文件

mysqld_safe.cnf      ----安全启动方式下的配置文件

wsrep.cnf                 ----集群配置文件,也是集群里最主要的配置文件

首先备份这三个配置文件,然后做修改

cp /etc/percona-xtradb-cluster.conf.d/mysqld.cnf{,.bak}

cp /etc/percona-xtradb-cluster.conf.d/mysqld_safe.cnf{,.bak}

cp /etc/percona-xtradb-cluster.conf.d/wsrep.cnf{,.bak}

 

PXC多主集群架构

修改mysqld.cnf配置文件如下

PXC多主集群架构

 

修改wsrep.cnf配置文件如下

PXC多主集群架构

 

过滤掉注释和空集群配置信息如下

 

PXC多主集群架构

拷贝节点1的配置文件到其他节点

 

PXC多主集群架构

3.10 启动三节点多主PXC集群

启动节点1

报错信息

PXC多主集群架构

 

查看日志,这里路径是/var/log/mysqld.log

PXC多主集群架构

 

报错这个信息

查看此路径下的文件属主和权限

PXC多主集群架构

 

属组和属主都是mysql 权限是读写权限,排查这里的问题,继续研究日志

PXC多主集群架构

 

未能建立集群的连接

PXC多主集群架构

 

报错信息地址已经在使用

PXC多主集群架构

 

找到问题所在pxc-cluster集群名称已经使用过了,这里修改集群名称在重新启动集群的节点1

三个节点同时修改集群名称

PXC多主集群架构

 

再次启动集群节点1

PXC多主集群架构

 

虽然可以正常启动,但是有一个code=exited, status=2,很显然这个状态有问题,再次关闭节点1的服务,然后再次重启试试

PXC多主集群架构

 

OK,一切就绪,这次mysql节点1服务正常。

3.11 创建UDFS功能函数

启动的时候mysql root用户默认密码放在/var/log/mysqld.log里面

grep "temporary password" /var/log/mysqld.log

 

PXC多主集群架构

直接登陆mysql集群节点1

PXC多主集群架构

 

创建集群UDF函数

PXC多主集群架构

 

由于是DDL语句,会自动提交,下面继续启动其他两个节点

3.12 启动其他集群节点

PXC多主集群架构

 

节点2报错了,继续查看报错信息

 journalctl -xe

PXC多主集群架构

 

报错信息里面说明mysqld_safe with PID 2635 has already exited: FAILURE

PXC多主集群架构

 

根据报错提示,找到mysqld配置文件配置pid的目录,查询此目录下是否真的存在pid进程文件,很遗憾,没有找到,操作系统上面也没有发现进程号为2635的进程,报错日志存在欺骗性。

 

继续查看/var/log/mysqld.log日志看看能否找到线索

PXC多主集群架构

 

日志的最新信息,表明节点2加入不了集群,选择关闭。

1 OPEN 节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群

2 PRIMARY 节点已处于集群中,在新节点加入时,选取donor进行数据同步时会产生的状态

3 JOINER 节点处于等待接收/接收同步文件时的状态

4 JOINED 节点完成数据同步,但有部分数据没跟上,在尝试保持和集群进度一致的过程状态

         例如某个节点故障后,重新加入集群,在追赶集群进度时的状态

5. SYNCED 节点正常提供服务的状态,表示已经同步完成并和集群进度保持一致。

6. DONOR 节点处于为新节点提供全量数据数据同步时的状态。此时该节点对客户端不提供服务。

 

继续向上看日志

PXC多主集群架构

 

第一个报错信息UUID,估计和这个没有太大关系,只是报错的表象

第二个和第三个报错信息都暗示着WSREP_SST_XTRABACKUP-V2这个参数有问题,几群的参数配置文件在/etc/percona-xtradb-cluster.conf.d/wsrep.conf,打开配置文件

PXC多主集群架构

PXC多主集群架构

 

 

暂且把wsrep_sst_method调整为rsync,其他节点做同样操作

继续启动节点2和节点3

PXC多主集群架构

 

节点2启动起来,但是依然有报错信息,重新启动试试

PXC多主集群架构

 

节点2正常启动起来,无报错,按照此方法启动节点3,节点3也正常启动起来了,至此三个节点的多主多写的集群架构搭建完成

 

3.13模拟数据验证集群同步信息

 

PXC多主集群架构

在node04节点上插入一条数据

PXC多主集群架构

 

在节点5上

PXC多主集群架构

 

在节点6上

 

PXC多主集群架构

同理任意挑选一个节点并insert一条数据,然后在其他所有节点查看。

 

PXC多主集群架构

在其他节点查看表记录

 

PXC多主集群架构

查看集群状态

PXC多主集群架构

 

wsrep_cluster_size:3                        ----说明集群有三个节点

wsrep_cluster_status: Primary       ----说明集群都是Primary状态,都是可读写状态

wsrep_cluster_weight:3                  ----权重都为3,一样的权重