当前位置: 首页 > news >正文

PXC高可用集群(MySQL)

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数据库服务端口
4444SST端口
4567集群通信端口
4568IST端口
SSTState Snapshot Transfer 全量同步
ISTIncremental State Transfer 增量同步
  • 集群通信端口是指集群中各服务器之间通信的端口;数据库服务端口3306和集群通信端口4567是每时每刻都开放的;

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

1.4. 主机角色

  • 3台服务器
主机名IP地址在角色
pxcnode10192.168.2.10数据库服务器
pxcnode20192.168.2.20数据库服务器
pxcnode30192.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集群概述 1.1. PXC介绍 Percona XtraDB Cluster(简称PXC) 是基于Galera的MySQL高可用集群解决方案Galera Cluster是Codership公司开发的一套免费开源的高可用方案PXC集群主要由两部分组成:Percona Server with XtraDB(数据…...

pytorch-把线性回归实现一下。原理到实现,python到pytorch

线性回归 线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。 与回归问题不同,分类问题中模型的最终输出是一个离散值。所说的图像分类、垃圾邮件识别、疾病检测等输出为离…...

js中判断数组的方式有哪些?

js中判断数组的方式有哪些?1.通过Object.prototype.toString.call来判断2.通过instanceof来判断3.通过constructor来判断4.通过原型链来判断5.通过ES6.Array.isAaary()来判断6.通过Array.prototype.isPrototypeOf来判断1.通过Object.prototype.toString.call来判断 …...

【2023unity游戏制作-mango的冒险】-5.攻击系统的简单实现

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity游戏制作 ⭐攻击系统的简单实现⭐ 文章目录⭐攻击系统的简单实现⭐👨‍&#x1…...

SpringMVC 面试题

1、什么是SpringMVC? SpringMVC是一个基于Java的实现了MVC设计模式的“请求驱动型”的轻量级WEB框架,通过把model,view,controller 分离,将web层进行职责的解耦,把复杂的web应用分成逻辑清晰的几个部分&am…...

布局三八女王节,巧借小红书数据分析工具成功引爆618

对于小红书“她”经济来说,没有比三八节更好的阵地了。伴随三八女王节逐渐临近,各大品牌蓄势待发,这场开春后第一个S级大促活动,看看品牌方们可以做什么? 洞察流量,把握节点营销时机 搜索小红书2023年的三…...

RISCV学习(1)基本模型认识

笔者来聊聊ARM的函数的调用规则 1、ARM函数调用规则介绍 首先介绍几个术语, AAPCS:Procedure Call Standard for the ARM ArchitectureAPCS:ARM Procedure Call StandardTPCS:Thumb Procedure Call StandardATPCS:AR…...

【java代码审计】命令注入

1 成因 开发者在某种开发需求时,需要引入对系统本地命令的支持来完成某些特定的功能,此时若未对用户的输入做严格的过滤,就可能发生命令注入。 2 造成命令注入的类或方法 Runtime类:提供调用系统命令的功能 ①Runtime.getRuntim…...

速锐得适配北汽EX系列电动汽车CAN总线应用于公务分时租赁

过去的几年,我们看到整个分时租赁业务出现断崖式下跌,这是我们看到这种市场情况,是必然,也是出乎意料。原本很多融资后的出行公司、大牌的出行服务商的分时租赁业务,受各种影响不得不转型成其他出行服务。例如&#xf…...

已解决ERROR: Failed building wheel for opencv-python-headless

已解决ERROR: Failed building wheel for opencv-python-headless Failed to build opencv-python-headless ERROR: Could not build wheels for opencv-python-headless, which is required to install pyproject.toml-based projects报错信息亲测有效 文章目录报错问题报错翻…...

每日获取安全资讯的网站,国内外共120个

国内 FreeBuf(https://www.freebuf.com/) 安全客(https://www.anquanke.com/) 雷锋网安全(https://www.leiphone.com/category/security) 先知社区(https://xz.aliyun.com/) CSDN安全…...

HUN工训中心:开关电路和按键信号抖动

工训中心的牛马实验 1.实验目的: 1) 认识开关电路,掌握按键状态判别、开关电路中逻辑电平测量、逻辑值和逻辑函数电路。 2) 掌握按键信号抖动简单处理方法。 3) 实现按键计数电路。 2.实验资源: HBE硬件基础电路实验箱、示波器、万用表…...

WordPress 主题 SEO 标题相关函数和过滤器教程wp_get_document_title()

WordPress 4.4.0 版本开始,加入了 wp_get_document_title(); 这个函数,而 wp_title(); 已经 deprecated 不推荐使用。因此,如果想要启用 WordPress 主题标题功能,在不安装 WordPress SEO 插件的情况下,可以使用以下代码…...

Qt 事件机制

【1】事件 事件是可以被控件识别的操作。如按下确定按钮、选择某个单选按钮或复选框。 每种控件有自己可识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件等等。 事件就是用户对窗口上各种组件的操作。…...

【Python】Numpy--np.linalg.eig()求对称矩阵的特征值和特征向量

【Python】Numpy–np.linalg.eig()求对称矩阵的特征值和特征向量 文章目录【Python】Numpy--np.linalg.eig()求对称矩阵的特征值和特征向量1. 介绍2. API3. 代码示例1. 介绍 特征分解(Eigendecomposition),又称谱分解(Spectral d…...

医疗床头卡(WIFI方案)

一、产品特性 7.5寸墨水屏显示WIFI无线通信,极简部署,远程控制按键及高亮LED指示灯指示800*480点阵屏幕锂电池供电,支持USB充电DIY界面支持文本/条码/二维码/图片超低功耗/超长寿命,一次充电可用一年基于现有Wifi环境&#xff0c…...

[YOLO] yolo博客笔记汇总(自用

pip下载速度太慢,国内镜像: 国内镜像解决pip下载太慢https://blog.csdn.net/weixin_51995286/article/details/113972534​​​​​​​ YOLO v2和V3 关于设置生成anchorbox,Boundingbox边框回归的过程详细解读 YOLO v2和V3 关于设置生成an…...

Linux 常用 API 函数

文章目录1. 系统调用与库函数1.1 什么是系统调用1.2 系统调用的实现1.3 系统调用和库函数的区别2. 虚拟内存空间3. 错误处理函数4. C 库中 IO 函数工作流程5. 文件描述符6. 常用文件 IO 函数6.1 open 函数6.2 close 函数6.3 write 函数6.4 read 函数6.5 lseek 函数7. 文件操作相…...

【转载】bootstrap自定义样式-bootstrap侧边导航栏的实现

bootstrap自带的响应式导航栏是向下滑动的,但是有时满足不了个性化的需求: 侧滑栏使用定位fixed 使用bootstrap响应式使用工具类 visible-sm visible-xs hidden-xs hidden-sm等对不同屏幕适配 侧滑栏的侧滑效果不使用jquery方法来实现,使用的是css3 tr…...

奇瑞x华为纯电智选车来了,新版ADS成本将大幅下降

作者 | 德新 编辑 | 于婷HiEV获悉,问界M5将在4月迎来搭载高阶辅助驾驶的新款,而M9将在今年秋天发布。 奇瑞一侧,华为将与奇瑞首先推出纯电轿车,代号EH3。新车将在奇瑞位于芜湖江北新区的智能网联超级二工厂组装下线。目前超级二工…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...