1.pxc集群
1.1 软件介绍
• Percona XtraDB Cluster(简称PXC)
- 是基于Galera的mysql高可用集群解决方案
- Galera Cluster是Codership公司开发的一套免费开源的高可用方案
- PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(同步,多主复制插件)
- 官网http://galeracluster.com
1.1.2 PXC特点
• 具体如下
- 数据强一致性,无同步延迟
- 没有主从切换操作,无需使用虚拟IP
- 支持innodb存储引擎
- 多线程复制
- 部署使用简单
- 支持节点自动加入,无需手动拷贝数据
1.1.3 相应端口
1.2 配置pxc集群 (192.168.4.71/72/73)
1.2.1 主机名绑定
[root@pxcnode71 ~]# vim /etc/hosts
192.168.4.71 pxcnode71
192.168.4.72 pxcnode72
192.168.4.73 pxcnode73
:wq
1.2.2 安装PXC软件(三台服务器分别安装)
[student@room9pc01 ~]$ scp -r /linux-soft/03/PXC [email protected]:/root
[root@pxcnode72 ~]# cd PXC/
[root@pxcnode72 PXC]# yum -y install libev-4.15-1.el6.rf.x86_64.rpm
[root@pxcnode72 PXC]# yum -y install percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
[root@pxcnode72 PXC]# yum -y install qpress-1.1-14.11.x86_64.rpm
[root@pxcnode72 PXC]# tar -xf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar
[root@pxcnode72 PXC]# yum -y install Percona-XtraDB-Cluster-*.rpm
1.2.3 修改PXC集群配置文件 (三台服务器分别修改)
[root@pxcnode71 ~]# ls /etc/percona-xtradb-cluster.conf.d/
mysqld.cnf # 数据库服务运行参数配置文件
mysqld_safe.cnf # percona server 5.7配置文件(使用默认配置即可)
wsrep.cnf # PXC集群配置文件
[root@pxcnode71 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[mysqld]
server-id=71 # server_id 不允许重复
:wq
[root@pxcnode71 ~]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_cluster_address=gcomm://192.168.4.72,192.168.4.73,192.168.4.71 #集群成员列表
wsrep_node_address=192.168.4.71 #本机Ip地址
wsrep_cluster_name=pxc-cluster #集群名称,三台必须相同
wsrep_node_name=pxcnode71 #本机主机名
wsrep_sst_auth="sstuser:123qqq...A" #SST数据同步授权用户
1.2.4 启动服务(在任意一台主机执行即可)
[root@pxcnode71 ~]# systemctl start [email protected]
[root@pxcnode71 ~]# netstat -ntlup | grep :3306
[root@pxcnode71 ~]# netstat -ntlup | grep :4567
[root@pxcnode71 ~]# grep password /var/log/mysqld.log
[root@pxcnode71 ~]# mysql -uroot -p"q_5xPy8gARng"
mysql> alter user user() identified by "123qqq...A";
mysql> grant reload,lock tables,replication client,process on *.* to sstuser@"localhost" identified by "123qqq...A"
1.2.5 其他二台服务器上执行
- 启动数据库服务
- 会自动同步71主机的授权用户及管理员root的密码
[root@pxcnode72 ~]# systemctl start mysql
[root@pxcnode72 ~]# netstat -ntlup | grep :3306
[root@pxcnode72 ~]# netstat -ntlup | grep :4567
[root@pxcnode72 ~]# mysql -uroot -p123qqq...A
mysql> select user,host from mysql.user;
1.3 测试配置
1.3.1 查看集群信息(可在任意一台数据库服务器上执行)
- 执行sql命令 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
1.3.2 测试集群功能
- 在任意一台服务器上添加访问数据的授权用户
- 在客户端使用授权用户连接任意数据库服务器都可以存储数据,且可以查看到同样的数据
- 建表时,必须有主键字段
mysql> grant all on gamedb.* to admin@"%" identified by "123qqq...A";
[root@mysql50 ~]# mysql -h192.168.4.72/71/73 -uadmin -p123qqq...A #访问集群
mysql> show grants ;
mysql> create database gamedb;
mysql> show databases;
mysql> create table gamedb.stuinfo(id int primary key auto_increment,name char(15),
age tinyint unsigned,class char(9));
mysql> desc gamedb.stuinfo;
mysql> insert into gamedb.stuinfo (name,age,class) values ("bobo",19,"nds1906");
mysql> insert into gamedb.stuinfo (name,age,class) values ("jerry",20,"nds1906");
mysql> insert into gamedb.stuinfo (name,age,class) values ("iboy",19,"nds1906");
mysql> select * from gamedb.stuinfo ;
[root@pxcnode73 ~]# mysql -uroot -p123qqq...A
mysql> select * from gamedb.stuinfo ;
1.3.3 测试故障自动恢复
- 任何一台数据库服务器宕机都不影响用户存取数据
- 服务器运行后 自动同步宕机期间的数据
[root@pxcnode72 ~]# systemctl stop mysql
[root@pxcnode72 ~]# netstat -ntlup | grep :4567
[root@pxcnode72 ~]# netstat -ntlup | grep :3306
[root@mysql50 ~]# mysql -h192.168.4.73 -uadmin -p123qqq...A
mysql> insert into gamedb.stuinfo (name,age,class) values ("john",20,"nds1906");
mysql> insert into gamedb.stuinfo (name,age,class) values ("jiejie",20,"nds1906");
mysql> insert into gamedb.stuinfo (name,age,class) values ("make",20,"nds1906");
mysql> select * from gamedb.stuinfo ;
[root@pxcnode72 ~]# systemctl restart mysql
mysql> select * from gamedb.stuinfo ;