暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

在一台虚机上搭建PXC8.0集群

原创 拨开乌云见阳光 2024-07-08
562

一、PXC集群简介:

PXC是“Percona XtraDB Cluster”的简称。它是Percona公司基于Galera协议的mysql高可用集群方案。可以保障数据库集群架构的高可用性和多个节点的读写与数据的强一致性。
PXC的主要特点:
● 每个节点均支持读/写
● 每个节点都包含完整数据。
● 事务自动实时同步复制到集群的所有节点,基本上无同步延迟。
● 集群所有节点数据保持强一致性。
● 可在任何时间点释放任何节点,不会出现数据丢失
● 部署简单
● 仅支持innodb引擎
● 所有表都要有主键
● 因为需要保证数据的一致性,当多节点并发写时,锁冲突问题比较严重。
● 任何更新事务都需要全局验证通过,才会在每个节点库上执行。因此集群性能受限于性能最差的节点(短板效应)。

PXC集群推荐至少3个节点。拓扑结构示意如下:


正常部署3节点的PXC集群,需要三台主机。但由于我本机资源有限,而且只是用于测试,因此准备在一台虚机上搭建3节点的PXC集群。

以下搭建过程,参照了官方文档(https://docs.percona.com/percona-xtradb-cluster/8.0/index.html)的指导说明。


二、准备一台虚拟机

1、创建一台VMware虚机

(1)运行 VMware Workstation 新建虚拟机:


(2)选择在虚拟机中要安装的操作系统:


(3)分配虚拟机资源:

虚拟机分配2G内存即可。



2、在虚机中安装Rocky Linux

(1)下载最新的Rocky Linux 9.4 ISO文件

下载地址:https://rockylinux.org/download



(2)挂载Rocky-9.4-x86_64-dvd.iso到虚机并安装


(3)启动安装了 Rocky Linux 的虚机



三、在虚机上安装3节点的PXC集群

1、安装依赖包

yum install -y openssl socat procps-ng chkconfig coreutils shadow-utils perl-DBD-MySQL

2、创建MySQL的组和用户

groupadd -r mysql
useradd -r -g mysql -s /bin/false mysql

3、下载PXC安装包并上传到虚机

下载地址:https://www.percona.com/downloads#percona-xtradb-cluster

下载目前官网最新的版本(8.0.36),如下所示:



4、解压PXC安装包

tar zvxf Percona-XtraDB-Cluster_8.0.36-28.1_Linux.x86_64.glibc2.17-minimal.tar.gz -C /opt/
cd /opt
mv Percona-XtraDB-Cluster_8.0.36-28.1_Linux.x86_64.glibc2.17-minimal pxc

5、创建数据目录

mkdir -p /data/pxc/db{1,2,3}
chown -R mysql:mysql /data/pxc

6、设置环境变量

export PATH=/opt/pxc/bin:$PATH

7、设置PXC三节点服务实例的配置文件

(1)/etc/my.4000.cnf

[mysqld]
port = 4000
socket=/tmp/mysql.4000.sock
datadir=/data/pxc/db1
basedir=/opt/pxc
user=mysql
log_error=error.log
binlog_format=ROW
wsrep_cluster_address='gcomm://192.168.20.94:5030,192.168.20.94:6030'
wsrep_provider=/opt/pxc/lib/libgalera_smm.so
wsrep_sst_receive_address=192.168.20.94:4020
wsrep_node_incoming_address=192.168.20.94
wsrep_cluster_name=pxc-cluster
wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.20.94:4030;"
wsrep_sst_method=xtrabackup-v2
wsrep_node_name=node4000
innodb_autoinc_lock_mode=2

(2)/etc/my.5000.cnf

[mysqld]
port = 5000
socket=/tmp/mysql.5000.sock
datadir=/data/pxc/db2
basedir=/opt/pxc
user=mysql
log_error=error.log
binlog_format=ROW
wsrep_cluster_address='gcomm://192.168.20.94:4030,192.168.20.94:6030'
wsrep_provider=/opt/pxc/lib/libgalera_smm.so
wsrep_sst_receive_address=192.168.20.94:5020
wsrep_node_incoming_address=192.168.20.94
wsrep_cluster_name=pxc-cluster
wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.20.94:5030;"
wsrep_sst_method=xtrabackup-v2
wsrep_node_name=node5000
innodb_autoinc_lock_mode=2

(3)/etc/my.6000.cnf

[mysqld]
port = 6000
socket=/tmp/mysql.6000.sock
datadir=/data/pxc/db3
basedir=/opt/pxc
user=mysql
log_error=error.log
binlog_format=ROW
wsrep_cluster_address='gcomm://192.168.20.94:4030,192.168.20.94:5030'
wsrep_provider=/opt/pxc/lib/libgalera_smm.so
wsrep_sst_receive_address=192.168.20.94:6020
wsrep_node_incoming_address=192.168.20.94
wsrep_cluster_name=pxc-cluster
wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.20.94:6030;"
wsrep_sst_method=xtrabackup-v2
wsrep_node_name=node6000
innodb_autoinc_lock_mode=2

(4)以上配置文件主要参数说明(以/etc/my.6000.cnf为例):

参数

说明

port = 6000

MySQL服务实例的端口

binlog_format=ROW

指定二进制日志记录为“基于行”的格式

wsrep_cluster_name=pxc-cluster

指定PXC群集的名称

wsrep_node_incoming_address=192.168.20.94

客户端连接当前节点的网络地址

wsrep_node_name=node6000

设置当前节点的唯一名称

wsrep_provider=/opt/pxc/lib/libgalera_smm.so

指定 Galera 库的路径

wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.20.94:6030;"

指定当前节点在集群内部的通信端口

wsrep_cluster_address='gcomm://192.168.20.94:4030,192.168.20.94:5030'

指定集群其他节点的地址和通信端口

wsrep_sst_method=xtrabackup-v2

定义状态快照传输 (SST) 的方法,xtrabackup-v2 表示使用Percona XtraBackup执行SST

wsrep_sst_receive_address=192.168.20.94:6020

指定状态快照传输的地址和端口

innodb_autoinc_lock_mode=2

自动增量值的锁定模式为2(“交错”锁定模式),以便于“基于行”的复制。


8、启动PXC集群第一个节点的服务实例

mysqld_safe --defaults-file=/etc/my.4000.cnf --wsrep-new-cluster

9、修改mysql的root密码

(1)查看初始密码

grep "A temporary password" /data/pxc/db1/error.log

(2)修改密码

mysql -uroot -p -S/tmp/mysql.4000.sock
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root_password';
mysql> flush privileges;

10、启动PXC集群第二、第三节点的服务实例

mysqld_safe --defaults-file=/etc/my.5000.cnf 
mysqld_safe --defaults-file=/etc/my.6000.cnf 

11、查看PXC集群状态


说明:

(1)wsrep_cluster_size:集群中的节点数

(2)wsrep_cluster_status:集群状态:

    Primary:正常状态;

    Non-Primary:集群发生脑裂;

    Disconnected:集群处于无法连接状态

(3)wsrep_connected:节点是否已连接到群集

(4)wsrep_ready:节点是否已准备好接受查询

四、PXC集群的数据同步验证

使用以下过程验证:在第二个节点上创建一个新数据库, 在第三个节点上为该数据库创建表, 在第一个节点上向表中插入数据。

由于是在同一台虚机上,PXC的各个节点的服务端口不同,因此通过端口来加以区分:


1、在第二个节点上创建新数据库


2、在第三个节点上为该数据库创建表


3、在第一个节点上向表中插入数据


4、在各个节点上查看新增的数据




通过以上的测试结果可以验证:在一个节点写入数据(建库、建表、插入数据),均同步到集群的所有节点。


至此,完成了在一台虚拟机上,搭建3节点PXC集群,并做了简单的数据同步测试验证。

以上PXC 8.0集群的搭建,所需的所有软件均可免费下载;所需资源很少(仅需一台2GB内存的虚机);搭建过程在官方文档的指导下非常顺畅。特此分享给感兴趣的小伙伴。

最后修改时间:2024-07-09 20:52:28
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论