mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导

背景

最近在进行 MySQL 的 PXC 集群搭建使用和研究

前期已完成了一篇记录文章 : 【CentOS7 下 MySQL 之 PXC 集群部署【Docker+多机多节点】】

但是,毕竟不是所有人都熟悉 docker

而作为开发人员,还是习惯于原生状态的安装流程

所以,在此整理官方指导的PXC 集群配置步骤

欢迎指摘 …

【注】:Percona XtraDB Cluster(简称 PXC 集群) —— 业界主流的 MySQL 集群方案

环境

CentOS 版本:CentOS Linux release 7.9.2009 (Core)

PXC 版本:Percona XtraDB Cluster 5.7

前期准备

【注】: PXC 集群部署,会自行安装 MySQL 服务,建议操作前卸载原来的 MySQL

1). 三台 Vmware 虚拟机

PXC 集群节点越多,数据同步的速度就越慢(建议不要太多!)

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第1张图片

在此,我以三台创建运行的 CentOS7 作为宿主机,进行配置操作演示

虚拟机 ip

端口

角色

192.168.80.221

3306

第一个 节点

192.168.80.222

3306

第二个 节点

192.168.80.223

3306

第三个 节点

注意各节点硬件配置尽量相同

因为短板效应,PXC 集群数据同步的速度取决配置最低的节点

PXC 集群只支持 InnoDB 引擎

2). 卸载 mariadb-libs

因为 CentOS7 默认捆绑安装了 mariadb-libs,为了不影响 PXC 的使用,需要先卸载!

yum -y remove mari*

3). 开启四个 PXC 环境所涉及的端口

3306:# mysql 实例端口

4567:# PXC cluster 相互通讯的端口

4444:# 用于 SST(State Snapshot Transfer): 全量传输

4568:# 用于 IST(Incremental state Transfer): 增量传输传送

以鄙人使用宝塔面板操作为例,注意以上端口的开启:

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第2张图片

4). 部署前建议关闭 SELINUX、将 MySQL 数据库服务停止

安全增强型 Linux(Security-Enhanced Linux)SELinux 主要由美国国家安全局开发

把 "SELINUX" 属性值设置成 disabled,然后 reboot 重启

vi /etc/selinux/config

5). 配置 ntp 服务,确保时间同步

这一步,多数经验没有提及,我是操作 docker 时发现需要配置的哦!

[root@localhost ~]# yum -y install ntp ntpdate

[root@localhost ~]# ntpdate 0.asia.pool.ntp.org

[root@localhost ~]# hwclock --systohc

[root@localhost ~]# date

2021年 01月 08日 星期五 09:54:23 CST

搭建 PXC 集群

1). 下载解压缩工具 qpress、PXC 安装包

为方便后期对 PXC 集群操作的使用,需要下载 "qpress" >>> 下载地址

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第3张图片

然后就是 PXC 安装包的下载了

一般指导都是支持在线安装的,但我发现,虚拟机里无法安装

本身下载速度慢,而且最新版本资源比较大

此处,我以下载 【Percona XtraDB 群集 5.7】 为例

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第4张图片

此时我进行安装发现,依赖关系提示:"需要:percona-xtrabackup-24 >= 2.4.21"

所以,继续下载了 【Percona-XtraBackup-2.4】

【提示】

1 本人发现:不论在官网使用浏览器下载,还是使用 wget 命令下载都提示文件缺失,解压异常,最后选择迅雷下载

2 有需要这些资源的,在此提供【百度云链接,提取码:fd0g 】

3 如果是宝塔系统,已安装了 mysql 会有冲突,所以要卸掉原来的 mysql 数据库

将解压得到的所有 ".rpm" 文件,上传到 Linux 系统,此处我选择的是 "/www/server/download"

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第5张图片

2). 执行安装 PXC 命令

在三个虚拟机上分别安装 PXC 程序

在上一步存放 ".rpm" 文件的目录中,执行命令:

yum localinstall *.rpm

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第6张图片

注意,如果提示还有其他需要使用的依赖包,进行下载后再操作一遍命令!

3). 修改 "mysqld.cnf" 文件

上一步命令执行完毕后,如果成功

可以注意到 "etc/my.cnf" 文件中出现如下信息

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第7张图片

其实,我们操作的配置文件,只是 "/etc/percona-xtradb-cluster.conf.d/" 目录中的三个!

mysql 的常用配置信息都在 "mysqld.cnf" 文件, pxc 集群的配置信息都在 "wsrep.cnf" 文件

在 "mysqld.cnf"中配置信息对比参考如下(注意,我添加了三个参数)

并且,对参数 "server-id",赋值唯一的ID (三台服务器都要配置)

# Template my.cnf for PXC

# Edit to your requirements.

[client]

socket=/var/lib/mysql/mysql.sock

[mysqld]

#PXC集群中MySQL实例的唯一ID,不能重复,必须是数字

server-id=1

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

log-bin

log_slave_updates

expire_logs_days=7

#数据库字符集

character_set_server = utf8

#运行远程访问的IP地址

bind-address = 0.0.0.0

#跳过DNS解析

skip-name-resolve

#skip-grant-tables

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

4). 新建传送用户

首先,查看默认的 mysql 登录密码 cat /var/log/mysqld.log | grep "A temporary password"

以下面的打印信息为例,默认账号 root,密码为:BJuk-xlad8XS

[root@localhost download]# cat /var/log/mysqld.log | grep "A temporary password"

2021-01-25T08:33:57.335210Z 1 [Note] A temporary password is generated for root@localhost: BJuk-xlad8XS

初始化,建议参考 【附录 - 如何重置 root 密码】,感觉出错少,更加方便

账号[adminPXC] 及密码[201107070]自定义即可

用于 PXC 集群中的数据传输

依次执行下面三条 SQL 语句:

CREATE USER 'adminPXC'@'localhost' IDENTIFIED BY '201107070';

GRANT all privileges ON *.* TO 'adminPXC'@'localhost';

FLUSH PRIVILEGES;

【提示一】 用户名密码,要与配置文件 "wsrep.cnf" 中的 wsrep_sst_auth="adminPXC:201107070" 对应

【提示二】 三台服务器都要配置,mysql 的重启命令: systemctl restart mysql.service

【提示三】 在 节点启动前,最好 关闭 mysql 服务: systemctl stop mysql.service

5). 第一个节点【PXC1】

本次演示,我选择 [192.168.80.221] ,作为第一个节点主机

▶ 修改 "wsrep.cnf" 的 PXC 配置信息

基本重要的配置参数,都做了解释

下面展示一下第一个节点的配置信息:

[mysqld]

# Path to Galera library

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

# Cluster connection URL contains IPs of nodes

#If no IP is found, this implies that a new cluster needs to be created,

#in order to do that you need to bootstrap this node

#PXC集群节点的IP

wsrep_cluster_address=gcomm://192.168.80.221,192.168.80.222,192.168.80.223

# In order for Galera to work correctly binlog format should be ROW

#基于ROW复制(安全可靠)

binlog_format=ROW

# MyISAM storage engine has only experimental support 默认引擎

default_storage_engine=InnoDB

# Slave thread to use

wsrep_slave_threads= 8

wsrep_log_conflicts

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera

#主键自增长不锁表

innodb_autoinc_lock_mode=2

# Node IP address

#当前节点的IP地址

#wsrep_node_address=192.168.80.221

# Cluster name PXC 集群的名称

wsrep_cluster_name=pxc-moTzxx

#If wsrep_node_name is not specified, then system hostname will be used

#当前节点的名称

wsrep_node_name=pxc1

#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER

#同步严厉模式

pxc_strict_mode=ENFORCING

# SST method 同步方法

wsrep_sst_method=xtrabackup-v2

#Authentication for SST method 同步使用的账户

wsrep_sst_auth="adminPXC:201107070"

每个主机的 server-id 和 wsrep_node_addres、wsrep_node_name 保持不同即可

▶ 第一个节点启动

第一个节点启动的命令为:

systemctl start [email protected]

查看状态,可以通过指令

systemctl status [email protected]

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第8张图片

此处,附上对第一个节点的操作指令

systemctl start [email protected]

systemctl stop [email protected]

systemctl restart [email protected]

systemctl status [email protected]

为了操作方便,建议可以使用 "Navicat" 等工具进行连接

执行 SQL 语句:show status like 'wsrep_cluster%';

显示效果如下:

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第9张图片

【提示】: 一定要等第一个节点启动,可以连接后,再考虑第二个、第三个节点的启动!

6). 第二个节点【PXC2】

本次演示,我选择 [192.168.80.222] ,作为第二个节点主机

注意:非主节点的管理命令(非第一个启动的 PXC 节点)

service mysql start

service mysql stop

service mysql restart

service mysql status

为了对比参考,此处展示第二个节点的配置信息(其他的就没必要了)

[mysqld]

# Path to Galera library

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

# Cluster connection URL contains IPs of nodes

#If no IP is found, this implies that a new cluster needs to be created,

#in order to do that you need to bootstrap this node

#PXC集群节点的IP

wsrep_cluster_address=gcomm://192.168.80.221,192.168.80.222,192.168.80.223

# In order for Galera to work correctly binlog format should be ROW

#基于ROW复制(安全可靠)

binlog_format=ROW

# MyISAM storage engine has only experimental support 默认引擎

default_storage_engine=InnoDB

# Slave thread to use

wsrep_slave_threads= 8

wsrep_log_conflicts

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera

#主键自增长不锁表

innodb_autoinc_lock_mode=2

# Node IP address

#当前节点的IP地址

#wsrep_node_address=192.168.80.222

# Cluster name PXC 集群的名称

wsrep_cluster_name=pxc-moTzxx

#If wsrep_node_name is not specified, then system hostname will be used

#当前节点的名称

wsrep_node_name=pxc2

#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER

#同步严厉模式

pxc_strict_mode=ENFORCING

# SST method 同步方法

wsrep_sst_method=xtrabackup-v2

#Authentication for SST method 同步使用的账户

wsrep_sst_auth="adminPXC:201107070"

启动后,打印信息如下:

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第10张图片

第三个节点 【PXC3】基本操作一样,只是配置文件的参数稍有不同

7). 测试 PXC 集群部署效果

在此,我将三个成功启动的 mysql 服务,通过 "Navicat" 连接

在第一个节点上,创建一个数据库 "test_pxc"

进而, 创建了一个数据表 "pxc_users"

然后,随意,在数据表中添加了几条记录

打开第二个节点、第三个节点

刷新,会发现也会有同样的数据库,数据表

继而修改任意一个节点的数据,

会发现,其他节点也会同步更新

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第11张图片

PXC 节点重启问题

【官方 - 重新启动集群节点】 不同于 Replication 集群的重启操作,PXC 集群需要分好几种情况

▶ 强行关机之后,PXC 集群无法启动

这种情况常见于测试练习时,虚拟机关机的情况

以我的操作经历为例:

昨天直接关闭所有的虚拟机,

今天想着继续 PXC集群的测试

发现,都无法启动了

提示信息如下:

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第12张图片

部分网上经验,是:

查看一下各个虚拟机中的 "/var/lib/mysql/grastate.dat" 文件

然后,将 "safe_to_bootstrap: 1" 的主机作为第一个节点进行启动

但是,我发现所有的主机参数都为 "0"

此时我的解决方案为:

选中其中一个主机,将 "safe_to_bootstrap" 参数手动改为 "1"

然后将其作为第一个节点启动

vim /var/lib/mysql/grastate.dat

systemctl start [email protected]

其他节点,依次启动即可,命令:

service mysql start

测试同步状况,我这里是完全没有问题的 …

▶ 最后关闭的 PXC 节点是安全退出时

这种情况,一般就是停服检测、数据维护才会全部退出 …

此时,可以查看 "grastate.dat" 文件(默认会在"/var/lib/mysql/" 目录中)

其中 safe_to_bootstrap: 1,

再次启动集群时,则先启动该节点

cat /var/lib/mysql/grastate.dat

systemctl start [email protected]

▶ 节点正常退出后,重新加入进群

这种情况,多发生在数据库冷备份时,选取其中一台主机,正常退出 service mysql stop

此处,不用分清当前主机是第几个节点

毕竟在两个节点以后,就没有主从之分了

等其他操作完成后

直接以非第一个节点操作启动即可

service mysql start

注意: 这种情况的前提 —— 存在正常工作状态中的 PXC 节点

PXC 集群实际应用探讨

☞ ThinkPHP5 上的使用

以鄙人常用的 ThinkPHP5 框架使用为例

那么,在 "config/database.php" 中的配置参考如下://------------- PXC 集群配置参考----------------------------------

'hostname' => ['192.168.80.221','192.168.80.222','192.168.80.223'],

'database' => 'test_pxc',

'username' => 'root',

'password' => 'mT123456',

'hostport' => '3306',

'deploy' => 1,

//-------------------------------------------------------------

☞ MyCat 部署读写分离

【提示】:

在成熟的项目配置中,应该是考虑其他中间件来进行数据库分布式部署操作的

比如,阿里开源的 MyCat

感兴趣的可以阅读下整理的文章

—— 【CentOS7 下使用 MyCat 实现 MySQL 读写分离/主从切换】

我在【192.168.80.221】主机上安装了 mycat 服务

在此,附一张配置截图以作参考:

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第13张图片

如此一来

上面项目配置中,就只会显示 mycat 连接信息(减少负载均衡配置中的代码冗余) //------------- MyCat 主从分离配置参考----------------------------------

'hostname' => '192.168.80.221',

'database' => 'mycat_tp5_pro',

'username' => 'root_mycat',

'password' => 'mycat_007',

'prefix' => 'tp5_',//前缀而已,不要太在意

'hostport' => '8066',

//-------------------------------------------------------------

☞ 对比 “Replication” 集群部署

通常来讲,对于数据库集群部署,"PXC" 都会拿来与 "Replication" 进行对比!

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第14张图片

【Replication 部署方案】:

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第15张图片

【PXC 部署方案】:

mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导_第16张图片

注意,两种方案不是对立的,一个大型项目中,完全可以根据自己的业务 : 结合使用、取长补短!

附录

☞ 关闭 mysql 的开启自启动

很多系统,默认了 mysql 会开启自启动,感觉很方便

但是,对于部署了 PXC 集群的数据库,会因为节点启动方式的不同有影响

建议关闭开机启动

☞ 提示:宝塔 mysql 版本与依赖包安装冲突

提示信息如下:

file /usr/include/mysql/mysql/plugin.h from install of Percona-XtraDB-Cluster-devel-57-5.7.32-31.47.1.el7.x86_64 conflicts with file from package bt-mysql57-5.7.32-1.el7.x86_64

此时,我参考网友的建议:直接卸载掉原来的 mysql

yum -y remove bt-mysql57-5.7.32-1.el7.x86_64

☞ 如何重置 root 密码

首先,在 "mysqld.cnf" 文件中

配置参数 :skip-grant-tables

然后,重启 mysql 服务

systemctl restart mysql.service

此时,进入 mysql

使用命令:mysql -uroot -p,回车后无需密码

然后, 执行 SQL 语句:

flush privileges; #刷新权限

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; #重置新密码

exit; #修改完毕,退出 mysql

接下来,将第一步开启的参数关闭,重启 mysql 服务即可

systemctl restart mysql.service

☞ 推荐文章

本文同步分享在 博客“moTzxx”(CSDN)。

如有侵权,请联系 [email protected] 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

你可能感兴趣的:(mysql数据库的pxc工具)