当前位置: 首页 > 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。新车将在奇瑞位于芜湖江北新区的智能网联超级二工厂组装下线。目前超级二工…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...