Minio分布式多节点多驱动器集群部署
Minio分布式多节点多驱动器集群部署
- Minio分布式多节点多驱动器集群部署
- 节点规划
- 先决条件
- 开放防火墙端口
- 设置主机名
- 更新域名映射文件
- 时间同步
- 存储要求
- 内存要求
- 增加虚拟机磁盘(所有机器都要执行)
- 部署分布式 MinIO
- 测试上传与预览
- 测试高可用
- MinIO 配置限制
- 模拟单节点磁盘故障
- 模拟两节点磁盘故障
- 创建 MinIO 服务文件 (systemd)
- 创建minio.service文件
- 创建用户和组
- 创建服务环境文件
- 启动 MinIO 服务
- Nginx 负载均衡
- 参考链接
Minio分布式多节点多驱动器集群部署
官方文档地址:https://docs.min.io/docs/
集群部署文档地址:部署 MinIO:多节点多驱动器 — 适用于 Linux 的 MinIO 对象存储
节点规划
| 虚拟机名称 | 虚拟机IP | 主机名 | MAC地址 | 磁盘挂载 |
|---|---|---|---|---|
| centos7_01 | 192.168.0.123 | minio-01 | 00:50:56:3D:52:7C | /dev/sdb /mnt/data1 |
| centos7_02 | 192.168.0.136 | minio-02 | 00:0C:29:5B:4E:8B | /dev/sdb /mnt/data1 |
| centos7_03 | 192.168.0.141 | minio-03 | 00:0C:29:97:84:DD | /dev/sdb /mnt/data1 |
| centos7_04 | 192.168.0.163 | minio-04 | 00:50:56:23:E6:53 | /dev/sdb /mnt/data1 |
先决条件
开放防火墙端口
-
每个节点应具有与部署中其他节点的双向网络访问权限。对于容器化或编排的基础设施,可能需要配置网络和路由组件(如入口或负载均衡器)。
-
某些操作系统可能需要设置防火墙规则。例如,以下命令显式打开运行
firewalld的服务器的默认 MinIO 服务器 API 端口:9000: -
部署中的所有 MinIO 服务器必须使用相同的监听端口,
所有机器都要执行# MinIO 服务器 API 端口 firewall-cmd --zone=public --add-port=9000/tcp --permanent # MinIO 控制台端口 firewall-cmd --zone=public --add-port=9001/tcp --permanent # 务必重载防火墙 firewall-cmd --reload
设置主机名
登录到每台虚拟机,通过 hostnamectl 命令文件来设置主机名
在虚拟机 centos7_01 上,设置主机名为 minio-01:
sudo hostnamectl set-hostname minio-01
对其他虚拟机也进行类似的操作:
sudo hostnamectl set-hostname minio-02 # 对于 centos7_02
sudo hostnamectl set-hostname minio-03 # 对于 centos7_03
sudo hostnamectl set-hostname minio-04 # 对于 centos7_04
验证主机名设置:
使用 hostname 命令检查主机名是否已正确设置:
hostname
更新域名映射文件
确保每个虚拟机能够通过主机名找到其他虚拟机,需要在每台虚拟机上添加主机名和 IP 地址的映射,执行以下命令:
echo "192.168.0.123 minio-01" >> /etc/hosts
echo "192.168.0.136 minio-02" >> /etc/hosts
echo "192.168.0.141 minio-03" >> /etc/hosts
echo "192.168.0.163 minio-04" >> /etc/hosts

检查配置:在每台虚拟机上,使用 ping 命令检查主机名是否正确解析:
ping minio-01
ping minio-02
ping minio-03
ping minio-04
时间同步
sudo yum install ntp # 对于 CentOS/RHEL
sudo systemctl start ntpd # 启动 NTP 服务
sudo systemctl enable ntpd # 设置 NTP 服务开机启动
如果不设置可能在启动时报错:
Skewed authentication date/time:这个错误通常是由于参与 MinIO 集群的节点之间的系统时间不同步导致的。MinIO 使用请求时间戳来验证请求的有效性。如果时间不同步,MinIO 认为请求的时间是“偏移”的,从而拒绝该请求。
API: github.com/minio/minio/cmd.registerDistErasureRouters.(*Manager).Handler.func1
Time: 01:24:46 UTC 02/20/2025
RequestID: 1825C62382628C3B
RemoteHost: 192.168.0.141
Host: minio-04:9000
Error: auth 192.168.0.141:37916: Skewed authentication date/time (*fmt.wrapError)5: internal/logger/logonce.go:118:logger.(*logOnceType).logOnceIf()4: internal/logger/logonce.go:149:logger.LogOnceIf()3: internal/grid/connection.go:59:grid.gridLogOnceIf()2: internal/grid/manager.go:172:cmd.registerDistErasureRouters.(*Manager).Handler.func1()1: net/http/server.go:2220:http.HandlerFunc.ServeHTTP()
存储要求
官方文档:存储要求
- 使用本地存储(DAS)
- 优先选择直连存储(DAS),避免使用网络存储(NAS、SAN、NFS)。
- 推荐使用闪存(NVMe、SSD)存储“热”数据。
- 文件系统格式
- 使用 XFS 格式化的驱动器,MinIO 官方推荐并测试 XFS。
- 不支持或不推荐使用 EXT4、BTRFS、ZFS 等其他文件系统。
- 驱动器类型一致性
- 每个存储池中的驱动器类型必须一致(如全部 NVMe 或全部 SSD)。
- 混合驱动器类型会导致性能问题,MinIO 会将所有驱动器视为性能最低的类型。
- 驱动器大小一致性
- 每个存储池中的驱动器容量必须一致。
- MinIO 会将所有驱动器的可用容量限制为池中最小的驱动器容量。
- 顺序驱动器挂载
- 使用顺序挂载路径(如
/mnt/drive-1、/mnt/drive-2等)。 - 支持 Go 扩展符号
{x...y}表示顺序驱动器系列。
- 使用顺序挂载路径(如
- 重启后保持挂载
- 使用
/etc/fstab(Linux)或等效工具确保驱动器在重启后保持挂载和映射一致。
- 使用
- 独占访问
- MinIO 需要对驱动器进行独占访问,其他进程或工具不应直接操作驱动器上的数据。
内存要求
- 内存预分配
- 从
RELEASE.2024-01-28T22-35-53Z版本开始,MinIO 在启动时预分配 2GiB 系统内存。
- 从
- 最低内存要求
- 每个节点至少需要 32GiB 内存。
- 更多内存分配建议可参考 MinIO 官方文档。
增加虚拟机磁盘(所有机器都要执行)
(如果非虚拟机可不关注本节内容)
注意:在MinIO集群部署中,需要将其强制性安装在独占的磁盘分区,而不能在根目录下建立目录。例如,在 /opt/data1 等位置建立目录文件夹代替。如果试图在 /home/data 等目录下创建目录,可能会遇到如下错误提示:Error: Drive /home/data is part of root drive, will not be used (*errors.errorString)。因此务必在系统已挂载的磁盘下建立 data 目录。
先停止 VM 主机,进入设置中添加新硬盘,直接默认下一步输入磁盘大小,选择将虚拟磁盘存储为单个文件,然后下一步即可




查看分区
# 显示所有使用和未使用的分区大小与簇信息
fdisk -l
# 显示所有使用和未使用的分区
lsblk

硬盘挂载
# 格式化磁盘
mkfs.ext4 -F /dev/sdb
# 创建一个挂载指向目录
mkdir /mnt/data1
# 挂载到指向的目录
mount /dev/sdb /mnt/data1

设置开机自动挂载
echo '/dev/sdb /mnt/data1 ext4 defaults 0 0' >> /etc/fstab
然后其他三台机器执行相同操作!
然后其他三台机器执行相同操作!
然后其他三台机器执行相同操作!
部署分布式 MinIO
依次给每台机器执行以下命令,执行下载minio并赋权的操作
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
每台机器启动测试
export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=miniostorage
nohup minio server --config-dir /etc/minio --address ":9000" --console-address ":9001" \
http://minio-01/mnt/data1 http://minio-02/mnt/data1 \
http://minio-03/mnt/data1 http://minio-04/mnt/data1 > minio_server.log 2>&1 &
访问登录页面

登录成功界面

监控页面

测试上传与预览


预览上传的文件

测试高可用
MinIO 配置限制
| 项 | 规格 |
|---|---|
| 每个集群的最大服务器数量 | 无限制 |
| 最小服务器数量 | 1 |
| 当服务器数量为 1 时,每台服务器的最小磁盘数量 | 1(仅适用于 SNSD 部署,该配置不提供额外的可靠性或可用性) |
| 当服务器数量为 2 或更多时,每台服务器的最小磁盘数量 | 1 |
| 每台服务器的最大磁盘数量 | 无限制 |
| 读取限制(Read Quorum) | 一半节点 (N/2) |
| 写入限制(Write Quorum) | 一半节点+1 (N/2)+1 |
模拟单节点磁盘故障
通过关闭一个节点的minio服务器来验证数据的高可用性。比如,在 minio-01 上停止 MinIO 服务:
[root@minio-01 bin]# ps -ef|grep minio
root 13064 117867 0 10:28 pts/2 00:00:04 minio server --config-dir /etc/minio --address :9000 --console-address :9001 http://minio-01/mnt/data1 http://minio-02/mnt/data1 http://minio-03/mnt/data1 http://minio-04/mnt/data1
root 51956 117867 0 11:11 pts/2 00:00:00 grep --color=auto minio
[root@minio-01 bin]# kill -9 13064
-
读取

-
写入

模拟两节点磁盘故障
在 minio-02 上也停止 MinIO 服务:
[root@minio-02 bin]# ps -ef|grep minio
root 62535 1603 0 13:45 pts/0 00:00:02 minio server --config-dir /etc/minio --address :9000 --console-address :9001 http://minio-01/mnt/data1 http://minio-02/mnt/data1 http://minio-03/mnt/data1 http://minio-04/mnt/data1
root 76433 1603 0 14:00 pts/0 00:00:00 grep --color=auto minio
[root@minio-02 bin]# kill -9 62535
-
读取
此时的访问和下载功能仍能正常服务
纠删集是支持 MinIO 纠删码的多个磁盘组成的一个组。纠删码提供了高可用性、可靠性和冗余性,确保在 MinIO 部署中存储的数据的安全性。MinIO 将对象划分为多个数据块——称为分片(shards),并将它们均匀分布在纠删集中的每个磁盘上。即使某个磁盘发生故障,MinIO 也可以继续无缝地处理读取和写入请求。在最高冗余级别下,
尽管部署中最多丢失一半的磁盘,MinIO 仍然可以以最小的性能影响继续提供读取请求。
-
写入
写入失败:Error: Resource requested is unwritable, please reduce your request rate
在 MinIO 中,写入定数(Write Quorum)通常要求
集群中超过一半的节点是健康的。例如,如果有 4 个节点,写入定数通常是 3。也就是说,至少需要 3 个节点可用才能进行写入操作。如果有 2 个节点宕机,剩下的 2 个节点就无法满足写入写入定数,导致写入请求被拒绝
创建 MinIO 服务文件 (systemd)
对于手动安装(例如二进制安装),需要在 ==/usr/lib/systemd/system/==手动创建这个文件
创建minio.service文件
[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio[Service]
WorkingDirectory=/usr/localUser=minio-user
Group=minio-user
ProtectProc=invisibleEnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES# MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
# This may improve systemctl setups where other services use `After=minio.server`
# Uncomment the line to enable the functionality
# Type=notify# Let systemd restart this service always
Restart=always# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536# Specifies the maximum number of threads this process can create
TasksMax=infinity# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no[Install]
WantedBy=multi-user.target# Built for ${project.name}-${project.version} (${project.name})
创建用户和组
创建 minio-user 用户和组,并将 MinIO 使用的磁盘路径的所有权赋予该用户
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown -R minio-user:minio-user /mnt/data1
创建服务环境文件
环境文件 /etc/default/minio 用于存储 MinIO 启动时所需的环境变量。以下是该文件的内容说明:
MINIO_VOLUMES="http://minio-01/mnt/data1 http://minio-02/mnt/data1 http://minio-03/mnt/data1 http://minio-04/mnt/data1"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=miniostorage
然后通知 systemd 重新加载其配置文件
sudo systemctl daemon-reload
启动 MinIO 服务
执行以下命令启动 MinIO 服务:
sudo systemctl start minio.service
检查 MinIO 服务状态:
# 查看其状态
sudo systemctl status minio.service# 查看相关日志
journalctl -f -u minio.service
这些命令将启动 MinIO 服务,并查看其状态和日志。MinIO 服务可能在启动初期显示一些非关键的警告,通常警告是暂时的,会在部署完全上线后自动解决。
设置 MinIO 在启动时自动启动
sudo systemctl enable minio.service
这将确保在主机重启时,MinIO 服务会自动启动。
Nginx 负载均衡
应用程序通常不应管理这些连接,因为对部署拓扑的任何更改都需要应用程序更新。 生产环境应部署负载均衡器或类似的网络控制平面组件来管理与 MinIO 部署的连接。 可以部署 NGINX 负载均衡器,以对部署中的可用节点执行“最少连接”或“循环”负载均衡。

负载均衡器将请求路由到部署中的任何节点。 接收节点处理此后的任何节点间请求。
| 主机名 | IP 地址 | MinIO数据访问端口 | MinIO控制台端口 |
|---|---|---|---|
| minio-01 | 192.168.0.123 | http://192.168.0.123:9000 | http://192.168.0.123:9001 |
| minio-02 | 192.168.0.136 | http://192.168.0.136:9000 | http://192.168.0.136:9001 |
| minio-03 | 192.168.0.141 | http://192.168.0.141:9000 | http://192.168.0.141:9001 |
| minio-04 | 192.168.0.163 | http://192.168.0.163:9000 | http://192.168.0.163:9001 |
在另一台机器192.168.0.237新增nginx配置文件 /etc/nginx/conf.d/minio_proxy.conf
# MinIO 集群控制台
upstream console {ip_hash;server 192.168.0.123:9001;server 192.168.0.136:9001;server 192.168.0.141:9001;server 192.168.0.163:9001;
}# MinIO 管理端口
upstream minio {ip_hash;server 192.168.0.123:9000;server 192.168.0.136:9000;server 192.168.0.141:9000;server 192.168.0.163:9000;
}# 控制台访问配置(端口 9001)
server {listen 9001;server_name 192.168.0.73; # 设置为 Nginx 服务器的 IP 或域名access_log /var/log/nginx/minio_console.access.log main;error_log /var/log/nginx/minio_console.error.log debug;location / {proxy_pass http://console;# 添加了 WebSocket 支持proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}# 数据访问配置(端口 9000)
server {listen 9000;server_name 192.168.0.73; # 设置为 Nginx 服务器的 IP 或域名access_log /var/log/nginx/minio.access.log main;error_log /var/log/nginx/minio.error.log debug;location / {proxy_pass http://minio;# 添加了 WebSocket 支持proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
访问测试 http://192.168.0.237:9001/ minio/miniostorage


参考链接
- 部署 MinIO:多节点多驱动器 — 适用于 Linux 的 MinIO 对象存储
- ubuntu部署minio集群_ubuntu minio-CSDN博客
- 【解决】使用Nginx给minio做代理转发 进入管理界面查看桶一直显示loading问题_nginx 代理 minio websocket-CSDN博客
相关文章:
Minio分布式多节点多驱动器集群部署
Minio分布式多节点多驱动器集群部署 Minio分布式多节点多驱动器集群部署节点规划先决条件开放防火墙端口设置主机名更新域名映射文件时间同步存储要求内存要求 增加虚拟机磁盘(所有机器都要执行)部署分布式 MinIO测试上传与预览测试高可用MinIO 配置限制模拟单节点磁盘故障模拟…...
忽略Git文件的修改,让它不被提交
使用Git托管的工程中,经常有这样的需求,希望文件只是本地修改,不提交到服务端。 如果仅仅是本地存在的文件,我们可以通过.gitignore配置避免文件被提交。 有的时候文件是由git托管的,但是我们希望只在本地修改&#…...
EntityFrameCore DbFirst 迁移
ORM框架:不用关心sql语句,只需要以类为单位,去操作数据库,以面向对象的思想来完成对数据库的操作。 EntityFrameCore-DbFirst Nuget引入程序集 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.SqlServer.Design…...
【信号量】
信号量 目录操作系统信号信号的默认处理动作示例解释信号的捕获与处理使用 signal 函数使用 sigaction 函数 信号的阻塞 信号的生命周期1. 信号产生2. 信号在进程中注册3. 信号在进程中注销4. 信号处理main 7 signal命令含义使用场景手册页包含的关键信息1. 信号概述2. 信号列表…...
安卓cmake修改版本设置路径
有两个位置需要修改: 1、local.properties 在这里设置cmake的本地路径 cmake.dirE\:\\Android_Studio\\sdk\\cmake\\3.22.1 sdk.dirE\:\\Android_Studio\\sdk2、build.gradle里面内容的修改 apply plugin: com.android.applicationandroid {compileSdkVersion 24b…...
如何安装VMware
安装VM...
一篇文章学懂Vuex
一、基于VueCli自定义创建项目 233 344 二、Vuex 初始准备 建项目的时候把vuex勾选上就不用再yarn add vuex3了 store/index.js // 这里面存放的就是vuex相关的核心代码 import Vuex from vuex import Vue from vue// 插件安装 Vue.use(Vuex)// 创建仓库(空仓库…...
DeepSeek 助力 Vue 开发:打造丝滑的二维码生成(QR Code)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
选择排序:简单高效的选择
大家好,今天我们来聊聊选择排序(Selection Sort)算法。这是一个非常简单的排序算法,适合用来学习排序的基本思路和操作。选择排序在许多排序算法中以其直观和易于实现的特点著称,虽然它的效率不如其他高效算法…...
图像处理篇---图像处理中常见参数
文章目录 前言一、分贝(dB)的原理1.公式 二、峰值信噪比(PSNR, Peak Signal-to-Noise Ratio)1.用途2.公式3.示例 三、信噪比(SNR, Signal-to-Noise Ratio)1.用途2.公式3.示例 四、动态范围(Dyna…...
【Java】—— 二叉树
一、树型结构 树形结构是一种重要的数据结构,它类似于现实生活中的树的结构,由结点和边构成。树形结构具有以下特点: 树形结构是一种层次化的结构,由根结点、内部结点和叶子结点组成。根结点是树的顶部结点,没有父结点…...
C++....................4
1. using namespace std; class mystring { private:char* p;int len;// 辅助函数:复制字符串void copy(const char* source) {len strlen(source);p new char[len 1];strcpy(p, source);}// 辅助函数:释放内存void release() {if (…...
机场导航系统有哪些功能?精准定位与高效路径规划技术深度剖析
本文专为关注机场服务优化、乘客体验提升的IT技术员及航空业同仁而写。将深入探讨机场室内导航系统的核心功能,旨在解决乘客在机场内部定位、路径规划、服务寻找等方面的痛点。如需获取机场导航系统解决方案可前往文章最下方获取,如有项目合作及技术交流…...
医疗AI领域中GPU集群训练的关键技术与实践经验探究(上)
医疗AI领域中GPU集群训练的关键技术与实践经验探究(上) 一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗 AI 作为人工智能技术与医疗领域深度融合的产物,正引领着医疗行业的深刻变革。近年来,医疗 AI 在疾病诊断、药物研发、健康管理等诸多方面取得了显著进展,…...
STM32-智能小车项目
项目框图 ST-link接线 实物图: 正面: 反面: 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 一、让小车动起来 新建文件夹智能小车项目 在里面复制19-串口打印功能 重命名为01-让小车动起来 新建文件夹motor&…...
Qt基础之四十九:Qt属性系统(Property System)
Qt提供了一个复杂的属性系统,类似于一些编译器供应商提供的属性系统。然而,作为一个独立于编译器和平台的库,Qt不依赖于__property或[property]等非标准编译器功能。Qt解决方案适用于Qt支持的每个平台上的任何标准C++编译器。它基于元对象系统(Meta-Object System),该系统…...
Java 中的泛型讲解与使用(超全详解)
Java 中的泛型(超全详解) 在 Java 编程中,泛型是一种强大的特性,它允许我们编写可以处理多种数据类型的代码,从而提高代码的复用性和安全性。本文将对 Java 中的泛型进行超全详解,包括泛型的基本概念、基本…...
星环科技推出DeepSeek全场景解决方案:即开即用、企业级部署、端侧智能三位一体
星环科技(688031.SH)正式发布DeepSeek全场景解决方案,全面覆盖个人用户、企业客户及行业场景需求,为用户提供从个人到企业、从云端到本地的全方位AI应用支持,为不同需求的用户提供了灵活、高效且安全的AI解决方案。 省…...
《全星质量管理 QMS 软件系统》:赋能企业高效质量管理
《全星质量管理 QMS 软件系统》:赋能企业高效质量管理 在当今竞争激烈的商业环境中,《全星质量管理 QMS 软件系统》脱颖而出,展现出了显著且无可比拟的应用优势。 首先,《全星质量管理 QMS 软件系统》犹如一张严密的质量管控大网…...
[分披萨]
分批萨 真题目录: 点击去查看 E 卷 100分题型 题目描述 "吃货"和"馋嘴"两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。但是粗心的服务员将披萨切成了每块大小都完全不同奇数块,且肉眼能分辨出大小。 由于两…...
【CSS】HTML元素布局基础总结
HTML默认布局和元素显示 CSS 元素显示 { HTML 默认布局: 流式布局 { 从左到右,从上到下 随页面宽度变化动态排列元素 文档流:整个 H T M L 文档的流式布局 HTML 元素分为 { 块级元素 :默认占满一行 行内元素 :在行内最…...
JSON Web Token在登陆中的使用
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传递声明。它的主要用途是身份验证和信息交换。在微服务架构中,JWT 作为认证机制非常常见,特别是与 API 网关结合使用…...
吐血整理:在 Docker 中运行 Milvus
直接用docker 错误命令(这个我试了三遍,浪费了很多时间): docker run -d --name milvus -p 19530:19530 -p 9091:9091 -v /var/lib/milvus:/var/lib/milvus milvusdb/milvus:latest 先看报错: 2025-02-24 16:02:39 …...
【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】
最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…...
C++Qt学习笔记——实现一个串口通信界面
CQt学习笔记——实现一个串口通信界面 一.界面二、项目结构三、头文件1. 文件头部2. 类定义3. 构造函数和析构函数4. 成员函数5. 成员变量 四、代码解析ReceiveAeraInit 函数解析SerialHelper 构造函数解析1. 为什么有两个 SerialHelper?2. 为什么用 :: 和 :&#x…...
Word(2010)排版技巧
设置标题样式 选择需要设置的标题 如下图所示。选择文字后,点击对应的样式即可设置。 设置标题格式 设置字体格式 设置段落格式 显示所有样式 标题样式展示 建议 建议新建一个正文样式,可以命名为正文1,因为所有的样式参考的“样式基准…...
一.Vue中的条件渲染
1.在<head>中引用 <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> 2.在<body>中写入 <div id"app"><p><a v-if "user.usernameadmin"href"#">编辑</a><a …...
IO进程 day05
IO进程 day05 9. 进程9. 9. 守护进程守护进程的特点守护进程创建步骤 10. 线程10.1. 线程的概念10.2. 进程和线程的区别10.2. 线程资源10.3. 线程的函数接口1. pthread_create-创建线程线程函数和普通函数的区别 2. pthread_exit3.线程资源回收函数join和detach的区别 获取线程…...
【HeadFirst系列之HeadFirstJava】第6天之认识Java的API:解锁高效开发的钥匙
认识Java的API:解锁高效开发的钥匙 在《Head First Java》的第六章节中,作者深入探讨了Java的API(Application Programming Interface),并强调了它在Java开发中的重要性。Java API 是Java开发工具包(JDK&a…...
4 - AXI GPIO按键控制LED实验
文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验任务是通过调用PL端AXI GPIO IP核,使用中断机制,实现PL端按键控制 PS端LED的功能。 2 系统框图 3 软件设计 注意事项: AXI GPIO IP核是双沿触发中断,不可设置&…...
