1. 准备工作

1.1 准备虚拟机

MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
因为我们要实现的是三台mysql节点集群,所以准备3台虚拟机

192.168.1.173
192.168.1.174
192.168.1.166

1.2 下载pxc资源包

在本文中讲的安装方式是本地安装,所以提前下载好资源包,下载pxc程序资源包。下载之后解压压缩包。pxc捆绑了percona数据库,所以无需单独下载percona安装包
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

1.3 qpress-11-1.el7.x86_64

下载qpress-11-1.el7.x86_64.prm ,可以去百度或者谷歌下载。

下载完1.2和1.3的资源如下图,由于pxc官网是国外网站,在此添加某国内云链接
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

2. PXC简介

PXC全称是Percona XtraDB Cluster, 是著名的mysql公司Percona出品的免费的数据库集群产品。
PXC对数据库集群是基于Galera的面向OLTP的多主同步复制插件。
长期以来mysql都缺少官方原生的集群方案,这也给很多第三方公司提供了机会,所以Galera技术就是众多mysql集群技术中较为著名的一种,mysql自带的主从复制模式天生就不能保证数据同步的完整一致,所以很多大公司花了很多人力和物力去解决这个问题,但是收效甚微,幸运的是Galera带来了多主架构,同步复制,并发复制,故障切换等一系列的功能。这才是真正意义上保证了数据的一致性,正确性和完整性。
PXC主要用于解决MySQL集群中数据同步强一致性的问题。
PXC是MySQL集群方案中公认的优先方案之一

2.1 PXC的特点

同步复制,事务在所有集群节点提交成功,要么不成功。
多主复制,可以在任意一个节点写入
数据同步的强一致性,所有节点数据保持一致

2.2 尽可能的控制PXC集群的规模

PXC集群节点越多,数据同步的速度就越慢
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

2.3 所有PXC节点的硬件配置要相同

PXC集群数据同步的速度取决于配置最低的节点。因为PXC是同步复制,一个节点写入的数据的速度慢,会拖慢整个集群的写入速度
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

2.4 PXC集群只支持InnoDB引擎

只有InnoDB的数据才会被同步

3. 安装PXC

3.1 删除MariaDB程序包

yum -y remove mari*

3.2 开放防火墙端口

PXC集群要使用4个端口,所以防火墙要开放下边4个端口
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --reload

3.3 关闭SELINUX

把配置文件中的SELINUX的值改为disabled

vi /etc/selinux/config

修改之后执行reboot,重启linux系统

reboot

3.4 将pxc资源包上传到服务器并安装

在/usr/local目录下创建percona文件夹,将资源包上传到percona目录中

cd /usr/local
mkdir percona
cd percona

MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

安装PXC

  yum localinstall *.rpm

3.5 修改数据库配置文件

Percona数据库配置文件和mysql的配置文件不一样。

用下边命令查看Percona数据库配置文件的位置

cat /etc/my.cnf

MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
进入Percona数据库配置文件的目录
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
mysql的常用信息都写在了mysqld.cnf文件,wsrep.cnf文件配置的是pxc集群的信息
我们可以简化一下配置文件,将mysqld.cnf文件和wsrep.cnf文件的内容复制到/etc/my.cnf文件中,把所有配置信息写到一个文件中,并添加字符集等配置细腻

[client]
socket=/var/lib/mysql/mysql.sock[mysqld]
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=7character_set_server = utf8
bind-address = 0.0.0.0
#跳过DNS解析
skip-name-resolve# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

初始化root账户密码

启动mysql

systemctl start mysqld

查看默认密码

 cat /var/log/mysqld.log | grep "A temporary password"

修改MySQL密码

  mysql_secure_installation

MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
输入新密码,新密码需要有大小写字母加数组,我们这里设置Abc_123456
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
后边有一些初始化的操作,所有都输入y
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
创建远程管理员账户
root账户默认不允许远程连接,所以我们创建一个可以远程连接的账户
进入mysql

 mysql -u root -p

MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
创建新用户赋予远程连接权限

 CREATE USER 'admin'@'%' IDENTIFIED BY 'Abc_123456';GRANT all privileges ON *.* TO 'admin'@'%';FLUSH PRIVILEGES;exit

关闭服务

systemctl stop mysqld

在my.cnf文件中添加pxc集群配置信息

server-id=1 #PXC集群中MySQL实例的唯一ID,不能重复,必须是数字
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster #PXC集群的名称
wsrep_cluster_address=gcomm://192.168.1.173,192.168.1.174,192.168.1.166
wsrep_node_name=pxc1 #当前节点的名称
wsrep_node_address=192.168.1.173 #当前节点的IP
wsrep_sst_method=xtrabackup-v2 #同步方法(mysqldump、rsync、xtrabackup)
wsrep_sst_auth= admin:Abc_123456 #同步使用的帐户
pxc_strict_mode=ENFORCING #同步严厉模式
binlog_format=ROW #基于ROW复制(安全可靠)
default_storage_engine=InnoDB  #默认引擎
innodb_autoinc_lock_mode=2 #主键自增长不锁表

最终的配置文件my.cnf是这样的

[client]
socket=/var/lib/mysql/mysql.sock[mysqld]
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=7character_set_server = utf8
bind-address = 0.0.0.0
#跳过DNS解析
skip-name-resolve# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.1.173,192.168.1.174,192.168.1.166
wsrep_node_name=pxc1
wsrep_node_address=192.168.1.173
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth= admin:Abc_123456
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

以上步骤在其余两台虚拟机重复此步骤,my.cnf的文件中server-id,wsrep_node_name,wsrep_node_address这三个参数是不能重复的值

3.6 启动命令

3.6.1 主节点的管理命令(第一个启动的PXC节点)

 systemctl start mysql@bootstrap.servicesystemctl stop mysql@bootstrap.servicesystemctl restart mysql@bootstrap.service

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

service mysql start
service mysql stop 
service mysql restart 

3.7 连接测试

使用navicat连接三个数据库节点,连接成功
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

3.8 查看PXC集群状态信息

在任意一个节点执行以下命令

show status like 'wsrep_cluster%';

MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
wsrep_cluster_size参数是说明pxc集群是几个数据库节点的集群。说明集群搭建成功。

4. 测试

我们在192.168.1.166的数据库中创建一个逻辑库testdb
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
刷新192.168.1.173和192.168.1.174的节点的数据库,发现也同步了testdb数据库
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

接着在192.168.1.173的testdb的数据库上创建一张student表
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
刷新其余两个节点的数据库,发现也同步表成功
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

我们在192.168.1.174节点上新建几条学生数据
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
刷新其余两个节点,发现数据也同步成功
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

5. PXC节点启动与关闭

  • 如果最后关闭的PXC节点是安全退出的,那么下次启动要最先启动这个节点,而且要以主节点启动
  • 如果最后关闭的PXC节点不是安全退出的,那么要先修改/var/lib/mysql/grastate.dat 文件,把其中的safe_to_bootstrap属性值设置为1,再安照主节点启动

5.1 PXC节点的安全关闭操作

节点怎么启动的,就使用对应的命令去关闭。如果用错了关闭命令,是不能关闭节点的数据服务的

systemctl stop mysql@bootstrap.service
service mysql stop 

使用命令关闭主节点
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
关闭掉主节点之后查看/var/lib/mysql/grastate.dat文件
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网

我们在关闭其他子节点,我们先关闭192.168.1.166节点,再关闭192.168.1.174节点
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
MySQL数据库集群之PXC方案—安装pxc集群-编程知识网
下一次pxc集群启动的主节点是192.168.1.174服务器,192.168.1.173和192.168.1.166以子节点启动

5.2 PXC节点的不安全或意外关闭操作

宕机,挂起,关机,重启,断电,断网都会让节点意外下线。

意外下线部分节点

安全下线节点不会让剩下的节点宕机,如果节点意外退出,集群的规模不会缩小,意外退出的节点超过半数,比如三个节点意外退出了2个节点,那么剩下的节点就不能够读写了。其他节点按照普通节点启动上线即可恢复pxc集群

service mysql start

意外下线全部节点,不同时退出

如果三个节点都意外退出,那么查看/var/lib/mysql/grastate.dat文件,看看哪个文件的safe_to_bootstarp的值是1,那么那个节点是最后意外关闭的,再按照safe_to_bootstarp的值启动pxc集群

意外下线全部节点,同时退出

如果三个节点同时意外退出,我们需要修改配置文件,挑选一个节点作为主节点,修改safe_to_bootstarp的值设置为1,那么这个节点可以以主节点启动