PXC
一、PXC概述
1.1、介绍
- Percona XtraDB Cluster(PXC)
- 是基于Galera的MySQL高可用集群解决方案
- Galera Cluster是Codership公司开发的一套免费开源的高可用方案
- PXC集群主要由两部分组成
Percona Server with XtarDB
Write Replication patches
1.2、特点
- 数据强一致性、无同步延迟
- 没有主从切换操作,无需使用虚拟IP
- 支持InnoDB存储引擎
- 多线程复制
- 部署使用简单
- 支持节点自动加入,无需手动拷贝数据
停止集群中的任意1台主机的数据服务
客户端依然可以连接其他数据服务器查看和存数据
把数据库服务启动后,会自动加入集群并并同步宕机期间的数据。
1.3、相应端口
- 服务端口
端口 | 说明 |
---|---|
3306 | 数据库服务端口 |
4444 | SST端口 |
4567 | 集群通信端口 |
4568 | IST端口 |
- SST
State Snapshot Transfer 全量同步 - IST
Incremental State Transfer 增量同步
二、部署PXC
2.1、安装软件
- 三台服务器
]# ls
libev-4.15-1.el6.rf.x86_64.rpm
percona-release-0.1-4.noarch.rpm
percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm //在线热备程序
Percona-XtraDB-Cluster-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-57-debuginfo-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-client-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-devel-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-full-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-garbd-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-server-57-5.7.25-31.35.1.el7.x86_64.rpm //集群服务程序
Percona-XtraDB-Cluster-shared-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-shared-compat-57-5.7.25-31.35.1.el7.x86_64.rpm
Percona-XtraDB-Cluster-test-57-5.7.25-31.35.1.el7.x86_64.rpm
qpress-1.1-14.11.x86_64.rpm //递归压缩程序
]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm //安装依赖
]# yum -y install percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
]# rpm -ivh qpress-1.1-14.11.x86_64.rpm //安装依赖
]# yum -y install Percona-XtraDB-Cluster-*.rpm
]# ls /etc/percona-xtradb-cluster.conf.d/ //配置文件所在目录
2.2、修改服务器配置文件
- 三台服务器
]# ls /etc/percona-xtradb-cluster.conf.d/ //配置文件所在目录
mysqld.cnf mysqld_safe.cnf wsrep.cnf
- wsrep.cnf
PXC集群配置文件 - mysqld.cnf
数据库服务运行参数配置文件
[mysqld]
server-id=1 //不允许重复,默认是1
datadir=/var/lib/mysql //数据库目录
socket=/var/lib/mysql/mysql.sock //socket文件
log-error=/var/log/mysqld.log //日志文件
pid-file=/var/run/mysqld/mysqld.pid //pid文件
log-bin //启用binlog日志
log_slave_updates //启用链式复制
expire_logs_days=7 //日志文件保持的天数
- mysqld_safe.cnf
Percona Server 5.7配置文件
2.2.1、修改数据库服务运行参数配置文件
[root@pxcnode1 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[mysqld]
server-id=1
[root@pxcnode2 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[mysqld]
server-id=2
[root@pxcnode3 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[mysqld]
server-id=3
2.2.2、修改PXC集群配置文件
[root@pxcnode1 ~]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73 //集群成员列表
wsrep_node_address=192.168.4.71 //本机IP地址
wsrep_cluster_name=pxc-cluster //集群名称
wsrep_node_name=pxc-cluster-node-71 //本机主机名
wsrep_sst_auth="sstuser:123qqq...A" //SST数据同步授权用户
[root@pxcnode2 ~]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
wsrep_node_address=192.168.4.72
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-72
wsrep_sst_auth="sstuser:123qqq...A"
[root@pxcnode3 ~]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
wsrep_node_address=192.168.4.73
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-73
wsrep_sst_auth="sstuser:123qqq...A"
2.3、启动服务
2.3.1、在pxcnode1主机做集群的初始配置
在一台服务器上执行就可以
同样可以在其他服务器上执行
[root@pxcnode1 ~]# systemctl start mysql@bootstrap.service //启动集群配置
[root@pxcnode1 ~]# netstat -utnlp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 9154/mysqld
[root@pxcnode1 ~]# netstat -utnlp | grep 4567
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 9154/mysqld
[root@pxcnode1 ~]# grep password /var/log/mysqld.log
2020-03-30T07:54:32.690202Z 1 [Note] A temporary password is generated for root@localhost: R>3#h*jPey(l
[root@pxcnode1 ~]# mysql -uroot -p'R>3#h*jPey(l'
mysql> alter user root@"localhost" identified by "123456";
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
mysql> grant reload , lock tables , replication client , process on *.* to sstuser@"localhost" identified by "123qqq...A";
2.3.2、在pxcnode2、3上启动服务
[root@pxcnode2 ~]# systemctl start mysql
[root@pxcnode2 ~]# netstat -utnlp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 8914/mysqld
[root@pxcnode2 ~]# netstat -utnlp | grep 4567
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 8914/mysqld
[root@pxcnode2 ~]# mysql -uroot -p123456
[root@pxcnode3 ~]# systemctl start mysql
[root@pxcnode3 ~]# netstat -utnlp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 10998/mysqld
[root@pxcnode3 ~]# netstat -utnlp | grep 4567
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 10998/mysqld
[root@pxcnode3 ~]# mysql -uroot -p123456
2.3.3、在任意服务器上查看集群信息
mysql> show status like "%wsrep_%";
wsrep_incoming_addresses | 192.168.4.73:3306,192.168.4.71:3306,192.168.4.72:3306 //成员列表
wsrep_cluster_size | 3 //集群服务器台数
wsrep_cluster_status | Primary //集群状态
wsrep_connected | ON //连接状态
wsrep_ready | ON //服务状态
2.4、客户端访问集群存取数据
- 在任意一台数据库服务器上添加授权 用户
先创建库表
mysql> create database mydb1;
Query OK, 1 row affected (0.01 sec)
mysql> create table mydb1.user(id int primary key auto_increment , name char(10) );
Query OK, 0 rows affected (0.01 sec)
mysql> grant select , insert on mydb1.* to abc@"%" identified by "123456";
Query OK, 0 rows affected, 1 warning (0.01 s
- 客户端连接测试
[root@client ~]# mysql -h192.168.4.71 -uabc -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb1 |
+--------------------+
2 rows in set (0.00 sec)
[root@client ~]# mysql -h192.168.4.72 -uabc -p123456
mysql> show databases;
[root@client ~]# mysql -h192.168.4.73 -uabc -p123456