背景

最近在进行 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 集群节点越多,数据同步的速度就越慢(建议不要太多!)

在此,我以三台创建运行的 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): 增量传输传送

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

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" >>> 下载地址

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

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

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

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

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

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

【提示】

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

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

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

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

2). 执行安装 PXC 命令

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

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

yum localinstall *.rpm

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

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

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

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

其实,我们操作的配置文件,只是 "/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 mysql@bootstrap.service

查看状态,可以通过指令

systemctl status mysql@bootstrap.service

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

systemctl start mysql@bootstrap.service

systemctl stop mysql@bootstrap.service

systemctl restart mysql@bootstrap.service

systemctl status mysql@bootstrap.service

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

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

显示效果如下:

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

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"

启动后,打印信息如下:

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

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

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

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

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

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

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

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

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

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

PXC 节点重启问题

【官方 - 重新启动集群节点】 不同于 Replication 集群的重启操作,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 mysql@bootstrap.service

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

service mysql start

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

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

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

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

其中 safe_to_bootstrap: 1,

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

cat /var/lib/mysql/grastate.dat

systemctl start mysql@bootstrap.service

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

这种情况,多发生在数据库冷备份时,选取其中一台主机,正常退出 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 服务

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

如此一来

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

'hostname' => '192.168.80.221',

'database' => 'mycat_tp5_pro',

'username' => 'root_mycat',

'password' => 'mycat_007',

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

'hostport' => '8066',

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

☞ 对比 “Replication” 集群部署

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

【Replication 部署方案】:

【PXC 部署方案】:

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

附录

☞ 关闭 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)。

如有侵权,请联系 support@oschina.cn 删除。

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

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

  1. linux双物理机weblogic集群,linux下weblogic多机器集群部署要点

    weblogic在部署单台物理的多节点服务器(受管服务器)集群时候,只要根据提示下一步下一步都能完成. 最近帮测试部部署一个简单的双物理机weblogic集群(下简称多机集群) 1.在部署多机集群时, ...

  2. windows下nginx+tomcat分布式集群部署

    首先官网下载  http://nginx.org/en/download.html,我的本地环境为 实现的架构: 从图上可以看出,nginx作为负载均衡请求分发器,当请求A应用时候,分发到A集群,同理 ...

  3. linux下kafka与zookeeper集群部署

    *********************************配置主机名,通过主机名连接机器********************************* 比如说,已经有了三台主机 1,在li ...

  4. 信创环境下缓存服务Redis集群部署

    背景 本次项目涉及20+台服务器的部署,技术包括 Nacos 注册中心集群. GateWay 网关服务集群. 达梦8 关系型数据库服务集群. MinIO 分布式文件存储服务集群. Redis 缓存服务 ...

  5. CentOS7 下 MySQL 之 PXC 集群部署【Docker+多机多节点】

    背景 最近在进行 MySQL 集群搭建测试的研究中 对于业界主流方案自然不能跳过 在此,整理成完整的文章,希望道友能得到参考价值 - 对于 docker 不熟悉的小伙伴,个人建议移步文章 -- [Ce ...

  6. KingbaseES集群部署工具安装

    目录 1 安装前准备 1.1 软件环境要求 1.2 安装包准备 1.3 注意事项 1.3.1 安装用户 1.3.2 安装目录 2 执行定制安装 3 测试集群部署工具 3.1 执行集群部署工具的可执行文 ...

  7. Linux下搭建 kafka集群 + zookeeper集群部署 安装、启动、停止

    文章目录 一.环境部署总览 1. 软件版本选型 2. 服务器软件部署总览 二.软件部署手册 2.1. JDK 2.2. kafka 2.3. Kafka Eagle 2.4. mysql 2.5. z ...

  8. mysql从节点报错_CentOS7.9 下 MySQL 之 PXC 集群部署【Docker+多机多节点】

    背景 最近在进行 MySQL 集群搭建测试的研究中 对于业界主流方案自然不能跳过 在此,整理成完整的文章,希望道友能得到参考价值 - [注]:Percona XtraDB Cluster(简称 PXC ...

  9. mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】

    背景 [注意]: 鄙人认为本篇适合做入门测试/学习之用,选择的 "单机多节点配置",后面再整理 "多机配置"文章. 近期正突击学习数据库知识 想着对 PXC 集 ...

最新文章

  1. PHP求并集,交集,差集
  2. php中的关联数组,PHP中的多种关联数组
  3. SpringBoot注解最全详解(整合超详细版本)
  4. 2015.7.17( NOI2015 day1 )
  5. JAVA实现onvif的ptz控制_使用Onvif协议进行设备PTZ云台控制
  6. Spring加载资源文件的方式
  7. 机器学习算法中的F值(F-Measure)、准确率(Precision)、召回率(Recall)
  8. citirx for wincor configuration (citrix 7.5 setup with WI)
  9. Python学习之路_day_08(函数介绍)
  10. 这套神奇的个人信息管理系统,带我一步步进入互联网大厂
  11. 令人失望的智器Smart Q5
  12. C语言与或非应用案例,与或非(生活中与或非例子)
  13. safari显示找不到服务器,苹果自带浏览器找不到服务器是什么问题
  14. 数值分析常见算法C++实现
  15. dynamo for Civil 3d-在横断面上生成对应桩号的平面坐标
  16. 重新装mysql出现乱码,数据库出现乱码的原因和解决办法
  17. Vue判断IE浏览器版本并提示
  18. python怎么解压rar文件_用Python解压缩rar、zip文件的方法
  19. 珠海拱北口岸停车攻略,拱北口岸地下停车场收费
  20. C#基础知识---飞行棋小游戏

热门文章

  1. 马一篇帖子,关于reactingFoam与high-speed flow
  2. RecyclerView优化总结
  3. VMWare 虚拟机如何扩展磁盘空间并挂载到已存在的根目录
  4. OA的下一站在哪?蓝凌给出了答案——生态OA
  5. Nginx服务器搭建与个人博客部署
  6. 20221213英语学习
  7. 基于图灵机器人接口的简单NLP学习
  8. 拼多多2021笔试真题集 多多的数字组合 多多的字符变换 多多的求和计算 多多的骰子组合
  9. 山东标梵讲解文案策划需要的写法
  10. 基于MATLAB Simulink的三相感应电机动态数学建模仿真模型