PXC集群

PXC集群

NOTE: By now there are a some good alternatives to MySQL-MMM. Maybe you want to check out Galera Cluster which is part of MariaDB Galera Cluster.

 

Galera Cluster是一个用于innodb的同步多主复制插件,它不同于传统的MySQL复制,同时也解决了很多多主写入时的冲突问题,用户不需要知道其在哪台服务器上写入以及在哪台服务器上读取。

一个应用程序可以在集群中的每个节点写入,事务(基于行的)在一个节点提交也会同步复制到其他节点,通过基于认证(certification-based)的复制来实现实时同步。

基于认证的复制使用组通信(Group Communication) 和事务排序技术( transaction ordering techniques)来实现数据库的同步复制。

一个Galera集群至少需要3个节点,同时推荐采用奇数个几点,原因为集群内需要大多数节点达到一致。

Galera Cluster插件是一个开源的,由Codership公司开发的标准MySQL数据库补丁,它有三个分支:

MySQL Galera Cluster by Codership

Percona XtraDB Cluster by Percona

MariaDB Galera Cluster (5.5 and 10.0) by MariaDB

Galera和主从复制的区别

 

主从复制实现

普通MySQL每个主从连接使用3个线程来进行复制,一个在master上,两个位于slave上,Binlog dump thread,当从库连接主库时主库会建立该线程来发送二进制文件到从库,我们可以在主库上通过show PROCESSLIST命令看到该线程。

Slave IO thread,从库创建该线程来连接主库要求主库发送二进制文件,然后写入到从库的relay log中。

Slave SQL thread,从库创建该线程来读取Slave IO thread 写入的relay log,然后在从从库中执行他们。

MySQL复制是标准MySQL的一部分,原生是异步的,我们可以通过半同步来实现实时同步功能,MySQL复制也可以实现多主复制,不过期维护非常复杂并且容易出错,并不推荐。

Galera Cluster实现

Galera Cluster 通过四个组件来实现:

 

PXC集群特点

Percona XtraDB集群是一个针对MySQL的数据库集群解决方案。它确保高可用性,防止宕机和数据丢失,并为不断增长的环境提供线性可伸缩性。

PXC集群具有如下特点:

 

PXC集群优点

PXC集群缺点

PXC集群限制

PXC集群具有如下限制:

 

PXC安装部署

环境说明

主机名

IP地址

PXC版本

mysqldb01

192.168.56.131

PXC 5.7

mysqldb02

192.168.56.132

PXC 5.7

mysqldb03

192.168.56.133

PXC 5.7

 

注意:避免创建只有两个或偶数个节点的PXC集群,因为这有可能会导致脑裂。

 

安装 PXC 5.7

1)、在配置PXC集群之前,必须在所有的MySQL主机上安装Percona-XtraDB-Cluster-57软件。

[root@mysqldb01 tmp]# wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm

[root@mysqldb01 tmp]# rpm -ihv percona-release-latest.noarch.rpm

[root@mysqldb01 tmp]# rpm -ihv socat-1.7.2.4-1.el6.rf.x86_64.rpm

[root@mysqldb01 tmp]# yum install -y Percona-XtraDB-Cluster-57

 

yum安装时会提示UDFs功能,根据需要可以在mysql启动后执行提供的语句:

Percona XtraDB Cluster is distributed with several useful UDFs from Percona Toolkit.

Run the following commands to create these functions:

mysql -e "CREATE FUNCTION fnv1a_64 RETURNS INTEGER SONAME 'libfnv1a_udf.so'"

mysql -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'"

mysql -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'"

See http://www.percona.com/doc/percona-server/5.7/management/udf_percona_toolkit.html for more details

 

2)、初始化配置MySQL,并修改root口令:

# service mysql start

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

# mysql -u root -p

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'welcome1';

# service mysql stop

 

注:所有的MySQL服务器都需要执行以上步骤完成PXC5.7的软件安装与配置工作。

 

配置PXC集群

配置PXC集群,主要涉及mysqld.cnfmysqld_safe.cnfwsrep.cnf几个配置文件,在5.7版本中,my.cnf为主配置文件,其余的配置文件放在/etc/percona-xtradb-cluster.conf.d目录,在这几个配置文件中,大家根据自己的需要定制,本演示仅作基本修改。

1)、修改wsrep.cnf文件。

# vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

添加如下内容:

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_name=pxc-cluster

wsrep_cluster_address=gcomm://192.168.56.131,192.168.56.132,192.168.56.133

wsrep_node_name=pxc1

wsrep_node_address=192.168.56.131

wsrep_sst_method=xtrabackup-v2

wsrep_sst_auth=sstuser:passw0rd

pxc_strict_mode=ENFORCING

binlog_format=ROW

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

 

注意:其他的MySQL节点也修改wsrep.cnf文件,wsrep_node_namewsrep_node_address变量值必须修改。

启动集群的第1个节点

在配置完所有PXC节点之后,通过引导第一个节点来初始化集群,初始节点应该包含您希望复制到其他节点的所有数据,如果其他的节点上有数据,则初始化后其他节点上以前存在的数据会被清空。

1)、引导意味着在没有任何已知集群地址的情况下启动节点。如果wsrep_cluster_address变量为空,则Percona XtraDB集群假设这是第一个节点,并初始化集群。但是也可以不改变配置,假设为第1个节点中现有的数据为准,使用以下命令启动第1个节点:

[root@mysqldb01 ~]# /etc/init.d/mysql bootstrap-pxc

当使用以上命令启动节点时,它将以bootstrap模式运行,wsrep_cluster_address=gcomm://。这告诉节点将wsrep_cluster_conf_id设置为1来初始化集群。在向集群中添加其他节点之后,可以像往常一样重新启动这个节点,它将再次使用标准配置。

2)、检查集群是否已经初始化,请运行以下命令:

mysql@mysqldb01> show status like 'wsrep%';

3)、创建SST的数据库用户。

在启动集群的第1个节点上创建一个用于SST的数据库用户,该用户在wsrep.cnf配置文件中需要使用。

mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';

mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';

mysql> FLUSH PRIVILEGES;

 

向集群中添加其他节点

当集群中的第1个节点启动完毕后,可以将其他的节点加入PXC集群中,命令如下所示。

[root@mysqldb02 ~]# /etc/init.d/mysql start

mysql@mysqldb02> show status like 'wsrep%';

 

查看集群状态

查看PXC集群的状态,可以在每个MySQL集群节点上运行如下命令:

show global status like 'wsrep%';

下面对wsrep_cluster_status字段进行说明:

posted @ 2020-04-22 11:05  石云华  阅读(729)  评论(0编辑  收藏  举报