PXC多主集群架构
1 PXC架构思维导图
2 架构示意图
2.1 数据节点读写示意图
2.2 节点信息交互图
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
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
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
3.4 修改主机名称(三个节点都执行)
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
[[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软件
节点2,3安装ntpdate客户端
启动ntpd服务,并设置成开机启动
systemctl start ntpd
systemctl enable ntpd
节点1修改ntp.conf配置文件,指定一个外部同步服务器,这里就指定本地
server 127.127.1.0 prefer
如果不指定此参数,会报如下错误
节点2,3
创建crontab定时和节点一同步
*/10 * * * * ntpdate PXCnode04.byton.com
3.7 官网下载Percona集群的rpm包
下载地址: https://www.percona.com/downloads/percona-release/redhat/
选择LATEST版本,下载到本地并上传至三个节点的/soft目录下
3.8 rpm方式安装percona集群yum包
检查/etc/yum.repo/目录下是否有新增配置文件
报错信息如下
暂时忽略报错信息
Yum list是正常的,认证没通过
3.8 安装Percona软件(三个节点都执行)
更具报错信息安装依赖的安装包
yum install perl* rsync lsof socat
依赖包安装完成
继续安装percona集群软件包,采用yum的方式
还是有问题,由于系统采用最小化模式安装的,缺少libev.so.4类库包,我们可以从网上下载源码包或者rpm包安装
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/
再次安装percona集群软件包
yum install Percona-XtraDB-Cluster-57
主要安装如下软件包
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
安装的过程中可能会出现,网络不好,耐心等待
至此节点1 Percona-XtraDB-Cluster软件安装完成,按照此步骤完成节点2,节点3的软件安装
即可
3.9 配置mysql和集群配置文件
集群配置文件主要包括如下:
/etc/my.cnf 已经被修改过,!includedir /etc/percona-xtradb-cluster.conf.d/涵盖了集群目录下的三个配置文件
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}
修改mysqld.cnf配置文件如下
修改wsrep.cnf配置文件如下
过滤掉注释和空集群配置信息如下
拷贝节点1的配置文件到其他节点
3.10 启动三节点多主PXC集群
启动节点1
报错信息
查看日志,这里路径是/var/log/mysqld.log
报错这个信息
查看此路径下的文件属主和权限
属组和属主都是mysql 权限是读写权限,排查这里的问题,继续研究日志
未能建立集群的连接
报错信息地址已经在使用
找到问题所在pxc-cluster集群名称已经使用过了,这里修改集群名称在重新启动集群的节点1
三个节点同时修改集群名称
再次启动集群节点1
虽然可以正常启动,但是有一个code=exited, status=2,很显然这个状态有问题,再次关闭节点1的服务,然后再次重启试试
OK,一切就绪,这次mysql节点1服务正常。
3.11 创建UDFS功能函数
启动的时候mysql root用户默认密码放在/var/log/mysqld.log里面
grep "temporary password" /var/log/mysqld.log
直接登陆mysql集群节点1
创建集群UDF函数
由于是DDL语句,会自动提交,下面继续启动其他两个节点
3.12 启动其他集群节点
节点2报错了,继续查看报错信息
journalctl -xe
报错信息里面说明mysqld_safe with PID 2635 has already exited: FAILURE
根据报错提示,找到mysqld配置文件配置pid的目录,查询此目录下是否真的存在pid进程文件,很遗憾,没有找到,操作系统上面也没有发现进程号为2635的进程,报错日志存在欺骗性。
继续查看/var/log/mysqld.log日志看看能否找到线索
日志的最新信息,表明节点2加入不了集群,选择关闭。
1 OPEN 节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群
2 PRIMARY 节点已处于集群中,在新节点加入时,选取donor进行数据同步时会产生的状态
3 JOINER 节点处于等待接收/接收同步文件时的状态
4 JOINED 节点完成数据同步,但有部分数据没跟上,在尝试保持和集群进度一致的过程状态
例如某个节点故障后,重新加入集群,在追赶集群进度时的状态
5. SYNCED 节点正常提供服务的状态,表示已经同步完成并和集群进度保持一致。
6. DONOR 节点处于为新节点提供全量数据数据同步时的状态。此时该节点对客户端不提供服务。
继续向上看日志
第一个报错信息UUID,估计和这个没有太大关系,只是报错的表象
第二个和第三个报错信息都暗示着WSREP_SST_XTRABACKUP-V2这个参数有问题,几群的参数配置文件在/etc/percona-xtradb-cluster.conf.d/wsrep.conf,打开配置文件
暂且把wsrep_sst_method调整为rsync,其他节点做同样操作
继续启动节点2和节点3
节点2启动起来,但是依然有报错信息,重新启动试试
节点2正常启动起来,无报错,按照此方法启动节点3,节点3也正常启动起来了,至此三个节点的多主多写的集群架构搭建完成
3.13模拟数据验证集群同步信息
在node04节点上插入一条数据
在节点5上
在节点6上
同理任意挑选一个节点并insert一条数据,然后在其他所有节点查看。
在其他节点查看表记录
查看集群状态
wsrep_cluster_size:3 ----说明集群有三个节点
wsrep_cluster_status: Primary ----说明集群都是Primary状态,都是可读写状态
wsrep_cluster_weight:3 ----权重都为3,一样的权重