k8s搭建双主的mysql8集群---无坑
《k8s搭建一主三从的mysql8集群---无坑-CSDN博客》通过搭建一主三从,我们能理解到主节点只有1个,那么承担增删改主要还是主节点,如果你在从节点上去操作增删改操作,数据不会同步到其他节点。本章我们将实现多主(双主)集群。实现在多个节点上操作增删改,能同步其他节点。
一,环境准备
1.1 k8s集群服务器
| ip | 角色 | 系统 | 主机名 | cpu | mem |
| 192.168.40.129 | master | centos7.9 | k8smaster | 4 | 8 |
| 192.168.40.130 | node1 | centos7.9 | k8snode1 | 4 | 8 |
| 192.168.40.131 | node2 | centos7.9 | k8snode2 | 4 | 8 |
| 192.168.40.132 | node3 | centos7.9 | k8snode3 | 4 | 8 |
k8s集群操作请参考《K8s安装部署(v1.28)--超详细(cri-docker作为运行时)-CSDN博客》
1.2 nfs服务器器
| ip | 角色 | 系统 | 主机名 | cpu | mem | 用图 |
| 192.168.40.129 | master | centos7.9 | k8smaster | 4 | 8 | k8s主服务器 兼 nfs服务器 |
| 192.168.40.130 | node1 | centos7.9 | k8snode1 | 4 | 8 | k8s的工作节点 需要装nfs软件 |
| 192.168.40.131 | node2 | centos7.9 | k8snode2 | 4 | 8 | k8s的工作节点 需要装nfs软件 |
| 192.168.40.132 | node3 | centos7.9 | k8snode3 | 4 | 8 | k8s的工作节点 需要装nfs软件 |
二,安装nfs服务
2.1 安装(所有节点)
因为需要在三个工作节点上连接nfs,所以工作节点上也要安装
yum install -y nfs-utils
2.2 暴露nfs目录(只暴露nfs主服务器)
要安装四台服务器。
直接在nfs服务器(k8s-master:192.168.40.129)当中创建这三个目录并写入 /etc/exports 文件夹中(创建的目录可以修改):
#创建nfs目录
mkdir -p /data/nfs/{mysql-master-01,mysql-master-02}
vi /etc/exports
#添加
/data/nfs/mysql-master-01 *(rw,sync,no_root_squash)
/data/nfs/mysql-master-02 *(rw,sync,no_root_squash)
如果目录不为空,需要清空
rm -rf /data/nfs/mysql-master-01/*
rm -rf /data/nfs/mysql-master-02/*
2.3 开启nfs服务器
直接在主服务器(192.168.40.129)上启动nfs服务器。
systemctl enable --now nfs-server
2.4 测试nfs服务
我们可以通过这行命令来检查目录是否暴露成功: 注意修改为自己的nfs服务器地址
showmount -e 192.168.40.129
三,搭建MySql集群
3.1 创建命名空间
创建一个命名空间来部署MySQL集群,当然你也可以使用默认的Default命名空间。这里就用 mysql-cluster 命名空间来搭建集群了,首先我们将这个命名空间创建出来:
创建yaml
kubectl create namespace mysql-cluster --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: nullname: mysql-cluster
spec: {}
status: {}
将上面内容 保存到mysql-ns.yaml中
执行命令
kubectl apply -f mysql-ns.yaml
查看名称空间
kubectl get ns

3.2 创建MySQL密码的Secret
创建一个存储了MySQL密码的Secret,直接使用这行命令生成这个Secret的资源清单文件:
注意修改root的密码和命名空间,我的root密码设置为的是123456
kubectl create secret generic mysql-password --namespace=mysql-cluster --from-literal=mysql_root_password=123456 --dry-run=client -o=yaml
apiVersion: v1
data:mysql_root_password: MTIzNDU2
kind: Secret
metadata:creationTimestamp: nullname: mysql-passwordnamespace: mysql-cluster
将上述yaml内容保存到 mysql-secret.yaml
kubectl apply -f mysql-secret.yaml
查看创建的密码
kubectl get secret -n mysql-cluster

3.3 编写MySQL双主节点yaml
3.3.1 主节点1
mysql-master-1.yaml 内容如下
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-master-01-nfs-pvnamespace: mysql-cluster
spec:capacity:storage: 1GiaccessModes:- ReadWriteManynfs:server: 192.168.40.129path: /data/nfs/mysql-master-01storageClassName: "nfs"---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-master-01-nfs-pvcnamespace: mysql-cluster
spec:accessModes:- ReadWriteManystorageClassName: "nfs"resources:requests:storage: 1GivolumeName: mysql-master-01-nfs-pv---
apiVersion: v1
kind: Service
metadata:name: mysql-master-svc-01namespace: mysql-clusterlabels:app: mysql-master
spec:ports:- port: 3306name: mysqltargetPort: 3306nodePort: 3306selector:app: mysql-mastertype: NodePortsessionAffinity: ClientIP---
apiVersion: v1
data:my.cnf: |[mysqld]server-id = 1# 开启gtidgtid_mode = ONenforce_gtid_consistency = 1# 设置自增ID初始值为2,每次自增量为2。即都是偶数2,4,6,8,...auto_increment_offset = 2auto_increment_increment = 2# 开启bin_log(默认是开启的,直接使用默认),模式为ROW,允许最大日志为1G#log_bin = mysql-bin#binlog_format = ROW#max_binlog_size = 1024M# 主节点master不需要写binlog的数据库binlog_ignore_db = mysqlbinlog_ignore_db = information_schemabinlog_ignore_db = performance_schemabinlog_ignore_db = sys# 从节点slave不进行数据同步的数据库replicate_ignore_db = mysqlreplicate_ignore_db = information_schemareplicate_ignore_db = performance_schemareplicate_ignore_db = sys# 中继日志(默认是开启的,直接使用默认)#relay_log = mysql-relay-bin# mysql5.7以后的版本不需要配置log-slave-updates=1# log-slave-updates = 1#[client]#socket = /var/run/mysqld/mysqld.sock#!includedir /etc/mysql/conf.d/
kind: ConfigMap
metadata:creationTimestamp: nullname: mysql-master-01-cmnamespace: mysql-cluster---apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-master-01namespace: mysql-cluster
spec:selector:matchLabels:app: mysql-masterserviceName: "mysql-master-svc-01"replicas: 1template:metadata:labels:app: mysql-masterspec:terminationGracePeriodSeconds: 10containers:- args:- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ci- --lower_case_table_names=1- --default-time_zone=+8:00name: mysql# image: docker.io/library/mysql:8.0.34image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/mysql:8.0.34ports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysql- name: mysql-confmountPath: /etc/my.cnfreadOnly: truesubPath: my.cnfenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:key: mysql_root_passwordname: mysql-passwordvolumes:- name: mysql-datapersistentVolumeClaim:claimName: mysql-master-01-nfs-pvc- name: mysql-confconfigMap:name: mysql-master-01-cmitems:- key: my.cnfmode: 0644path: my.cnf
3.3.2 主节点2
主节点2 mysql-master-2.yaml 内容如下
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-master-02-nfs-pvnamespace: mysql-cluster
spec:capacity:storage: 1GiaccessModes:- ReadWriteManynfs:server: 192.168.40.129path: /data/nfs/mysql-master-02storageClassName: "nfs"---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-master-02-nfs-pvcnamespace: mysql-cluster
spec:accessModes:- ReadWriteManystorageClassName: "nfs"resources:requests:storage: 1GivolumeName: mysql-master-02-nfs-pv---
apiVersion: v1
kind: Service
metadata:name: mysql-master-svc-02namespace: mysql-clusterlabels:app: mysql-master
spec:ports:- port: 3306name: mysqltargetPort: 3306nodePort: 3307selector:app: mysql-mastertype: NodePortsessionAffinity: ClientIP---
apiVersion: v1
data:my.cnf: |[mysqld]server-id = 2# 开启gtidgtid_mode = ONenforce_gtid_consistency = 1# 设置自增ID初始值为1,每次自增量为2。即都是偶数2,4,6,8,...auto_increment_offset = 1auto_increment_increment = 2# 开启bin_log(默认是开启的,直接使用默认),模式为ROW,允许最大日志为1G#log_bin = mysql-bin#binlog_format = ROW#max_binlog_size = 1024M# 主节点master不需要写binlog的数据库binlog_ignore_db = mysqlbinlog_ignore_db = information_schemabinlog_ignore_db = performance_schemabinlog_ignore_db = sys# 从节点slave不进行数据同步的数据库replicate_ignore_db = mysqlreplicate_ignore_db = information_schemareplicate_ignore_db = performance_schemareplicate_ignore_db = sys# 中继日志(默认是开启的,直接使用默认)#relay_log = mysql-relay-bin# mysql5.7以后的版本不需要配置log-slave-updates=1# log-slave-updates = 1#[client]#socket = /var/run/mysqld/mysqld.sock#!includedir /etc/mysql/conf.d/
kind: ConfigMap
metadata:creationTimestamp: nullname: mysql-master-02-cmnamespace: mysql-cluster---apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-master-02namespace: mysql-cluster
spec:selector:matchLabels:app: mysql-masterserviceName: "mysql-master-svc-02"replicas: 1template:metadata:labels:app: mysql-masterspec:terminationGracePeriodSeconds: 10containers:- args:- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ci- --lower_case_table_names=1- --default-time_zone=+8:00name: mysql# image: docker.io/library/mysql:8.0.34image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/mysql:8.0.34ports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysql- name: mysql-confmountPath: /etc/my.cnfreadOnly: truesubPath: my.cnfenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:key: mysql_root_passwordname: mysql-passwordvolumes:- name: mysql-datapersistentVolumeClaim:claimName: mysql-master-02-nfs-pvc- name: mysql-confconfigMap:name: mysql-master-02-cmitems:- key: my.cnfmode: 0644path: my.cnf
3.3.3 配置注意点
- nfs 的地址、路径
- msql的配置中 server-id 要不同,gtid_mode设置为on,enforce_gtid_consistency设置为1
[mysqld]server-id = 2# 开启gtidgtid_mode = ONenforce_gtid_consistency = 1
- mysql的镜像地址 有需要改成能拉取到的镜像
- service 的nodePort端口要设置不同(共用一个service的可以不变)
3.4 启动集群
3.4.1 启动
kubectl apply -f .

3.4.2 k8s查看所有集群信息
kubectl get all -n mysql-cluster -o wide
3.4.3 进入主节点1
kubectl exec -itn mysql-cluster pod/mysql-master-01-0 -- mysql -uroot -p
输入密码·12345

加入集群命令
change master tomaster_host='mysql-master-02-0.mysql-master-svc-02.mysql-cluster.svc.cluster.local',master_port=3306,master_user='root',master_password='123456',master_auto_position=1,get_master_public_key=1;
需要注意下面的几个参数:
- master_host: 这个参数是 节点2的 master的地址,(根据k8s的网络解析,pod名称.service名称.命名空间.svc.cluster.local 。我的是 mysql-master-02-0.mysql-master-svc-02.mysql-cluster.svc.cluster.local)
- master_port: 主节点的mysql端口,我们没改默认是3306
- master_user: 登录到主节点的mysql用户
- master_password: 登录到主节点要用到的密码
- get_master_public_key: 连接主mysql的公钥获取方式 根据上面参数,
如果要修改那么请按照自己的环境进行修改。

启动主从
#启动
start slave;
#查看副本状态
show replica status\G;

看到这两项都为yes表示正常
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
3.4.4 进入主节点2
kubectl exec -itn mysql-cluster pod/mysql-master-02-0 -- mysql -uroot -p
输入密码·12345

加入集群命令
change master tomaster_host='mysql-master-01-0.mysql-master-svc-01.mysql-cluster.svc.cluster.local',master_port=3306,master_user='root',master_password='123456',master_auto_position=1,get_master_public_key=1;
需要注意下面的几个参数:
- master_host: 这个参数是 节点1的 master的地址,(根据k8s的网络解析,pod名称.service名称.命名空间.svc.cluster.local 。我的是 mysql-master-01-0.mysql-master-svc-01.mysql-cluster.svc.cluster.local)
- master_port: 主节点的mysql端口,我们没改默认是3306
- master_user: 登录到主节点的mysql用户
- master_password: 登录到主节点要用到的密码
- get_master_public_key: 连接主mysql的公钥获取方式 根据上面参数,
如果要修改那么请按照自己的环境进行修改。

启动主从
#启动
start slave;
#查看副本状态
show replica status\G;

看到这两项都为yes表示正常
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
四,测试集群
4.1 完整性测试
工具连接两个 是3306、3307,端口,
我们在在节点1上建库,建表
CREATE DATABASE `test_db`;
USE `test_db`;CREATE TABLE `user` (`user_id` BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '用户id',`username` VARCHAR(50) NOT NULL COMMENT '用户名',`age` TINYINT UNSIGNED DEFAULT 18 COMMENT '年龄',`gender` TINYINT UNSIGNED DEFAULT 2 COMMENT '性别;0=男,1=女,2=未知'
) COMMENT '用户表';
到节点2上查看,是否同步了

我们在节点2上插入2条数据,看下是否能同步
INSERT INTO `user` (`username`, `age`, `gender`) VALUES ('oopxiajun', '18', '0');
INSERT INTO `user` (`username`, `age`, `gender`) VALUES ('01', '28', '0');

再去节点1上看下是否有这两条数据

已经成功同步。
4.2 宕机其中一台测试
关闭 节点2
kubectl delete -f mysql-master-2.yaml

节点2已经连不上连不上了

这时我们在节点1插入一条数据
INSERT INTO `user` (`username`, `age`, `gender`) VALUES ('02宕机数据', '28', '0');

启动节点2
kubectl apply -f mysql-master-2.yaml
查看数据是否同步

这样我们架构就保证我们两台中一台能正常运行,业务就不会停止,发生故障的服务器恢复后可以自动同步数据。
相关文章:
k8s搭建双主的mysql8集群---无坑
《k8s搭建一主三从的mysql8集群---无坑-CSDN博客》通过搭建一主三从,我们能理解到主节点只有1个,那么承担增删改主要还是主节点,如果你在从节点上去操作增删改操作,数据不会同步到其他节点。本章我们将实现多主(双主&a…...
Iterm2配置主题和Oh-My-Zsh
文章目录 一、配置主题1.1 安装使用git1.2 安装手册1.2.1 激活使用主题 二、配置oh-my-zsh2.1、oh-my-zsh插件2.2、oh-my-zsh主题 [Zsh](http://zsh.org/)2.2.1、Install using Git2.2.2、Install manually2.2.3、Activating theme2.2.4、Install using [zplug](https://github…...
html+css+js实现step进度条效果
实现效果 代码实现 HTML部分 <div class"box"><ul class"step"><li class"circle actives ">1</li><li class"circle">2</li><li class"circle">3</li><li class&quo…...
OpenCV视频I/O(8)视频采集类VideoCapture之从视频源中读取一帧图像函数read()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 抓取、解码并返回下一个视频帧。 cv::VideoCapture::read() 是 VideoCapture 类的一个成员函数,用于从视频源中读取一帧图像. 该方法…...
深度学习500问——Chapter17:模型压缩及移动端部署(2)
文章目录 17.4.6 低秩分解 17.4.7 总体压缩效果评价指标有哪些 17.4.8 几种轻量化网络结构对比 17.4.9 网络压缩未来研究方向有哪些 17.5 目前有哪些深度学习模型优化加速方法 17.5.1 模型优化加速方法 17.5.2 TensorRT加速原理 17.5.3 TensorRT如何优化重构模型 17.5.4 Tensor…...
【C#】DllImport的使用
DllImport 是 C# 中用于从非托管 DLL(动态链接库)中导入函数的一个特性。这个特性允许你在 .NET 应用程序中调用由其他语言编写的函数,如 C 或 C。使用 DllImport 可以让你重用现有的非托管代码,而不需要重新实现这些功能。 下面…...
基于 Redis 实现滑动窗口的限流
⏳ 限流场景:突发流量,恶意流量,业务本身需要 基于 Redis 实现滑动窗口的限流是一种常见且高效的做法。Redis 是一种内存数据库,具有高性能和支持原子操作的特点,非常适合用来实现限流功能。下面是一个使用 Redis 实现…...
Camera Raw:打开图像
在图像工作流程中,无论是 Raw 格式图像文件还是 JPEG、TIFF 文件,都可以先使用 Camera Raw 打开并调整后,再进入其它 Adobe 软件如 Photoshop 中进行进一步的编辑和处理。 一、打开 Raw 格式图像 1、通过 Adobe Bridge 打开 在 Adobe Bridge …...
RK3588主板PCB设计学习(六)
可以在其它层对过孔进行削盘处理, 可以看到,这里有些过孔用不上,在这一层进行了削盘处理: 对于这种电源层进行铺铜操作的时候,如果不进行削盘处理的话这些焊盘可能导致这个电源层面不完整,存在割裂的风险&a…...
论文阅读(十一):CBAM: Convolutional Block Attention Module
文章目录 IntroductionConvolutional Block Attention ModuleExperimentsConclusion 论文题目:CBAM: Convolutional Block Attention Module(CBAM:卷积注意力机制) 论文链接:点击跳转 代码链接:Git…...
【Kubernetes】常见面试题汇总(四十八)
目录 108.考虑一家拥有非常分散的系统的跨国公司,希望解决整体代码库问题。您认为公司如何解决他们的问题? 109.我们所有人都知道从单服务到微服务的转变从开发方面解决了问题,但在部署方面却增加了问题。公司如何解决部署方面的问题&#x…...
Qt Creator安卓环境配置【筑基篇】
1.前言 由于我的Qt Creator目前就先的14版本IDE老是存在各种莫名奇妙的bug,我都已经成为官方Qt Forum官方论坛的常客了。有一说一新版本的各种设置不小心误触是真的坑死人。不说了给我小主机配置安卓环境了。小主机系统版本window11-23H,Qt-Creator版本是13.01版本…...
利用SpringBoot构建高效社区医院平台
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
【C++ 前缀和 数论】1590. 使数组和能被 P 整除|2038
本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 质数、最大公约数、菲蜀定理 LeetCode 1590. 使数组和能被 P 整除 给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空)&am…...
外部引入的 JavaScript 放置位置
部引入的 JavaScript 通常有两种常见的放置位置,每个位置都有其优缺点,具体取决于页面的需求和性能优化目标: 1. 放在页面的 <head> 标签中 这种方式在 HTML 文档的 <head> 部分引入 JavaScript 文件。 <head><scrip…...
【tbNick专享】虚拟机域控、成员服务器、降级等管理
在 VMware 中完成四台域控服务器、一台成员服务器的创建、降级域控为成员服务器,并创建子域的操作。 1. 创建四台域控和一台成员服务器 1.1 在 VMware 中创建虚拟机 启动 VMware Workstation: 打开 VMware Workstation,点击 “创建新的虚拟…...
Raspberry Pi3B+之Rpanion(gst)和ffmpeg验证
Raspberry Pi3B之Rpanion-gst和ffmpeg验证 1. 源由2. 分析3. 环境搭建步骤1:安装镜像步骤2:系统更新步骤3:安装numpy组件步骤4:安装python3-picamera2组件步骤4:安装cv2组件步骤5:安装ffmpeg组件步骤6&…...
数据结构编程实践20讲(Python版)—04队列
本文目录 04 队列 QueueS1 说明S2 示例普通队列循环队列双端队列优先队列S3 问题:基于普通队列实现的打印机任务管理Python3程序S4 问题:使用循环队列管理玩家移动轨迹Python3程序S5 问题:使用双端队列来管理文档操作历史Python3程序S6 问题:使用优先队列管理车辆调度Pytho…...
Ubuntu开机进入紧急模式处理
文章目录 Ubuntu开机进入紧急模式处理一、问题描述二、解决办法参考 Ubuntu开机进入紧急模式处理 一、问题描述 Ubuntu开机不能够正常启动,自动进入紧急模式(You are in emergency mode)。具体如下所示: 二、解决办法 按CtrlD进…...
解决无网条件下离线安装缺失的python包
首先在有网的机器上使用conda create --name xx pythonx.x.x 命令创建一个和目标机器(无网)一样的环境 使用 下面命令 pip download opencv-python -d C:\Users\xuhaitao\Desktop\installer pip download pyinstaller -d C:\Users\xuhaitao\Desktop\installer 在目标…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...

