背景
背景
- 最近在进行
的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
官网指导 —— 【在 CentOS上 配置 Percona XtraDB 集群】
前期准备
前期准备
【注】:
集群部署,会自行安装
PXC
服务,建议操作前卸载原来的
MySQL
MySQL
1). 三台 Vmware
虚拟机
Vmware
-
集群节点越多,数据同步的速度就越慢(建议不要太多!)PXC
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录
在此,我以三台创建运行的 CentOS7
作为宿主机,进行配置操作演示
虚拟机 ip | 端口 | 角色 |
---|---|---|
192.168.80.221 | 3306 | 节点 |
192.168.80.222 | 3306 | 节点 |
192.168.80.223 | 3306 | 节点 |
-
注意各节点硬件配置尽量相同
因为短板效应,
集群数据同步的速度取决配置最低的节点PXC
集群只支持
PXC
引擎
InnoDB
2). 卸载 mariadb-libs
mariadb-libs
因为默认捆绑安装了
CentOS7
,为了不影响
mariadb-libs
的使用,需要先卸载!
PXC
yum -y remove mari*
3). 开启四个 PXC
环境所涉及的端口
PXC
3306: # mysql 实例端口
4567: # PXC cluster 相互通讯的端口
4444: # 用于 SST(State Snapshot Transfer): 全量传输
4568: # 用于 IST(Incremental state Transfer): 增量传输传送
- 以鄙人使用宝塔面板操作为例,注意以上端口的开启:
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录
4). 部署前建议关闭 SELINUX
、将 MySQL
数据库服务停止
SELINUX
MySQL
安全增强型 Linux(Security-Enhanced Linux)SELinux
主要由美国国家安全局开发
- 把
属性值设置成"SELINUX"
,然后disabled
重启reboot
vi /etc/selinux/config
5). 配置 ntp 服务,确保时间同步
- 这一步,多数经验没有提及,我是操作 docker 时发现需要配置的哦!
[[email protected] ~]# yum -y install ntp ntpdate
[[email protected] ~]# ntpdate 0.asia.pool.ntp.org
[[email protected] ~]# hwclock --systohc
[[email protected] ~]# date
2021年 01月 08日 星期五 09:54:23 CST
搭建 PXC 集群
搭建 PXC 集群
官方指导 —— 【在 Red Hat Enterprise Linux 和 CentOS 上安装 Percona XtraDB 集群】
1). 下载解压缩工具 qpress
、 PXC
安装包
qpress
PXC
- 为方便后期对
集群操作的使用,需要下载PXC
>>> 下载地址"qpress"
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录 - 然后就是
PXC
安装包的下载了
一般指导都是支持在线安装的,但我发现,虚拟机里无法安装
本身下载速度慢,而且最新版本资源比较大
此处,我以下载
为例【Percona XtraDB 群集 5.7】
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录 - 此时我进行安装发现,依赖关系提示:
所以,继续下载了 【Percona-XtraBackup-2.4】"需要:percona-xtrabackup-24 >= 2.4.21"
【提示】
1
本人发现:不论在官网使用浏览器下载,还是使用 wget 命令下载都提示文件缺失,解压异常,最后选择迅雷下载
2 有需要这些资源的,在此提供【百度云链接,提取码:fd0g 】
3 如果是宝塔系统,已安装了
会有冲突,所以要卸掉原来的
mysql
数据库
mysql
- 将解压得到的所有
文件,上传到".rpm"
系统,此处我选择的是Linux
"/www/server/download"
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录
2). 执行安装 PXC
命令
PXC
在三个虚拟机上分别安装 PXC
程序
- 在上一步存放
文件的目录中,执行命令:".rpm"
yum localinstall *.rpm
注意,如果提示还有其他需要使用的依赖包,进行下载后再操作一遍命令 !
3). 修改 "mysqld.cnf"
文件
"mysqld.cnf"
-
上一步命令执行完毕后,如果成功
可以注意到
文件中出现如下信息"etc/my.cnf"
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录
其实,我们操作的配置文件,只是 "/etc/percona-xtradb-cluster.conf.d/"
目录中的三个!
mysql 的常用配置信息都在 "mysqld.cnf" 文件, pxc 集群的配置信息都在 "wsrep.cnf" 文件
- 在
"mysqld.cnf"
中配置信息对比参考如下(注意,我添加了三个参数)
并且,对参数
,赋值唯一的ID (三台服务器都要配置)"server-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
[[email protected] download]# cat /var/log/mysqld.log | grep "A temporary password"
2021-01-25T08:33:57.335210Z 1 [Note] A temporary password is generated for [email protected]: 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
配置信息
"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]
此处,附上对第一个节点的操作指令
systemctl start [email protected]ap.service
systemctl stop [email protected]
systemctl restart [email protected]
systemctl status [email protected]
- 为了操作方便,建议可以使用
"Navicat"
等工具进行连接
执行
语句:SQL
显示效果如下:show status like 'wsrep_cluster%';
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录
【提示】:
一定要等第一个节点启动,可以连接后,再考虑第二个、第三个节点的启动!
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"
- 启动后,打印信息如下:
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录
第三个节点 【PXC3】
基本操作一样,只是配置文件的参数稍有不同
7). 测试 PXC 集群部署效果
在此,我将三个成功启动的服务,通过
mysql
连接
"Navicat"
- 在第一个节点上,创建一个数据库
进而, 创建了一个数据表"test_pxc"
然后,随意,在数据表中添加了几条记录"pxc_users"
-
打开第二个节点、第三个节点
刷新,会发现也会有同样的数据库,数据表
-
继而修改任意一个节点的数据,
会发现,其他节点也会同步更新
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录
PXC 节点重启问题
PXC 节点重启问题
不同于
【官方 - 重新启动集群节点】
集群的重启操作,
Replication
集群需要分好几种情况
PXC
▶ 强行关机之后,PXC 集群无法启动
这种情况常见于测试练习时,虚拟机关机的情况
-
以我的操作经历为例:
昨天直接关闭所有的虚拟机,
今天想着继续
PXC
集群的测试
发现,都无法启动了
提示信息如下:
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录 -
部分网上经验,是:
查看一下各个虚拟机中的
"/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 集群实际应用探讨
PXC 集群实际应用探讨
☞ ThinkPHP5
上的使用
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
【提示】:
-
在成熟的项目配置中,应该是考虑其他中间件来进行数据库分布式部署操作的
比如,阿里开源的
MyCat
感兴趣的可以阅读下整理的文章
——
【CentOS7 下使用 MyCat 实现 MySQL 读写分离/主从切换】
- 我在
主机上安装了【192.168.80.221】
mycat
服务
在此,附一张配置截图以作参考:
CentOS7 下 MySQL 数据库 PXC 集群部署操作指导背景前期准备搭建 PXC 集群PXC 节点重启问题PXC 集群实际应用探讨附录 -
如此一来
上面项目配置中,就只会显示
连接信息(减少负载均衡配置中的代码冗余)mycat
//------------- MyCat 主从分离配置参考---------------------------------- 'hostname' => '192.168.80.221', 'database' => 'mycat_tp5_pro', 'username' => 'root_mycat', 'password' => 'mycat_007', 'prefix' => 'tp5_',//前缀而已,不要太在意 'hostport' => '8066', //-------------------------------------------------------------
☞ 对比 “Replication”
集群部署
“Replication”
通常来讲,对于数据库集群部署,都会拿来与
"PXC"
进行对比!
"Replication"
【
Replication
部署方案】:
【
PXC
部署方案】:
注意,两种方案不是对立的,一个大型项目中,完全可以根据自己的业务 : 结合使用、取长补短
!
可对比参考文章 —— 【CentOS7 下 MySQL5.7.32 主从复制+同步配置操作 (一主多从+多主多从)】
附录
附录
☞ 关闭 mysql
的开启自启动
mysql
- 很多系统,默认了
mysql
会开启自启动,感觉很方便
但是,对于部署了
集群的数据库,会因为节点启动方式的不同有影响PXC
建议关闭开机启动
☞ 提示:宝塔 mysql
版本与依赖包安装冲突
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
☞ 推荐文章
-
【PXC 原理分析】