mysql8.0使用PXC实现高可用部署
mysql8.0使用PXC实现高可用
1.什么是 PXC
PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性;
2.PXC 的特点
- 完全兼容 MySQL。
- 同步复制,事务要么在所有节点提交或不提交。
- 多主复制,可以在任意节点进行写操作。
- 在从服务器上并行应用事件,真正意义上的并行复制。
- 节点自动配置,数据一致性,不再是异步复制。
- 故障切换:因为支持多点写入,所以在出现数据库故障时可以很容易的进行故障切换。
- 自动节点克隆:在新增节点或停机维护时,增量数据或基础数据不需要人工手动备份提供,galera cluster 会自动拉取在线节点数据,集群最终会变为一致。
3.PXC 的优缺点
优点:
- 服务高可用。
- 数据同步复制(并发复制),几乎无延迟。
- 多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让 galera 解决数据冲突。
- 新节点可以自动部署,部署操作简单。
- 数据严格一致性,尤其适合电商类应用。
- 完全兼容 MySQL。
缺点:
- 复制只支持InnoDB 引擎,其他存储引擎的更改不复制。
- 写入效率取决于节点中最弱的一台,因为 PXC 集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功。
- 所有表都要有主键。
- 不支持 LOCK TABLE 等显式锁操作。
- 锁冲突、死锁问题相对更多。
PXC 集群节点越多,数据同步的速度就越慢。
4.PXC 与 Replication 的区别
Replication PXC 数据同步是单向的,master 负责写,然后异步复制给 slave;如果 slave 写入数据,不会复制给 master 数据同步时双向的,任何一个 mysql 节点写入数据,都会同步到集群中其它的节点 异步复制,从和主无法保证数据的一致性 同步复制,事务在所有集群节点要么同时提交,要么同时不提交
5.PXC 常用端口
-
3306:数据库对外服务的端口号。
-
4444:请求 SST 的端口。
-
4567:组成员之间进行沟通的一个端口号。
-
4568:用于传输 IST。
-
- SST(State Snapshot Transfer): 全量传输
-
- IST(Incremental state Transfer):增量传输
6.搭建 PXC 集群
Percona XtraDB Cluster (简称 PXC)集群是基于 Galera 2.x library,事务型应用下的通用的多主同步复制插件,主要用于解决强一致性问题,使得各个节点之间的数据保持实时同步以及实现多节点同时读写。提高了数据库的可靠性,也可以实现读写分离,是 MySQL 关系型数据库中大家公认的集群优选方案之一。
环境准备
准备好下面三台服务器,本文搭建PXC集群基于CentOS8.x:
IP 端口 角色 192.168.106.51 3306 pxc1 192.168.106.52 3306 pxc2 192.168.106.53 3306 pxc3
配置hosts解析
# cat >> /etc/hosts << EOF
192.168.106.51 pxc1
192.168.106.52 pxc2
192.168.106.53 pxc3
EOF
RHEL 8 和其他 EL8 系统默认启用 MySQL 模块。此模块隐藏了 Percona 提供的软件包,并且必须禁用该模块才能使这些软件包可见。以下命令将禁用该模块:
yum module disable mysql
安装
进行在线安装
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
启用pxc-80版本
percona-release setup pxc-80
安装pxc集群
yum install percona-xtradb-cluster
如下图表示包已安装完成
修改配置文件
接下来进行对配置文件的修改
vim /etc/my.cnf
同理对pxc2和pxc3进行修改
启动
接下来对pxc1进行引导启动
systemctl start mysql@bootstrap.service
启动后在/var/log/mysqld.log下查找初始密码,登陆后修改密码
grep 'temporary password' /var/log/mysqld.log
正常启动pxc2和pxc3,发现起不来,日志中显示链接被拒绝
默认情况下,系统变量pxc_encrypt_cluster_traffic设置为ON,意味着所有集群流量都使用证书进行保护,所以要求所有节点使用相同的密钥和证书文件,先将pxc2和pxc3的*.pem全部删除,再将引导服务mysql目录下的*.pem拷贝给pxc2和pxc3
转至pxc2和pxc3,更改mysql目录下的*.pem的所属权限,并正常启动数据库服务
chown mysql.mysql /var/lib/mysql/*.pem
systemctl start mysql
启动成功,接下来在pxc1查看集群状态,显示成功连接
select * from performance_schema.pxc_cluster_view;
show status where Variable_name in ('wsrep_cluster_size','wsrep_cluster_status','wsrep_connected','wsrep_ready') ;
加入集群后,pxc2和pxc3的MySQL服务密码和pxc1一致。均为设置的‘MySQL@123’.
验证复制
在第二个节点上创建一个新数据库:
mysql> CREATE DATABASE percona;
切换到新创建的数据库:
mysql> USE percona;
以下输出确认数据库创建并更改:
在第三个节点上创建一个表:
mysql> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
以下输出确认已创建表:
在第一个节点上插入记录:
mysql> INSERT INTO percona.example VALUES (1, 'percona1');
mysql> INSERT INTO percona.example VALUES (2, 'percona2');
以下输出确认已插入记录:
从第二个节点上的该表中检索行:
mysql> SELECT * FROM percona.example;
以下输出确认已检索到所有行:
验证成功,pxc1、pxc2、pxc3均为主服务器,完成同时读写
节点下线
PXC 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致,如以引导模式启动的第一个节点pxc1必须以引导模式来进行关闭:
systemctl stop mysql@bootstrap.service
其他节点则可以按照正常方式关闭:
systemctl stop mysql
至此,配置完成。