首页开发教程Percona XtraDB Cluster(PXC)安装配置及使用教程

Percona XtraDB Cluster(PXC)安装配置及使用教程

2024-10-11 648

Percona XtraDB Cluster(简称PXC)是一种基于MySQL的高可用性和数据复制解决方案。它允许在多个节点上进行读写操作,以提高数据库的可用性和性能。以下是关于Percona XtraDB Cluster的基本介绍和安装、配置和使用说明。

一、PXC基本简介

Percona XtraDB Cluster使用了一种称为wsrep的技术,即write set replication(写集合复制),它可以在多个节点之间同步数据。这种技术允许在多个节点上同时执行读写操作,从而提高了数据库的可用性和性能。

1、优点:

  • 当某个节点宕机时,其他节点仍可以继续工作,且无数据损失;
  • 可以在多个节点上执行读操作,提高读取性能;
  • 允许在任何节点上写入数据,所有节点的数据保持一致。

2、缺点

  • 当添加一个新的节点时,所有数据需要从一台现有的数据库复制到新节点,如果数据量很大,复制过程可能会很慢;
  • 如果有三个节点,则数据有三个副本;
  • 对于写操作,所有节点都需要参与,可能导致某些节点过载。

3、节点宕机与恢复时的数据同步

当节点宕机时,可以使用State Snapshot Transfer(SST)或Incremental State Transfer(IST)方法进行数据同步。SST方式是将节点所有数据复制到另一个节点,而IST方式是只复制发生变化的数据。IST方式在数据同步过程中不会产生锁,因此对服务的影响较小。

4、多主节点数据复制

在Percona XtraDB Cluster中,任何节点上的数据写入都会在所有节点上同步,这与常规的MySQL数据复制有所不同。所有的查询操作都在本地节点执行,但提交操作需要通过集群核验。提交动作的响应时间包括请求在节点之间的传输时间、核验的时间、在本地应用提交的时间,但提交操作在远程主机生效并不影响提交动作的响应时间。

二、关于MySQL的锁

MySQL有两种锁:悲观锁和乐观锁。悲观锁在读取数据时会锁定相关行,其他线程对这些行的更新需要等待悲观锁结束;乐观锁在读取数据时不锁定,更新时检查数据是否已经被更新过,如果是则取消当前更新。

三、当前OS

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

四、设置运行环境

1、修改hosts文件,添加节点信息。

[root@localhost ~]# vim /etc/hosts
192.168.1.145 node1
192.168.1.143 node2
192.168.1.167 node3

2、修改selinux状态为disabled。

[root@localhost ~]# vim /etc/selinux/config 
SELINUX=disabled

3、传输配置文件到其他节点。

[root@localhost ~]# scp /etc/hosts node2:/etc/hosts
[root@localhost ~]# scp /etc/hosts node3:/etc/hosts

4、配置percona xtradb的通讯端口(三个节点操作相同)。

[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# firewall-cmd --add-port=3306/tcp --permanent
[root@localhost ~]# firewall-cmd --add-port=4567/tcp --permanent
[root@localhost ~]# firewall-cmd --add-port=4568/tcp --permanent
[root@localhost ~]# firewall-cmd --add-port=4444/tcp --permanent
[root@localhost ~]# firewall-cmd --reload

5、配置ntp服务,确保时间同步。

[root@localhost ~]# ntpdate ntp3.aliyun.com
[root@localhost ~]# crontab -e
*/10 * * * * ntpdate ntp3.aliyun.com

6、重启主机(三个主机操作相同)。

[root@localhost ~]# reboot

五、安装Percona XtraDB Cluster

[root@node1 ~]# yum -y install epel-release 
[root@node1 ~]# yum -y install libev
[root@node1 ~]# wget https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST/Percona-XtraDB-Cluster-5.7.24-31.33/binary/redhat/7/x86_64/Percona-XtraDB-Cluster-5.7.24-31.33-r443-el7-x86_64-bundle.tar
[root@node1 ~]# mkdir percona
[root@node1 ~]# tar -xf Percona-XtraDB-Cluster-5.7.24-31.33-r443-el7-x86_64-bundle.tar -C percona/
[root@node1 ~]# cd percona/
[root@node1 percona]# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# 这是个yum源,用于下边安装percona本地包的时候提供依赖关系的解决
[root@node1 percona]# yum -y localinstall Percona-XtraDB-Cluster-*.rpm

六、配置mysql及集群文件

主要包括mysqld.cnf,mysqld_safe.cnf,wsrep.cnf。在当前的这个版本中,my.cnf为主配置文件,其余的配置文件放在/etc/percona-xtradb-cluster.conf.d目录。

1、节点1修改配置文件

[root@node1 percona]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf 
server-id=1
character_set_server = utf8
[root@node1 percona]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 
wsrep_cluster_address=gcomm://192.168.1.145,192.168.1.143,192.168.1.167 #补全即可
wsrep_node_address=192.168.1.145 #取消注释并修改
wsrep_node_name=node1 
wsrep_sst_auth="sstuser:sstuser" #取消注释并修改 数据同步时使用的账号和密码

2、节点2修改配置文件

[root@node2 percona]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf 
server-id=2
character_set_server = utf8
[root@node2 percona]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 
wsrep_cluster_address=gcomm://192.168.1.145,192.168.1.143,192.168.1.167
wsrep_node_address=192.168.1.143
wsrep_node_name=node2
wsrep_sst_auth="sstuser:sstuser"

3、节点3修改配置文件

[root@node3 percona]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf 
server-id=3
character_set_server = utf8
[root@node3 percona]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 
wsrep_cluster_address=gcomm://192.168.1.145,192.168.1.143,192.168.1.167
wsrep_node_address=192.168.1.167
wsrep_node_name=node3
wsrep_sst_auth="sstuser:sstuser" #数据同步使用的账户和密码

七、启动pxc集群

1、启动节点1

[root@node1 ~]# systemctl start mysql@bootstrap.service
[root@node1 ~]# grep "temporary password" /var/log/mysqld.log 
2019-02-28T08:14:14.938652Z 1 [Note] A temporary password is generated for root@localhost: <1nC2g#:In#3
[root@node1 ~]# mysql -uroot -p'<1nC2g#:In#3'
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.03 sec)
mysql> create user 'sstuser'@'localhost' identified by 'sstuser';
#由于pxc的特点,在一个上创建,三台都有
Query OK, 0 rows affected (0.01 sec)
mysql> grant reload, lock tables, replication client, process on *.* to 'sstuser'@'localhost';
Query OK, 0 rows affected (0.04 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

2、启动剩余节点

[root@node2 percona]# systemctl start mysql
[root@node3 percona]# systemctl start mysql

如果你使用的是CentOS7.2.1511,会发现mysql可以正常启动,但是未加入集群的情况需要升级openssl,建议全部升级后再启动集群,这问题在CentOS 7.4.1708不存在即openssl版本较新。

八、验证集群状态

1、在节点2上完成如下操作

[root@node2 percona]# mysql -uroot -p123456
mysql> show variables like 'version';
mysql> create database pxcdb;
mysql> use pxcdb
Database changed
mysql> create table t1(
-> id int not null,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> insert into t1 values(1,'tiechui');
ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of DML command on a table (pxcdb.t1) without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER
#这里验证了pxc的特性,每个表都要有主键
mysql> alter table t1 add primary key (id);
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into t1 values(1,'tiechui');
Query OK, 1 row affected (0.01 sec)

2、再节点3上验证

[root@node3 percona]# mysql -uroot -p123456
mysql> show variables like 'server_id';
mysql> show databases;
mysql> use pxcdb
mysql> use pxcdb -A
mysql> select * from t1;

3、查看集群状态,节点3上操作

mysql> show status like '%wsrep_clust%';
mysql> show status like 'wsrep_connected';

4、节点1在次验证是否同步

mysql> select * from pxcdb.t1;

5、三个节点都验证监控命令

mysql> SHOW STATUS LIKE 'wsrep_local_state_comment';
+---------------------------+--------+
| Variable_name | Value |
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
1 row in set (0.01 sec)

如果这一项是synced,则表明此节点是集群的一部分,并且已经准备好处理流量。如果三节点都是synced,恭喜xtradb cluster搭建完成。

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

相关文章