PXC(Percona XtraDB Cluster)
--是基于Galera的MySQL高可用集群解决方案
--PXC集群主要由两个部分组成:Percona Server with XtraDB和Write set replication patches(同步、多主复制插件)
--官网:http://galeracluster.com
特点如下:
数据强一致性、无同步延迟
没有主从切换操作,无需使用虚拟Ip
支持innoDB存储引擎
多线程复制
部署使用简单
支持节点自动加入,无需手动拷贝数据
相应端口
端口 | 说明 |
3306 | 数据库服务端口 |
4444 | SST端口 |
4567 | 集群通信端口 |
4568 | IST端口 |
SST | State Snapshot Transfer 全量同步 |
IST | Incremental State Transfer增量同步 |
软件介绍
配置服务:
部署PXC
1.3 3台服务器分别安装PXC 软件 ]# cd pxc ]# 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 //安装依赖 ]# tar -xvf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar ]# yum -y install Percona-XtraDB-Cluster-*.rpm
1.4 修改配置文件(3台数据库服务器都要修改) ]# ls /etc/percona-xtradb-cluster.conf.d/ 安装列表 mysqld.cnf(MySQL服务配置文件) mysqld_safe.cnf(无需修改) wsrep.cnf(集群 配置文件)
三台设置server的id
]# vim mysqld.cnf [mysqld] server_id=71
检查数据库目录下没有任何文件
]# ls /var/lib/mysql/ 没有数据
开始配置
]# vim wsrep.cnf #集群成员列表 3台机器必须一致 wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
#集群名称3台机器 必须一致 wsrep_cluster_name=pxc-cluster #全量同步服务连接服务用户3台机器 必须一致 wsrep_sst_auth="sstuser:123qqq...A" #本机IP地址 wsrep_node_address=192.168.4.71 #本机主机名 wsrep_node_name=pxc-cluster-node-71
启动服务
[root@pxcnode71 ~]# ]# systemctl start mysql@bootstrap.service //启动集群服务 [root@pxcnode71 ~]# grep pass /var/log/mysqld.log //查看数据库管理员初始登录密码 2019-06-20T12:29:42.489377Z 1 [Note] A temporary password is generated for root@localhost: W.HiOb8(ok)_ [root@pxcnode71 ~]#mysql –uroot –p’ W.HiOb8(ok)_’ //使用初始密码登录 Mysql> alter user root@”localhost” identified by “123456”;//修改登录密码 MySQL> exit; [root@pxcnode71 ~]#mysql –uroot –p123456 //使用修改后的密码登录 Mysql> garnt reload, lock tables,replication client,process on *.* to sstuser@"localhost” identified by “123qqq…A”; //添加授权用户
2)启动数据库服务
启动主机pxcnode72的数据库服务,会自动同步pxcnode71主机的root初始密码和授权用户sstuser
[root@pxcnode72 ~]# systemctl start mysql //启动数据库服务 [root@pxcnode72 ~]# [root@pxcnode72 ~]# netstat -utnlp | grep :3306 tcp6 0 0 :::3306 :::* LISTEN 12794/mysqld [root@pxcnode72 ~]# netstat -utnlp | grep :4567 tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 12794/mysqld [root@host72 ~]#
启动主机pxcnode73的数据库服务,会自动同步pxcnode71主机的root初始密码和授权用户sstuser
[root@pxcnode73 ~]# systemctl start mysql //启动数据库服务 [root@pxcnode73 ~]# [root@pxcnode73 ~]# netstat -utnlp | grep :3306 tcp6 0 0 :::3306 :::* LISTEN 12794/mysqld [root@pxcnode73 ~]# netstat -utnlp | grep :4567 tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 12794/mysqld [root@host73 ~]#
检测配置:
1)启动数据库服务
在任意一台数据查看都可以。
[root@pxcnode71 ~]# mysql -uroot -p123456 wsrep_incoming_addresses 192.168.4.71:3306,192.168.4.72:3306,192.168.4.73:3306 //集群成员列表 wsrep_cluster_size 3 //集群服务器台数 wsrep_cluster_status Primary //主机状态 wsrep_connected ON //连接状态 wsrep_ready ON //服务状态
步骤二:访问集群,存取数据
1)添加访问数据的连接用户 (在任意一台服务器上添加都可以,另外的2台服务器会自动同步授权用户)
[root@pxcnode72 ~]# mysql -uroot -p123456 mysql> grant all on gamedb.* to yaya@"%" identified by "123456"; //添加授权用户 Query OK, 0 rows affected, 1 warning (0.18 sec) [root@pxcnode71 ~]# mysql -uroot -p123456 -e 'show grants for yaya@"%" ' //查看 mysql: [Warning] Using a password on the command line interface can be insecure. +--------------------------------------------------+ | Grants for yaya@% | +--------------------------------------------------+ | GRANT USAGE ON *.* TO 'yaya'@'%' | | GRANT ALL PRIVILEGES ON `gamedb`.* TO 'yaya'@'%' | +--------------------------------------------------+ [root@pxcnode71 ~]# [root@pxcnode73 ~]# mysql -uroot -p123456 -e 'show grants for yaya@"%" ' //查看 mysql: [Warning] Using a password on the command line interface can be insecure. +--------------------------------------------------+ | Grants for yaya@% | +--------------------------------------------------+ | GRANT USAGE ON *.* TO 'yaya'@'%' | | GRANT ALL PRIVILEGES ON `gamedb`.* TO 'yaya'@'%' | +--------------------------------------------------+
2)客户端连接集群存取数据 (连接任意一台数据库服务器的ip地址都可以)
连接数据服务器主机73
client50 ~]# mysql -h192.168.4.73 -uyaya -p123456 //连接服务器73 mysql> mysql> create database gamedb; //建库 Query OK, 1 row affected (0.19 sec) mysql> create table gamedb.a(id int primary key auto_increment,name char(10));//建表 Query OK, 0 rows affected (1.02 sec) mysql> insert into gamedb.a(name)values("bob"),("tom"); //插入记录 Query OK, 2 rows affected (0.20 sec) Records: 2 Duplicates: 0 Warnings: 0
步骤三:测试故障自动恢复
1)停止数据库服务
停止3台服务器的任意一台主机的数据库服务都不会影响数据的存取。
[root@pxcnode71 ~]# systemctl stop mysql //停止71主机的数据库服务 Client50 ~]# client50 ~]# mysql -h192.168.4.72 -uyaya -p123456 //连接服务器72 mysql> insert into gamedb.a(name)values("bob2"),("tom2"); mysql> insert into gamedb.a(name)values("jerry"),("jack"); Query OK, 2 rows affected (0.20 sec) Records: 2 Duplicates: 0 Warnings: 0