PXC集群搭建

Posted 章怀柔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PXC集群搭建相关的知识,希望对你有一定的参考价值。

说明


Percona XtraDB Cluster(简称PXC),是由percona公司推出的mysql集群解决方案。特点是每个节点都能进行读写,且都保存全量的数据。也就是说在任何一个节点进行写入操作,都会同步给其它所有节点写入到自己的磁盘。这点跟Oracle Rac有本质的区别,Rac是多个节点连同一个共享存储,假如Oracle的共享存储挂了,整个集群就挂了。而Mysql pxc中任何一台机器挂了,集群照常运转,因为节点间并不共享磁盘。

 

写在前面的注意事项(节选自官方手册)


1. 由于pxc只作用于innodb引擎,而mysql自带的系统库(mysql)里面有些表是MyISAM的存储引擎,因此不能直接对系统库(mysql)的表进行dml操作,比如INSERT INTO mysql.user...。而是使用CREATE USER...,这个是没有问题的,而且也是正确的方式。
2. 不支持LOCK TABLES和UNLOCK TABLES语句
mysql> lock tables world write;
ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of LOCK TABLE/FLUSH TABLE <table> WITH READ LOCK/FOR EXPORT with pxc_strict_mode = ENFORCING
3. log_output参数不能是TABLE
4. 不支持分布式事务
5. 新建表必须要有主键,否则对表进行dml操作会报以下错误
ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of DML command on a table (hello.world) without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER
6. 推荐的节点数最小是3个

 

安装


准备三个节点,操作系统使用centos6.10,pxc采用rpm安装的方式,简单
节点1 ip: 10.40.16.120  hostname:mysqla
节点2 ip: 10.40.16.121  hostname:mysqlb
节点3 ip: 10.40.16.122  hostname:mysqlc

所有节点关闭防火墙

service iptables stop
chkconfig iptables off
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

 

所有节点安装以下rpm包

复制代码
#安装percona cluster依赖包
wget ftp://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm
wget http://www.rpmfind.net/linux/epel/6/x86_64/Packages/s/socat-1.7.2.3-1.el6.x86_64.rpm

yum install -y libev-4.04-2.el6.x86_64.rpm
yum install -y socat-1.7.2.3-1.el6.x86_64.rpm

#配置yum仓库
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm

#安装percona cluster
yum install -y Percona-XtraDB-Cluster-57
复制代码

到这里所有的安装工作就已经完成了,接下来就是修改参数文件,把这三个节点连起来组成集群

 

修改参数文件


需要修改的参数已经列出来了,其余不用动,注意下面这些参数有的前面有#号,需要去掉
修改节点1的参数文件
vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

复制代码
user=mysql
wsrep_cluster_address=gcomm://10.40.16.120,10.40.16.121,10.40.16.122   #集群的所有节点ip
wsrep_node_address=10.40.16.120                                        #本机的ip
wsrep_node_name=pxc-cluster-node-1                                     #本机在集群中的名字
wsrep_sst_auth="sstuser:s3cretPass"                                    #集群间同步的用户,后面需要在节点1创建该用户
复制代码

 

vi /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

server-id=1                     #集群内所有节点的id不能相同

                                  

启动节点1的mysql
/etc/init.d/mysql bootstrap-pxc  #集群的第一个节点启动必须使用该方式。如果手工将整个集群关掉了,那么重新启动集群时,应该启动最后一个被关闭的节点,且以该方式。第一个启动的节点称为donater,后面启动的节点为joiner,两者启动方式不一样,需要留意

[root@mysqla ~]# /etc/init.d/mysql bootstrap-pxc
Bootstrapping PXC (Percona XtraDB Cluster)MySQL (Percona XtraDB Cluster) is not running, but lock file (/var/lock/subsys/mysql) exists [FAILED]
Starting MySQL (Percona XtraDB Cluster)....                [  OK  ]

前面那个failed忽略,属于正常情况

 

找出root的临时密码

[root@mysqla ~]# grep "temporary password" /var/log/mysqld.log |awk -F " " \'{print $11}\'

&enffgG_E8Ty

 

修改root密码并创建同步账号(同步账号需要跟/etc/percona-xtradb-cluster.conf.d/wsrep.cnf的键值wsrep_sst_auth对应)

[root@mysqla ~]# mysql -uroot -p\'&enffgG_E8Ty\'
mysql> alter user root@\'localhost\' identified by \'root\';
mysql> create user \'sstuser\'@\'localhost\' identified by \'s3cretPass\';
mysql> grant process, reload, lock tables, replication client on *.* to \'sstuser\'@\'localhost\';
mysql> flush privileges;

 

修改节点2的参数文件
vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

user=mysql
wsrep_cluster_address=gcomm://10.40.16.120,10.40.16.121,10.40.16.122
wsrep_node_address=10.40.16.121
wsrep_node_name=pxc-cluster-node-2
wsrep_sst_auth="sstuser:s3cretPass"

 

vi /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

server-id=2

 

启动节点2的mysql
service mysql start

[root@mysqlb ~]# service mysql start
MySQL (Percona XtraDB Cluster) is not running, but lock fil[FAILED]lock/subsys/mysql) exists
Starting MySQL (Percona XtraDB Cluster)......State transfer in progress, setting sleep higher
.                                                          [  OK  ]

 

修改节点3的参数文件
vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

user=mysql
wsrep_cluster_address=gcomm://10.40.16.120,10.40.16.121,10.40.16.122
wsrep_node_address=10.40.16.122
wsrep_node_name=pxc-cluster-node-3
wsrep_sst_auth="sstuser:s3cretPass"

 

vi /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

server-id=3

 

启动节点3的mysql
service mysql start

[root@mysqlc ~]# service mysql start
MySQL (Percona XtraDB Cluster) is not running, but lock fil[FAILED]lock/subsys/mysql) exists
Starting MySQL (Percona XtraDB Cluster)......State transfer in progress, setting sleep higher
.                                                          [  OK  ]

 

以上是关于PXC集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

PXC集群搭建

docker compose 搭建pxc集群

CentOS 7 搭建PXC 数据库集群

搭建PXC集群------mysql高可用集群

docker 搭建PXC集群 与 redis集群

周一福利MySQL数据库集群-PXC方案