1. PXC集群概述

1.1. PXC介绍

  • Percona XtraDB Cluster(简称PXC)
  • 是基于Galera的MySQL高可用集群解决方案
  • Galera Cluster是Codership公司开发的一套免费开源的高可用方案
  • PXC集群主要由两部分组成:Percona Server with XtraDB(数据存储插件)和 Write Set Replication patches(同步、多主复制插件)
  • 官网:http://galeracluster.com

1.2. PXC特点

  • 数据强一致性,无同步延迟(写入主服务器的数据,所有从服务器必须马上也得有)
  • 没有主从切换操作,无需使用虚拟IP(无需一主多从的结构,无需vip地址)
  • 支持InnoDB存储引擎
  • 多线程复制(多线程同步工作),部署使用简单。
  • 支持节点自动加入,无需手动拷贝数据(服务器会自动同步宕机期间的数据,无需手动配置)

1.3. 相应端口

端口 说明
3306 数据库服务端口
4444 SST端口
4567 集群通信端口
4568 IST端口
SST State Snapshot Transfer 全量同步
IST Incremental State Transfer 增量同步
  • 集群通信端口是指集群中各服务器之间通信的端口;数据库服务端口3306和集群通信端口4567是每时每刻都开放的;

  • SST 端口4444和IST 端口4568只有数据同步的时候才会开放。

1.4. 主机角色

  • 3台服务器
主机名 IP地址在 角色
pxcnode10 192.168.2.10 数据库服务器
pxcnode20 192.168.2.20 数据库服务器
pxcnode30 192.168.2.30 数据库服务器
##在每台主机上都修改自己的主机名
[root@localhost ~]# hostname pxcnode10 ;su   --在192.168.2.10上执行
[root@localhost ~]# hostname pxcnode20 ;su   --在192.168.2.20上执行
[root@localhost ~]# hostname pxcnode30 ;su   --在192.168.2.30上执行
##在每台主机上执行修改hosts文件
vim /etc/hosts
#添加下面内容:
192.168.2.10   pxcnode10
192.168.2.20   pxcnode20
192.168.2.30   pxcnode30

2. 部署PXC

2.1. 安装软件包

  • 软件介绍
软件 作用
percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm 在线热备程序
qpress.1.1-14.11.x86_64.rpm 递归压缩程序
Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar 集群服务程序
  • 软件下载
  • percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm 下载地址:
    https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

  • qpress.1.1-14.11.x86_64.rpm 下载地址:
    http://rpm.pbone.net/results_limit_2_srodzaj_2_dl_40_search_qpress.html

  • Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar 下载地址:

    https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/

  • 下面的操作三台服务器都需要执行

##下载软件包:
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.13/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpmwget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home%3A/AndreasStieger%3A/branches%3A/Archiving/RedHat_RHEL-6/x86_64/qpress-1.1-14.11.x86_64.rpmwget https://downloads.percona.com/downloads/Percona-XtraDB-Cluster-57/Percona-XtraDB-Cluster-5.7.25-31.35/binary/redhat/7/x86_64/Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar##安装软件包
[root@pxcnode10 ~]# tar -xf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar
[root@pxcnode10 ~]# yum -y install *.rpm

2.2. 配置服务

  • 相关配置文件
/etc/percona-xtradb-cluster.conf.d/   ---所有的配置文件
  • 配置文件说明
  • mysqld.cnf ------数据库服务运行参数配置文件
  • mysqld_safe.cnf ------mysqld的进程配置文件
  • wsrep.cnf-------PXC集群配置文件
  • 修改配置文件(mysqld.cnf)

[mysqld]

server-id=1 #server-id,不允许重复

datadir=/var/lib/mysql #数据库目录的路径

socket=/var/lib/mysql/mysql.sock #socker文件的路径

log-error=/var/log/mysqld.log #日志文件的路径

pid-file=/var/run/mysqld/mysqld.pid #pid文件的路径

log-bin #默认启用binlog日志

log_slave_updates #启用链式复制

expire_logs_days=7 #日志文件保留天数,默认日志文件保留7天

##pxcnode10操作
[root@pxcnode10 ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@pxcnode10 percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[mysqld]
##修改如下:
server-id=10##pxcnode20操作
[root@pxcnode20 ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@pxcnode20 percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[mysqld]
##修改如下:
server-id=20##pxcnode30操作
[root@pxcnode30 ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@pxcnode30 percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[mysqld]
##修改如下:
server-id=30
  • 修改集群配置文件(wsrep.cnf)

wsrep_cluster_address=gcomm:// #集群成员列表,3台必须相同

wsrep_node_address=192.168.70.63 #本机IP地址

wsrep_cluster_name=pxc-cluster #集群名称,可自定义,3台必须相同

wsrep_node_name=pxc-cluster-node #本机主机名

wsrep_sst_auth=“sstuser:s3cretPass” #SST数据同步用户授权,3台必须相同

##在pxcnode10操作如下:
[root@pxcnode10 percona-xtradb-cluster.conf.d]# vim wsrep.cnf
修改如下:
wsrep_cluster_address=gcomm://192.168.2.20,192.168.2.30,192.168.2.10   ---集群成员列表
wsrep_node_address=192.168.2.10   ---本机IP地址
wsrep_node_name=pxcnode10        ---本机主机名
wsrep_sst_auth="sstuser:1234"     SST数据同步用户密码##在pxcnode20操作如下:
[root@pxcnode20 percona-xtradb-cluster.conf.d]# vim wsrep.cnf
修改如下:
wsrep_cluster_address=gcomm://192.168.2.10,192.168.2.30,192.168.2.20   ---集群成员列表
wsrep_node_address=192.168.2.20   ---本机IP地址
wsrep_node_name=pxcnode20        ---本机主机名
wsrep_sst_auth="sstuser:1234"     SST数据同步用户密码##在pxcnode30操作如下:
[root@pxcnode30 percona-xtradb-cluster.conf.d]# vim wsrep.cnf
修改如下:
wsrep_cluster_address=gcomm://192.168.2.10,192.168.2.20,192.168.2.30   ---集群成员列表
wsrep_node_address=192.168.2.30   ---本机IP地址
wsrep_node_name=pxcnode30        ---本机主机名
wsrep_sst_auth="sstuser:1234"     SST数据同步用户密码

2.3. 启动服务

  • 在任意一台执行即可
  • 启动集群服务
  • 添加授权用户
[root@pxcnode10 ~]# systemctl start mysql@bootstrap.service     ---启动集群服务
##查看数据库初始密码
[root@pxcnode10 ~]# grep pass /var/log/mysqld.log
2023-02-27T10:23:13.040978Z 1 [Note] A temporary password is generated for root@localhost: qgCeYyfl3a*j##使用初始密码登录mysql
[root@pxcnode10 ~]# mysql -uroot -p'qgCeYyfl3a*j'
##修改root密码
mysql> alter user 'root'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.02 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
##添加授权用户
mysql> grant reload ,lock tables,replication client,process on *.* to sstuser@'localhost' identified by '1234';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
--添加授权用户,数据会自动同步到主机20和30上。
reload装载数据的权限;lock tables锁表的权限;
replication client查看服务状态的权限;process管理服务的权限(查看进程信息);
授权用户和密码必须是集群的配置文件中指定的(wsrep_sst_auth="sstuser:1234")。

2.4. 启动另外两台数据库服务

##pxcnode20和pxcnode30都需要执行
[root@pxcnode20 ~]# systemctl start mysql
---启动过程比较慢,因为第一次启动都会向pxcnode10做全量同步。

3. 测试配置

  • 查看集群信息
  • 在任意一台操作即可

mysql> show status like “%wsrep%”;

wsrep_incoming_addresses 192.168.233.72:3306,192.168.233.73:3306,192.168.233.71:3306 //成员列表
wsrep_cluster_size 3 //集群服务器台数
wsrep_cluster_status Primary //集群状态
wsrep_connected ON //连接状态
wsrep_ready ON //服务状态

3.1. 测试集群同步功能

  • 在任意一台服务器上添加访问数据的授权用户
  • 在客户端使用授权用户连接任意数据库服务器都可以存储数据,且可以查看到同样的数据
  • 建表时,必须有主键字段
##在任意一台服务器上创建授权用户
mysql> grant all on *.* to 'test'@'%' identified by '1234';
##测试test这个用户是否可以登录其他的服务器mysql。
[root@pxcnode10 ~]# mysql -h 192.168.2.30 -utest -p1234
[root@pxcnode10 ~]# mysql -h 192.168.2.20 -utest -p1234
[root@pxcnode10 ~]# mysql -h 192.168.2.10 -utest -p1234
--测试完成我这边都可以登录。##创建数据并创建表
mysql> create database sxy default charset=utf8;
mysql> create table t1(id int primary key auto_increment,name char(10)not null,sex enum('boy','girl'),age int unsigned);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values(1,'bob','boy',29);
##在任意一台服务器查看t1表信息。
[root@pxcnode20 ~]# mysql -h192.168.2.10 -utest -p1234 -e " select * from sxy.t1;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | bob  | boy  |   29 |
+----+------+------+------+
-----其他的我这边就不展示了。

3.2. 测试高可用功能及数据库服务器自动恢复。

  • 测试故障自动恢复
  • 任何一台数据库服务器宕机都不影响用户存取数据
  • 服务器运行后自动同步宕机期间的数据

3.2.1. 模拟pxcnode20宕机

##模拟pxcnode20服务停止
[root@pxcnode20 ~]# systemctl stop mysql
[root@pxcnode20 ~]# netstat -nltp |grep 3306

3.2.2.客户端连接pxcnode10查看集群状态

[root@pxcnode10 ~]# mysql -h192.168.2.10 -utest -p1234
mysql> show status like "%wsrep%";

  • 如图所示:集群数量服务器数量变为2台,正在运行只有192.168.2.10和192.168.2.30。

3.2.3. 在pxcnode10的sxy.t1表插入数据

mysql> use sxy;mysql> insert into t1(name,sex,age) values('andy','boy',24),('lucy','girl',29);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from t1;

  • 如图所示,红圈圈起来的数据为服务器pxcnode20宕机期间新插入的数据,由于服务器pxcnode20宕机,只剩下两台服务器,步长与服务器的数量有关,所以新插入的数据自增长的步长为2。

3.2.4. 在pxcnode30上查看sxy.t1表的内容

[root@pxcnode10 ~]# mysql -h192.168.2.30 -utest -p1234 -e " select * from sxy.t1;"+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | bob  | boy  |   29 |
|  3 | andy | boy  |   24 |
|  5 | lucy | girl |   29 |
+----+------+------+------+
##可以看的出来数据同步正常。

3.2.5. 恢复pxcnode20查看集群状态

[root@pxcnode20 ~]# systemctl start mysql
[root@pxcnode20 ~]# netstat -ntlp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      11409/mysqld
[root@pxcnode20 ~]# mysql -uroot -p1234 -e 'show status like "%wsrep%";'

  • 如图所示:pxcnode20已经加入集群,集群服务数量变成3。

3.2.6. 客户端访问pxcnode20查看sxy.t1表内容

[root@pxcnode20 ~]# mysql -uroot -p1234 -e "select * from sxy.t1";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | bob  | boy  |   29 |
|  3 | andy | boy  |   24 |
|  5 | lucy | girl |   29 |
+----+------+------+------+
---可以看的出来新插入的数据已经同步OK。

PXC高可用集群(MySQL)相关推荐

  1. PXC高可用集群总结

    下面这几个问题是我对MySQL高可用集群总结,希望能让大家对PXC有一些了解! 一.PXC的主节点和从节点分别代表什么意义? PXC中的主节点和从节点跟Replication主从节点是有巨大差别的. ...

  2. LVS+keepalived构建PXC高可用集群

    2019独角兽企业重金招聘Python工程师标准>>> 1 高可用安装 1.1 集群信息 主机 IP 组件 bdc212 192.168.13.212 LVS:ipvsadm-1.2 ...

  3. mysql pxc搭建_MySQL PXC 高可用集群搭建

    一些名词介绍: WS:write set写数据集IST: Incremental State Transfer增量同步SST:State Snapshot Transfer全量同步 pxc环境所涉及的 ...

  4. 企业中MySQL高可用集群架构三部曲之MM+keepalived

    各位老铁们,老张与大家又见面了.看到各位在博客里面给我的留言和访问量的情况,我很是欣慰,也谢谢大家对我的认可.我写这些博客,就是想把自己对于MySQL数据库的一些看法和自己平时的实战经验分享出来,我们 ...

  5. mysql高可用方案_MySQL高可用集群方案

    一.Mysql高可用解决方案 方案一:共享存储 一般共享存储采用比较多的是 SAN/NAS 方案. 方案二:操作系统实时数据块复制 这个方案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+ ...

  6. 企业主流MySQL高可用集群

    选型 10款常见MySQL高可用方案选型解读 MYSQL(高可用方案) 目前最流行的是:主从复制.基于Galera的方案 企业主流MySQL高可用集群 了解 MySQL 集群之前,先看看单节点数据库的 ...

  7. 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置

    实验环境 主机名 IP 服务 server1 172.25.6.1 ricci,luci, iscsi,mysql-server server2 172.25.6.2 ricci,iscsi,mysq ...

  8. mysql vip_MySQL高可用集群的VIP切换

    一.目的 实现在mysql高可用集群的VIP切换,不涉及数据补偿 二.基础环境 python3.0+ 三.具体三大部分 1.启动条件检测检测集群是否down机 方式 select 1 检测主库是否有V ...

  9. mycat mysql好可用架构_想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?...

    一.集群架构 1.MyCat实现读写分离架构 在我前面的文章, 我已经讲解过了通过MyCat来实现MySQL的读写分离, 从而完成MySQL集群的负载均衡 , 如下面的结构图: 但是以上架构存在问题 ...

最新文章

  1. JAVA自学笔记07
  2. PHP文本处理 中文汉字字符串 转换为数组
  3. redis集合数据过期_关于redis性能问题分析和优化
  4. Iframe的那些事
  5. arcgis报错常用解决方法
  6. 通过管道传输快速将MySQL的数据导入Redis
  7. HTTP框架--FOREST 的使用
  8. mysql从库新增_MySQL新增从库
  9. vray渲染不了 全白_救急!!! vray for sketchup 渲染出来全白 !!求解决。。。重金...
  10. systrace 基本使用
  11. 基于阿里云服务器使用kubeadm搭建k8s集群
  12. 图形化开发(九)01-Three.js之案例——王者荣耀demo制作
  13. 会议OA项目之我的会议排座批审功能
  14. 【毕业设计】大数据招聘数据分析可视化 - python
  15. 阿里巴巴的AI价值观,以及“ET大脑”战略
  16. ROT13加密和解密
  17. 导数和积分的转换关系
  18. 安卓手机拨号键盘隐藏工程代码大全
  19. 15、ESP-MESH组网
  20. Dubbo分布式事务处理--视频教程

热门文章

  1. windows 安装metis_如何在windows上安装python中的METIS包?
  2. Mac 查找应用安装路径
  3. c语言windows头文件包含,不包含windows.h和window.h内的任何头文件,弹框 “Hello, world!”...
  4. 面试问题:如何开展接口测试
  5. 迎接互联网的明天--玩转3D Web
  6. 日志数据如何同步到MaxCompute
  7. Vue处理后台返回List集合带有Object对象的数据
  8. HttpWebRequest 介绍
  9. Linux下分割、合并PDF(pdftk)
  10. 隐私保护深度学习技术综述