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

mysql pxc高可用离线部署(三)

pxc学习流程

mysql pxc高可用 单主机 多主机部署(一)
mysql pxc 高可用多主机离线部署(二)
mysql pxc高可用离线部署(三)

mysql pxc高可用

在这里插入图片描述

跨主机部署pxc

本文使用docker进行安装,主机间通过docker swarm网络进行通讯。不了解Docker的请自行先网上看以下教程入门一下。这里没有深入的Docker知识,只要跟着命令做就可以了。

三台主机都安装好了docker:

虚拟ip主机IP
node1192.168.56.100
192.168.56.120node2192.168.56.101
node3192.168.56.102

node1 开放防火墙

1)TCP端口2377
该端口用于Docker集群或集群中各节点之间的通信。

它只需要在管理器节点上打开。

2)TCP和UDP端口7946
该端口用于节点之间的通信(容器网络发现)。

3)UDP端口4789
此端口用于覆盖网络流量(集装箱接入网络)。

在node1 开放防火墙:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" accept"
firewall-cmd --reload
firewall-cmd --list-all

在node2 开放防火墙:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.102" accept"firewall-cmd --reload
firewall-cmd --list-all

在node3 开放防火墙:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.101" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.56.100" accept"firewall-cmd --reload
firewall-cmd --list-all

1. 在3台主机上配置swarm

  • 创建 /home/pxc
mkdir -p /home/pxc && cd /home/pxc
  • pxcPackage.zip下载地址

  • 链接:https://pan.baidu.com/s/1pbzlkx5U3BhnoWiuxqJGOg?pwd=r1dx

  • 3台机器分别将pxcPackage.zip拷贝到 /home/pxc

  • 在node1上执行:

docker swarm init --advertise-addr 192.168.56.100
docker swarm join-token manager

返回类似以下内容:

docker swarm join --token SWMTKN-1-614xi9dvksycykobgifxb4pgopc1wwgczwqct5wqkq8zao6tmx-0ds4jj3ozclrr2wukcaoakxso 192.168.56.100:2377
  • 在node2、node3上执行上面的返回结果:
docker swarm join --token SWMTKN-1-2c2xopn2rld8oltcof24sue370681ijhbo3bwcqarjlhq9lkea-2g53o5qn2anre4j9puv4hecrn 192.168.0.101:2377

2. 创建swarm网络

在node1上执行以下命令:

docker network create -d overlay --attachable pxc_swarm

3. 3台主机导入PXC镜像

cd /home/pxc/images && bash images-load.sh

4. 创建文件

在3台服务器上分别执行以下命令:

chmod +777 /home/pxc/data

5. 安装第一个节点

node1执行

docker run -d  -v /home/pxc/data:/var/lib/mysql -v /home/pxc/conf/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/localtime:ro --name node1 -e CLUSTER_NAME=scsdm_pxc -e MYSQL_ROOT_PASSWORD=hancloud1234! -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always percona/percona-xtradb-cluster:5.7.27

注意自行修改密码,不要使用过于简单的密码。参数说明:

CLUTER_NAME: 集群名称
MYSQL_ROOT_PASSWORD: root密码
MYSQL_DATABASE: 默认初始化数据库名
MYSQL_USER: 默认初始化账号
MYSQL_PASSWORD: 默认初始化密码

docker logs -f node1 
# 出现下面的内容代表启动成功
2023-12-05T09:03:29.104535+08:00 1 [Note] WSREP: Setting wsrep_ready to true
2023-12-05T09:03:29.104539+08:00 1 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
2023-12-05T09:03:29.185599+08:00 0 [Note] InnoDB: Buffer pool(s) load completed at 231205  9:03:29

6. 加入其他节点

node2(192.168.56.101):

docker run -d -v /home/pxc/data:/var/lib/mysql  -v /home/pxc/conf/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/localtime:ro --name node2 -e CLUSTER_NAME=scsdm_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=hancloud1234! -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always percona/percona-xtradb-cluster:5.7.27

node3(192.168.56.102):

docker run -d -v /home/pxc/data:/var/lib/mysql  -v /home/pxc/conf/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/localtime:ro --name node3 -e CLUSTER_NAME=scsdm_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=hancloud1234! -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always percona/percona-xtradb-cluster:5.7.27

7. 主机启动haproxy服务

在node1服务器上运行以下命令:

# pxc节点挂掉重启后,先执行删除haproxy,再执行create(重启后之前的代理找不到服务)
# docker service rm haproxy
docker service create --replicas 3 --hostname haproxy -p 3306:3306 -p 8888:8888 --mount type=bind,source=/home/pxc/haproxy/haproxy.cfg,destination=/usr/local/etc/haproxy/haproxy.cfg --mount type=bind,source=/etc/localtime,destination=/etc/localtime:ro --name haproxy --network=pxc_swarm haproxy:alpine

8.安装keepalive 3台都安装

安装依赖

cd /home/pxc/installKeepalived && chmod +x installKeepalived.sh && ./installKeepalived.sh

修改 keepalive配置

cp  /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbak cat > /etc/keepalived/keepalived.conf << EOF
global_defs {router_id LVS_2script_user root                    # 脚本执行用户enable_script_security              # 开启脚本安全权限
}vrrp_script checkhaproxy
{script "/home/pxc/installKeepalived/check-haproxy.sh"  # 这个地址写的事容器内脚本路径interval 2weight -30
}vrrp_instance VI_1 {state BACKUPinterface enp0s3virtual_router_id 51priority 100advert_int 1nopreemptvirtual_ipaddress {# 需要修改成对应的虚拟ip192.168.56.120}authentication {auth_type PASSauth_pass password}track_script {checkhaproxy}
}
EOF

启动

service keepalived start

设置开机自启

chkconfig keepalived on
systemctl list-unit-files | grep keepalived

9. 连接数据库

对外:

使用 虚拟ip 192.168.56.120 3306

访问 http://192.168.56.120:8888/dbs 进行监控

对内运维:

可以通过连接192.168.56.100 3306 192.168.56.101 3306 192.168.56.102 3306进行数据库操作了

访问 http://192.168.56.100:8888/dbs http://192.168.56.101:8888/dbs http://192.168.56.102:8888/dbs 分别进行监控

账号 admin

密码 admin

在这里插入图片描述

10.数据迁移

导出数据
mysqldump -u root -p mcp_manager --skip_add_locks --skip-lock-tables > mcp_manager_20220118.sql

FAQ:

常用命令

Docker-Swarm集群管理

1、查看swarm集群节点情况

在manager节点查看

docker node ls

在这里插入图片描述

2、查看网络情况
docker network ls

在这里插入图片描述

3、退出swarm集群

在需要退出的节点执行

docker swarm leave -f

在这里插入图片描述

在manager节点查看

docker node ls

在这里插入图片描述

4、重新加入swarm集群

在manager节点查看加入命令

docker swarm join-token worker

在这里插入图片描述

查看节点情况

docker node ls

在这里插入图片描述

5、删除无用的节点
docker node rm 节点   【强制移除运行中的节点】
docker node rm xlpm9aemu7psw5j7mi7udpbqq

在这里插入图片描述

查看节点情况

docker node ls

在这里插入图片描述

6、查看keepalived日志
tail -f /var/log/messages

在这里插入图片描述

常见错误
1、node1 pxc 出现错误日志

在这里插入图片描述

修改方法:

修改配置文件edit the grastate.dat file manually and set safe_to_bootstrap to 1 .

在这里插入图片描述

修改后

在这里插入图片描述

再次重启node1

在这里插入图片描述

2、浏览监控页面查看节点情况

访问 http://192.168.56.120:8888/dbs 进行监控

账号密码都是admin

正常情况

在这里插入图片描述

异常情况

在这里插入图片描述

恢复流程

检查服务器是否启动–>检查docker是否启动–>检查docker服务是否启动–>检查服务日志是否正常–>查看监控界面是否恢复

1、检查服务器是否启动

开启服务器

2、检查docker是否启动

在这里插入图片描述

启动docker

systemctl restart docker
systemctl status docker

3、检查docker服务是否启动

docker ps

在这里插入图片描述

docker ps -a

在这里插入图片描述

启动服务

docker start 179
docker start a79

在这里插入图片描述

访问对应node3机器的监控界面

http://192.168.56.102:8888/dbs

在这里插入图片描述

其他节点的监控界面

在这里插入图片描述

在这里插入图片描述

重启对应的节点的haproxy

docker restart haproxy01
docker restart haproxy02

集群恢复正常

3、 with pxc_strict_mode = ENFORCING

在这里插入图片描述

Percona-XtraDB-Cluster prohibits use of LOCK TABLE/FLUSH TABLE

WITH READ LOCK/FOR EXPORT with pxc_strict_mode = ENFORCING

导出sql的时候执行

 mysqldump -u root -p database --skip_add_locks --skip-lock-tables > mcp_manager_20220118.sql

追加 --skip_add_locks --skip-lock-tables

4、unblock with ‘mysqladmin flush-hosts’"

在haproxy日志中发现

在这里插入图片描述

Server mysql/s1 is DOWN, reason: Layer7 wrong status, code: 1129, info: “Host ‘10.0.0.28’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’”, check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.

去pxc 节点都去执行

docker exec -it -u root node1 bash -c 'mysqladmin flush-hosts -uroot -phancloud1234!'
5、pxc_strict_mode = ENFORCING or MASTER

在这里插入图片描述

ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of DML command on a table (mcp_manager_3_7_6.scs_field_dict) without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER

执行

show global variables like '%pxc_strict_mode%';
SET GLOBAL pxc_strict_mode=PERMISSIVE;
show global variables like '%pxc_strict_mode%';
6、Got an error reading communication packets

在这里插入图片描述

2022-01-18T08:07:02.521305Z 21053 [Note] Aborted connection 21053 to db: ‘mcp_manager_3_7_6’ user: ‘root’ host: ‘haproxy02.pxc_swarm’ (Got an error reading communication packets)

vi /home/pxc/package/my.cnf
# 修改
max_allowed_packet	= 1024M
innodb_buffer_pool_size=2048M
7、Variable ‘time_zone’ can’t be set to the value of ‘NULL’

在这里插入图片描述

这个问题的原因是因为数据sql文件内部有注释,去掉就可以了(也可以不用管)

/*!40000 ALTER TABLE `t_error_identification` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

在这里插入图片描述

page_cleaner: 1000ms intended loop took 4087ms. The settings might not be optimal. (flushed=897, during the time.)

相关文章:

mysql pxc高可用离线部署(三)

pxc学习流程 mysql pxc高可用 单主机 多主机部署&#xff08;一&#xff09; mysql pxc 高可用多主机离线部署&#xff08;二&#xff09; mysql pxc高可用离线部署&#xff08;三&#xff09; mysql pxc高可用 跨主机部署pxc 本文使用docker进行安装&#xff0c;主机间通过…...

XXL-JOB 日志表和日志文件自动清理

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…...

常用sql记录

备份一张表 PostgreSQL CREATE TABLE new_table AS SELECT * FROM old_table;-- 下面这个比上面好&#xff0c;这个复制表结构时&#xff0c;会把默认值、约束、注释都复制 CREATE TABLE new_table (LIKE old_table INCLUDING ALL) WITHOUT OIDS; INSERT INTO new_table SELE…...

设备温度和振动综合监测:温振一体式传感器的优点和应用

随着工业设备的复杂性和自动化程度的提高&#xff0c;对设备状态监测的需求也日益增加。温振一体式传感器作为一种集振动和温度监测于一体的传感器&#xff0c;具备多项优势&#xff0c;因此在工业设备状态监测领域得到广泛应用。 温振一体式传感器基于振动传感器和温度传感器的…...

彻底解决ModuleNotFoundError: No module named ‘exceptions‘【Bug完美解决】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结心得项目场景: 根据本文可找到bug原因并彻底解决**ModuleNotFoundError: No module named ‘exceptions‘**Bug 报错: E:\Anconda\python.exe c:\Users\24190\PycharmProjects\pythonProject4py尝试 gong…...

yarn和npm的区别

2023-12-8 yarn和npm的区别 是常用的包管理工具&#xff0c;用于node.js项目中安装、管理、和更新依赖项 有以下几个区别&#xff1a; 性能和速度&#xff1a;在包的安装和下载方面&#xff0c;yarn比npm更快速&#xff0c;yarn通过并行下载和缓存等优化策略&#xff0c;可以…...

设计图中时序图

设计图中的时序图通常用于展示两个或多个对象之间的交互和消息传递的顺序。它是一种用于描述软件或系统中的并发性和时序行为的工具。 以下是一个简单的时序图的示例&#xff1a; 首先&#xff0c;在时序图中创建两个对象&#xff0c;例如"对象A"和"对象B&quo…...

反射实现tomcat

获取类信息的方法 1.通过类对象 x.getClass() 2.通过class.forname方法 Class.forname(className);这里className是存储类名的字符串 3.通过类名.class 类名.class 通过类名创建对象 类名.newInstance&#xff08;&#xff09;&#xff1b; 反射可以看到类的一切信息&#xff1…...

Ubuntu 安装 CUDA 和 cuDNN 详细步骤

我的Linux系统背景&#xff1a; 系统和驱动都已安装。 系统是centos 8。查看自己操作系统的版本信息&#xff1a;cat /etc/issue或者是 cat /etc/lsb-release 用nvidia-smi可以看到显卡驱动和可支持的最高cuda版本&#xff0c;我的是12.2。驱动版本是535.129.03 首先&#…...

ArkTS快速入门

一、概述 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以…...

HTTP不同场景下的通信过程和用户上网认证过程分析

目录 HTTP不同场景的通信过程 HTTP正常交互过程 HTTP透明加速传输过程 HTTP代理服务器场景下交互过程 通过AC对上网用户不同场景的认证过程 AC上网认证正常交互过程 通过Cookie实现免认证交互过程 代理服务器场景下HTTP密码认证交互过程 HTTP不同场景的通信过程 HTTP、…...

VR 实现 Splash Screen 效果

文章目录 背景官方实现逆向分析 背景 手机 App 在实现 Splash Screen 的时候&#xff0c;目前都有成熟的方案可以参考&#xff0c;但是在做 VR 开发时&#xff0c;要如何实现一个 App 自己的 Splash Screen &#xff0c;下面是我们基于 PICO & OCULUS 进行业务开发时经过探…...

HarmonyOS学习--TypeScript语言学习(一)

注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 本章目录如下&#xff1a; 一、TypeScript语言…...

【C语言】函数递归详解(一)

目录 1.什么是递归&#xff1a; 1.1递归的思想&#xff1a; 1.2递归的限制条件&#xff1a; 2.递归举例&#xff1a; 2.1举例1&#xff1a;求n的阶乘&#xff1a; 2.1.1 分析和代码实现&#xff1a; 2.1.2图示递归过程&#xff1a; 2.2举例2&#xff1a;顺序打印一个整数的…...

WT588F02B-8S语音芯片助力破壁机:智能声音播放提示IC引领健康生活新潮流

在追求健康饮食的时代潮流中&#xff0c;破壁机作为榨汁、搅拌的重要厨房电器&#xff0c;融入智能技术的趋势不断加强。唯创知音的WT588F02B-8S语音芯片作为声音播放提示IC&#xff0c;为破壁机注入了更智能、便捷的声音提示功能&#xff0c;引领用户迈入健康生活的新潮流。 …...

NXP iMX8M Plus Qt5 双屏显示

By Toradex胡珊逢 简介 双屏显示在显示设备中有着广泛的应用&#xff0c;可以面向不同群体展示特定内容。文章接下来将使用 Verdin iMX8M Plus 的 Arm 计算机模块演示如何方便地在 Toradex 的 Linux BSP 上实现在两个屏幕上显示独立的 Qt 应用。 硬件介绍 Verdin iMX8M Plu…...

RepidJson中Writer类、FilewriteStream类、 PrettyWriter类的区别

rapidjson是一个C的JSON解析库&#xff0c;可以用于解析和序列化JSON数据。 Writer是rapidjson中一种基本的输出流&#xff0c;用于将JSON数据输出到字符串或文件中。 FileWriteStream是一个Writer的子类&#xff0c;它专门用于将JSON数据输出到文件中。相比于普通的Writer&a…...

IntelliJ idea卡顿解决,我遇到的比较管用的方案

Setttings> Build, Execution,Deployment>Debugger> Data Views> Java 取消 Enable "toString()" object view; Speed up debugging in IntelliJ Yesterday, I observed painfully slow debugging in IntelliJ. Every step over or step in took almost…...

Fabric.js 实战开发使用介绍

原生canvas用的多的有哪些槽点就不用我多说了&#xff1b;fabric 作为一个canvas库&#xff0c;提供了非常高效、直观的API操作&#xff0c;使我们对涉及canvas相关的功能开发效率大幅提升~~~~ 简单记录下自己的心得&#xff1b;以下是对比canvas来说的优势&#xff1a; 1.简…...

Vue.directive

Vue.directive( id, [definition] ) 参数&#xff1a; {string} id {Function | Object} [definition] // 注册一个全局自定义指令 v-focus Vue.directive(focus, {// 当被绑定的元素插入到 DOM 中时……inserted: function (el) {// 聚焦元素el.focus()} }) Vue.directive(my…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

boost::filesystem::path文件路径使用详解和示例

boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类&#xff0c;封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解&#xff0c;包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...