当前位置: 首页 > news >正文

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 集群节点越多,数据同步的速度就越慢。

img

4.PXC 与 Replication 的区别

ReplicationPXC
数据同步是单向的,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.513306pxc1
192.168.106.523306pxc2
192.168.106.533306pxc3

配置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

img

安装

进行在线安装

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

img
启用pxc-80版本

percona-release setup pxc-80

img
安装pxc集群

yum install percona-xtradb-cluster

img
如下图表示包已安装完成
img

修改配置文件

接下来进行对配置文件的修改

vim /etc/my.cnf

img
同理对pxc2和pxc3进行修改

启动

接下来对pxc1进行引导启动

systemctl start mysql@bootstrap.service

启动后在/var/log/mysqld.log下查找初始密码,登陆后修改密码

grep 'temporary password' /var/log/mysqld.log

img
正常启动pxc2和pxc3,发现起不来,日志中显示链接被拒绝
img

默认情况下,系统变量pxc_encrypt_cluster_traffic设置为ON,意味着所有集群流量都使用证书进行保护,所以要求所有节点使用相同的密钥和证书文件,先将pxc2和pxc3的*.pem全部删除,再将引导服务mysql目录下的*.pem拷贝给pxc2和pxc3
img
img
转至pxc2和pxc3,更改mysql目录下的*.pem的所属权限,并正常启动数据库服务

chown mysql.mysql /var/lib/mysql/*.pem
systemctl start mysql

img
启动成功,接下来在pxc1查看集群状态,显示成功连接

select * from performance_schema.pxc_cluster_view;
show status where Variable_name in ('wsrep_cluster_size','wsrep_cluster_status','wsrep_connected','wsrep_ready') ;

img
加入集群后,pxc2和pxc3的MySQL服务密码和pxc1一致。均为设置的‘MySQL@123’.

验证复制

在第二个节点上创建一个新数据库:

mysql> CREATE DATABASE percona;

切换到新创建的数据库:

mysql> USE percona;

以下输出确认数据库创建并更改:
img

在第三个节点上创建一个表:

mysql> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));

以下输出确认已创建表:
img

在第一个节点上插入记录:

mysql> INSERT INTO percona.example VALUES (1, 'percona1');
mysql> INSERT INTO percona.example VALUES (2, 'percona2');

以下输出确认已插入记录:
img

从第二个节点上的该表中检索行:

mysql> SELECT * FROM percona.example;

以下输出确认已检索到所有行:
img
验证成功,pxc1、pxc2、pxc3均为主服务器,完成同时读写

节点下线

PXC 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致,如以引导模式启动的第一个节点pxc1必须以引导模式来进行关闭:

systemctl stop mysql@bootstrap.service

其他节点则可以按照正常方式关闭:

systemctl stop mysql

至此,配置完成。


http://www.mrgr.cn/news/93687.html

相关文章:

  • 【Git】创建,切换分支
  • 华为配置篇-OSPF基础实验
  • Spark八股
  • 【基础知识】回头看Maven基础
  • 【Java代码审计 | 第七篇】文件上传漏洞成因及防范
  • 本地部署大语言模型-DeepSeek
  • 【Java代码审计 | 第四篇】SQL注入防范
  • 根据输入汉字生成带拼音的米字格字帖
  • Hive八股
  • SQL经典查询
  • 存量思维和增量思维
  • 项目实战--网页五子棋(对战功能)(9)
  • Scala 中生成一个RDD的方法
  • LeetCodeHot100
  • 【落羽的落羽 C++】C++入门基础:引用,内联,nullptr
  • c语言笔记 一维数组与二维数组
  • 【Tools】Windows下Git 2.48安装教程详解
  • [数据抓取] Python 网络爬虫 - 学习手册
  • 硬件基础(4):(1)AD采集电路设计
  • 使用express创建服务器保存数据到mysql