Percona XtraDB Cluster (简称 PXC) 是 Percona 公司开源的实现 MySQL 高可用的解决方案。它将 Percona Server 和 Percona XtraBackup 与 Galera 库集成,以实现多主同步复制。和 MySQL 传统的异步复制相比,它可以保证数据的强一致性,在任什么时候刻集群中任意节点上的数据状态都是彻底一致的,而且整个架构实现了去中心化,全部节点都是对等的,即容许你在任意节点上进行写入和读取,集群会把数据状态同步至其余全部节点。但目前 PXC 集群只支持 InnoDB 存储引擎,并具备如下限制:html
虽然 PXC 集群存在以上限制,但就目前而言,它仍然是解决数据一致性和高可用性的最好方案,其搭建步骤以下:node
为保证集群高可用,群集最少要有 3 个节点,这里以搭建一个 3 节点的集群为例,具体以下:mysql
1. 删除 MariaDBlinux
1.这里个人服务器版本为 Centos 7.x ,须要删除自带的 MariaDB 数据库,避免对后面安装形成影响:git
yum -y remove mari*
复制代码
2. 开放访问墙端口github
开放如下四个防火墙端口,其做用和开放命令分别以下:sql
# MySQL 对外提供服务的端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 请求进行全量同步(SST)的端口
firewall-cmd --zone=public --add-port=4444/tcp --permanent
# 集群中各个节点间的通信端口
firewall-cmd --zone=public --add-port=4567/tcp --permanent
# 请求进行增量同步(IST)的端口
firewall-cmd --zone=public --add-port=4568/tcp --permanent
复制代码
3. 关闭SELINUXshell
SELinux 安全模块可能会限制对 Percona XtraDB Cluster 的数据访问。此时能够在运行时使用 setenforce 0
命令进行更改,也能够经过修改 /etc/selinux/config
文件中的 SELINUX 属性的值为 disabled ,从而进行永久性的更改:数据库
vi /etc/selinux/config
# 修改
SELINUX=disabled
复制代码
修改该文件后须要重启才能生效:bootstrap
reboot
复制代码
配置 yum 源后,直接使用 yum 命令进行在线安装,命令以下:
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo yum install Percona-XtraDB-Cluster-57
复制代码
使用以上命令安装完成后,会同时安装好 Percona Server 数据库,它基于 MySQL 社区版进行了扩展加强,并彻底兼容原有版本,使用方式也彻底一致,启动命令以下:
sudo systemctl start mysql
复制代码
使用如下命令获取安装时自动生成的 root 帐户的密码:
sudo grep 'temporary password' /var/log/mysqld.log
复制代码
使用 root 帐户登陆,并修改其帐户密码:
# 登陆服务
mysql -u root -p
# 修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
# 退出服务
mysql> exit
复制代码
以后使用如下命令中止 MySQL 服务:
sudo systemctl stop mysql
复制代码
以上安装过程在三台主机上均相同执行,以后就能够开始集群的搭建。首先须要修改每一个服务器上的 /etc/my.cnf
文件,第一个节点上须要增长的内容以下:
[mysqld]
# PXC集群中每一个MySQL实例的惟一标识,不能重复
server-id=1
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# PXC集群的名称和全部服务地址
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.0.226,192.168.0.227,192.168.0.228
# 当前节点的名称和服务地址
wsrep_node_name=pxc1
wsrep_node_address=192.168.0.226
# 指定同步方法和帐户信息,这个用户在下文会进行建立
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth= sstuser:123456
#开启严厉模式,它会阻止用户执行 Percona XtraDB Cluster 所不支持的功能。
pxc_strict_mode=ENFORCING
# 指定二进制日志的格式
binlog_format=ROW
# 指定默认的存储引擎
default_storage_engine=InnoDB
# Galera 仅支持 InnoDB 的 interleaved(2) 锁定模式:
# 该模式下全部 INSERT SQL 都不会有表级 AUTO-INC 锁,多个语句能够同时执行
innodb_autoinc_lock_mode=2
复制代码
第2、三个节点的配置与上面基本相同,可是须要修改 server id 以及当前节点的名称和地址,具体以下:
server-id=2
wsrep_node_name=pxc2
wsrep_node_address=192.168.0.227
复制代码
server-id=3
wsrep_node_name=pxc3
wsrep_node_address=192.168.0.228
复制代码
第一个节点须要以引导模式启动:
sudo systemctl start mysql@bootstrap.service
复制代码
在将其余节点添加到群集以前,须要登陆当前节点,来为 SST 操做建立用户并提供权限,命令以下:
# 建立用户
CREATE USER 'sstuser'@'localhost' IDENTIFIED BY '123456';
# 授予权限
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
# 刷新权限
FLUSH PRIVILEGES;
复制代码
接着在第二和第三个节点上正常启动数据库服务,命令以下:
sudo systemctl start mysql
复制代码
启动后,能够登陆任意节点并使用如下命令查看集群状态。输出中的 wsrep_cluster_size 的值应该为 3 ,即集群中节点总数为 3,此时表明全部节点都已成功加入集群,至此集群已经搭建完成。
mysql> show status like 'wsrep%';
+----------------------------------+----------------------------------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------------------------------+
| wsrep_local_state_uuid | 8bcc22cf-bfab-11e9-8a49-6e46c7af709e |
.......
| wsrep_incoming_addresses | 192.168.0.227:3306,192.168.0.228:3306,192.168.0.226:3306 |
| wsrep_gcomm_uuid | c8afc276-c623-11e9-a9ea-677d72419479 |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 8bcc22cf-bfab-11e9-8a49-6e46c7af709e |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 2 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 3.37(rff05089) |
| wsrep_ready | ON |
+----------------------------------+----------------------------------------------------------+
复制代码
PXC 集群容许动态下线节点,但须要注意的是节点的启动命令和关闭命令必须一致,如以引导模式启动的第一个节点必须以引导模式来进行关闭:
systemctl stop mysql@bootstrap.service
复制代码
其余节点则能够按照正常方式关闭:
service stop mysql
复制代码
因为全部节点都是对等的,因此下线第一个节点和下线其余节点在效果上都是相同的,以上就是关于 PXC 集群搭建的所有内容。
Percona XtraDB Cluster 5.7 Documentation
更多文章,欢迎访问 [全栈工程师手册] ,GitHub 地址:github.com/heibaiying/…