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