ceph介绍和搭建
1 为什么要使用ceph存储
- 什么是对象存储?
对象存储并没有向文件系统那样划分为元数据区域和数据区域,而是按照不同的对象进行存储,而且每个对象内部维护着元数据和数据区域。因此每个对象都有自己独立的管理格式。
- 对象存储优点:
基于对象的一个好处是对于同一个文件始终只存储一份,尽管有上千个用户上传了同一个文件,无论该文件名称是否一致,但只要内容是同一个文件,则始终会上传一个文件哟。这也是为什么我们在上传一个文件时能达到秒传的目的。如何校验不同文件名称其存储的数据相同呢?方法有很多种,比如Linux的"md5sum"命令。
2 ceph术语/组件/概述
2.1 ceph术语
1️⃣ceph集群也被称之为 RADOS
==(Reliable Automatic Distributed Object Store)==存储集群,即可靠的自动分布式对象存储
2️⃣OSD: 英文全称为Object Storage Daemon,即对象存储设备,通常指的是磁盘设备,它是真正负责存储数据的设备。
GPT回答:负责实际存储数据和管理数据的复制、恢复、重新平衡等操作
3️⃣mon: 全称为"monitor",即监视器,也就是我们所说的集群元数据节点(而非文件元数据)。它是用来管理整个ceph集群的运行状态(比如集群有多少台服务器,每个服务器有多少OSD及其状态信息等等)。
它是为了能够让整个集群能够正常运行而设计的角色,因此为了避免该角色存在单点故障,因此会配置高可用集群,其底层基于POSIX协议实现。
通常我们需要关注以下几点:
- Ceph Monitor(进程名称为Ceph-mon)维护集群状态的映射,包括Monitor映射、manager映射、OSD映射,CRUSH映射和PG映射等;
- 这些映射是Ceph守护进程相互协调所需的关键集群状态,例如哪些OSD是正常工作的状态,哪些PG不可用等等;
- 监视器还负责管理守护程序和客户端之间的身份验证(基于Cephx协议实现);
- 为了实现冗余和高可用性,通常至少需要三个监视器,这不仅仅提供了高可用性,还提供了负载均衡的能力,因为通常Monitors还扮演着"身份验证"的角色,如果配置多个监视器可以很好的进行负载均衡。
4️⃣mgr: 全称为"manager",即管理者。它的作用就是用来维护查询类的操作,它将很多查询操作按照自己的方式先缓存下来,一旦有人做监控,它能做及时的响应。有点类似于zabbix agent的功能。
早期ceph的版本是没有mgr组件的,但由于mon组件每次读取数据都是实时查询的,这种代价很高昂,而监控集群又是必须的,因此在ceph的L版本引入了mgr组件
通常我们需要关注以下几点:
- ceph管理器守护程序(进程名称为ceph-mgr)负责跟踪运行时度量和ceph集群的当前状态,包括存储利用率、当前性能度量和系统负载
- Ceph管理器守护进程还托管基于python的插件来管理和Rest API
- 高可用性通常至少需要两个管理器
5️⃣pool: 存储池,存储池的大小取决于底层的OSD的存储空间大小。一个ceph集群是可以由多个存储池构成的,而且每个存储池还可以被划分为多个不同的名称空间,而且每个名称空间可以划分成多个PG资源。
6️⃣PG: 全称为"placement groups",即安置组(归置组)。注意,Pool和PG都是抽象的概念,即实际上并不存在,它是一个虚拟的概念。我们暂时可以理解他是用来存储数据的安置组即可
-
PG(Placement Group),负责将数据均匀分布在集群中的各个OSD(Object Storage Device)上。
-
PG是数据存储和访问的基本单位
-
当某个OSD发生故障时,可以通过PG中的副本在其他OSD上进行恢复,保证数据的可用性和可靠性
7️⃣MDS: (类似于HDFS的namenode,如果不用cephfs,该组件可以不安装)
全称为MetaData Server,即对应cephfs文件系统的元数据服务器。如果要用的话,建议安装多个节点,以免出现单点故障的情况。从严格意义上来讲,MDS只能算作构建于Rados存储集群之上的文件存取接口,它同RBD和RadowGW属于同一个级别,而非Ceph的基础组件。
但它却是ceph的第一个(最初也是除librados API之外的唯一一个)客户端数据存取组件
通常需要关心以下几点:
-
Ceph元数据服务器(MDS,进程名称为"ceph-mds")代表Ceph文件系统存储元数据(即,Ceph块设备和Ceph对象存储不使用MDS)
-
Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls、find等),而不会给Ceph存储集群带来巨大负担;
推荐阅读:http://docs.ceph.org.cn/glossary/#term-56http://docs.ceph.org.cn/architecture/#pg-idhttp://docs.ceph.org.cn/architecture/#pg-osd
提示:(1)如果我们给定的存储路径是一块裸的物理磁盘(我们称之为"裸设备",也就是该设备没有被格式化指(2)通常情况下我们的ceph集群会有OSDs,Monitors,Managers和MDSs这几个基础组件,其中MDSs是可(3)RBD不需要通过运行守护进程来提供服务的,它基于librbd模块,它提供了相应的API来进行使用
2.2 ceph客户端介绍
RadosGw,RBD和CephFS都是RADOS存储服务的客户端,他们把RADOS的存储服务接口(librados)分别从不同的角度做了进一步抽象
RadosGw:
它是一个更抽象的能够跨互联网的云存储对象,它是基于RESTful风格提供的服务。每一个文件都是一个对象,而文件大小是各不相同的。
它和Ceph集群的内部的对象(object,它是固定大小的存储块,只能在Ceph集群内部使用,基于RPC协议工作的)并不相同。
值得注意的是,RadosGw依赖于librados,访问他可以基于http/https协议来进行访问。
RBD:
将ceph集群提供的存储空间模拟成一个又一个独立的块设备。每个块设备都相当于一个传统磁(硬)盘一样,可以对它做格式化,分区,挂载等处理
值得注意的是,RBD依赖于librados,访问需要Linux内核支持librdb相关模块
cephFS:
这是Ceph集群的文件系统,我们可以很轻松的像NFS那样使用,但它的性能瓶颈相比NFS来说是很难遇到的。
值得注意的是,CephFS并不依赖于librados,它和librados是两个不同的组件。但该组件使用的热度相比RadosGw和RBD要低。
查看ceph的官方文档:https://docs.ceph.com/en/latest/
官方架构图:https://docs.ceph.com/en/latest/architecture/
提示:
(1)CRUSH算法是Ceph内部数据对象存储路由的算法。它没有中心节点,即没有元数据中心服务器
(2)无论使用librados,RadosGw,RBD,CephFS哪个客户端来存储数据,最终的数据都会被写入到Rados Cluster
(3)值得注意的是这些客户端和Rados Cluster之间应该有多个存储池(pool),每个客户端类型都有自己的存储池资源
2.3 cep集群的管理方式
Ceph的常用管理接口是一组命令行工具程序,例如rados,ceph,rbd等命令,管理员可以从某个特定的MON节点执行管理操作,但也有人更倾向于使用专用的管理节点。
事实上,专用的管理节点有助于在ceph相关的程序升级或硬件维护期间为管理员提供一个完整的,独立的并隔离于存储集群之外的操作系统,从而避免因重启或意外中断而导致维护操作异常中断。
3 ceph版本选择指南
3.1 ceph版本及生命周期
Name | Initial release | Latest | End of life |
---|---|---|---|
Pacific | 2021-03-31 | 16.2.15 | 2024-03-04 |
Octopus | 2020-03-23 | 15.2.17 | 2022-08-09 |
Nautilus | 2019-03-19 | 14.2.22 | 2021-06-30 |
Mimic | 2018-06-01 | 13.2.10 | 2020-07-22 |
Luminous | 2017-08-01 | 12.2.13 | 2020-03-01 |
Kraken | 2017-01-01 | 11.2.1 | 2017-08-01 |
Jewel | 2016-04-01 | 10.2.11 | 2018-07-01 |
Infernalis | 2015-11-01 | 9.2.1 | 2016-04-01 |
Hammer | 2015-04-01 | 0.94.10 | 2017-08-01 |
Giant | 2014-10-01 | 0.87.2 | 2015-04-01 |
Firefly | 2014-05-01 | 0.80.11 | 2016-04-01 |
Emperor | 2013-11-01 | 0.72.2 | 2014-05-01 |
Dumpling | 2013-08-01 | 0.67.11 | 2015-05-01 |
Date | Reef | Quincy |
---|---|---|
2024-07-24 | 18.2.4 | – |
2024-03-11 | 18.2.2 | – |
2023-12-18 | 18.2.1 | – |
2023-10-30 | – | 17.2.7 |
2023-08-07 | 18.2.0 | – |
2023-04-10 | – | 17.2.6 |
2022-10-19 | – | 17.2.5 |
2022-09-30 | – | 17.2.4 |
2022-07-29 | – | 17.2.3 |
2022-07-21 | – | 17.2.2 |
2022-06-23 | – | 17.2.1 |
2022-04-19 | – | 17.2.0 |
ceph的版本版本选择及生命周期
ceph版本特性:
- 开发版本:x.0.z
- 候选版本:x.1.z
- 稳定版本:x.2.z。如此次使用的ceph18.2.4版本
3.2 ceph部署方式介绍
cephadm
-
使用容器和systemd安装和管理ceph集群并与cli和仪表盘GUI紧密集成
-
仅支持Octopus和更新版本,需要容器和Python3支持
-
与新的编排API完全集成; 需要提前安装docker和python环境,官方推荐方法
rook
- 在Kubernetes中运行的ceph集群,同时还支持通过Kubernete
- 仅支持Nautilus和较新版本的ceph; 需要准备一套k8s环境
ceph-ansible
- 使用ansible部署ceph集群,对于新的编排器功能,管理功能和仪表盘支持不好。 需要你熟练使用ansible功能
ceph-deploy
-
是一个快速部署集群的工具,不支持CentOS 8系统。对于
-
对于O版本也可以部署成功,但是dashboard功能并不友
-
官方已经弃用了,但对于学习来说是一个不错的工具
==提示:==使用Ubuntu基于ceph-deploy部署,建议选择python3.8以前的版本,推荐python 3.6最新版即可。因为python3.8移除了一部分函数库,而ceph-deploy用到了该函数库,否则就报错!
推荐阅读:
https://www.cnblogs.com/yinzhengjie/tag/Ceph/https://docs.ceph.com/en/latest/releases/general/
https://docs.ceph.com/en/latest/install/
https://docs.ceph.com/en/latest/releases/
4 ceph集群管理
01 环境准备
节点 | 额外硬盘 |
---|---|
ceph141 | sdb 300G,sdc 500G |
ceph142 | sdb 300G,sdc 500G, sdd 1000G |
ceph143 | sdb 300G,sdc 500G |
2.ceph所有节点基础环境准备
2.1.基于cephadm部署前提条件,官方提的要求Ubuntu 22.04 LTS出了容器运行时其他都满足- Python 3- Systemd- podman or Docker for running containers- Time synchronization (such as Chrony or the legacy ntpd)- LVM2 for provisioning storage devices参考链接:https://docs.ceph.com/en/latest/cephadm/install/#requirements2.2 设置时区
timedatectl set-timezone Asia/Shanghai
ll /etc/localtime 2.3.安装docker环境2.4 添加hosts文件解析
cat >> /etc/hosts <<EOF
10.0.0.141 ceph141
10.0.0.142 ceph142
10.0.0.143 ceph143
EOF2.5 集群时间同步【可跳过】
参考链接:https://www.cnblogs.com/yinzhengjie/p/14238720.html
02 ceph部署
1.下载需要安装ceph版本的cephadm,然后初始化集群
1.设置环境变量下载指定版本
[root@ceph141~]# CEPH_RELEASE=18.2.4
[root@ceph141~]# curl --silent --remote-name --location \
https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
[root@ceph141~]# ls
cephadm2.将cephadm添加到PATH环境变量
[root@ceph141 ~]# mv cephadm /usr/local/bin/
[root@ceph141 ~]# chmod +x /usr/local/bin/cephadm
[root@ceph141 ~]# ls -l /usr/local/bin/cephadm
-rwxr-xr-x 1 root root 215316 Aug 20 22:19 /usr/local/bin/cephadm3.创建新集群
cephadm bootstrap --mon-ip 10.0.0.141 --cluster-network 10.0.0.0/24 --allow-fqdn-hostname
# 此步骤会去官方下载镜像,可能存在镜像无法拉取问题。拉取时间比较长,1G多
Pulling container image quay.io/ceph/ceph:v18.2.4# 最后提示访问页面URL: https://ceph141:8443/User: adminPassword: xztz3sc8al
查看ceph相关的容器
[root@ceph141~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
dc05d1416659 quay.io/ceph/ceph-grafana:9.4.7 "/bin/sh -c 'grafana…" 4 minutes ago Up 4 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-grafana-ceph141
5ca5bb8f3cd2 quay.io/prometheus/alertmanager:v0.25.0 "/bin/alertmanager -…" 4 minutes ago Up 4 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-alertmanager-ceph141
001734df78dc quay.io/prometheus/prometheus:v2.43.0 "/bin/prometheus --c…" 4 minutes ago Up 4 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-prometheus-ceph141
3cc04e4f7af2 quay.io/prometheus/node-exporter:v1.5.0 "/bin/node_exporter …" 7 minutes ago Up 7 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-node-exporter-ceph141
7f6f02484d0b quay.io/ceph/ceph "/usr/bin/ceph-crash…" 7 minutes ago Up 7 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-crash-ceph141
8df49ff819eb quay.io/ceph/ceph "/usr/bin/ceph-expor…" 7 minutes ago Up 7 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-ceph-exporter-ceph141
e022ac1069a7 quay.io/ceph/ceph:v18 "/usr/bin/ceph-mgr -…" 8 minutes ago Up 8 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-mgr-ceph141-yvswvf
8cc214cdb16b quay.io/ceph/ceph:v18 "/usr/bin/ceph-mon -…" 8 minutes ago Up 8 minutes ceph-12fad866-9aa0-11ef-8656-6516a17ad6dd-mon-ceph141
5191940317f4 quay.io/ceph/ceph:v18 "ceph --version" 8 minutes ago Created admiring_clarke
监听8443端口的进程是mgr
相关文章:

ceph介绍和搭建
1 为什么要使用ceph存储 什么是对象存储? 对象存储并没有向文件系统那样划分为元数据区域和数据区域,而是按照不同的对象进行存储,而且每个对象内部维护着元数据和数据区域。因此每个对象都有自己独立的管理格式。 对象存储优点:…...
树莓派安装FreeSWITCH
1、下载相关资源: # 假设所有资源都下载到/opt/目录下 cd /opt # 下载FreeSWITCH源码 git clone https://github.com/signalwire/freeswitch # 下载libks源码 git clone https://github.com/signalwire/libks # 下载sofia-sip源码 git clone https://github.com/fr…...
OpenSSL 生成根证书、中间证书和网站证书
OpenSSL 生成根证书、中间证书和网站证书 一、生成根证书(ChinaRootCA)二、生成中间 CA(GuangDongCA)三、生成网站证书(gdzwfw) 一、生成根证书(ChinaRootCA) 创建私钥: …...

MySQL核心业务大表归档过程
记录一下2年前的MySQL大表的归档,当时刚到公司,发现MySQL的业务核心库,超过亿条的有7张表,最大的表有9亿多条,有37张表超过5百万条,部分表行数如下: 在测试的MySQL环境 : pt-archiv…...
dapp获取钱包地址,及签名
npm install ethersimport {ethers} from ethers const accounts await ethereum.request({method: eth_requestAccounts}); // 获取钱包地址 this.form.address accounts[0] console.log("accounts:" this.address)const provider new ethers.BrowserProvider(…...

探索Dijkstra算法的普遍最优性:从经典算法到最新学术突破
引言 在计算机科学中,Dijkstra算法是解决单源最短路径问题的经典算法,尤其在地图导航、网络通信和机器人路径规划等领域有着广泛应用。近期,学术界在此算法上取得了重大突破:研究人员证明了Dijkstra算法的“普遍最优性”ÿ…...

️代码的华尔兹:在 Makefile 的指尖上舞动自动化的诗篇
文章目录 😶🌫️😶🌫️😶🌫️背景——一个优秀工程师必备技能😶🌫️😶🌫️😶🌫️一、🤩🤩快速了解…...

函数式编程Stream流(通俗易懂!!!)
目录 1.Lambda表达式 1.1 基本用法 1.2 省略规则 2.Stream流 2.1 常规操作 2.1.1 创建流 2.1.2 中间操作 filter map distinct sorted limit 编辑skip flatMap 2.1.3 终结操作 foreach count max&min collect anyMatch allMatch noneMatch …...

数据分析:转录组差异fgsea富集分析
文章目录 介绍加载R包数据链接导入数据数据预处理DE testing: 2BP vs no-BP比较limma-voomLoad steroid dataIn No-BP patientsIn 2BP patientsCompare gene expression vs bacterial mass其他系统信息介绍 转录组差异fgsea富集分析是一种基于基因集的富集分析方法,它关注的是…...

在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
在Django中可以使用CKEditor4和CKEditor5两个版本,分别对应软件包django-ckeditor和django-ckeditor-5。原来使用的是CKEditor4,python manager.py makemigrations时总是提示CKEditor4有安全风险,建议升级到CKEditor5。故卸载了CKEditor4&…...

AI笔筒操作说明及应用场景
AI笔筒由来: 在快节奏的现代办公环境中,我们一直在寻找既能提升效率、增添便利,又能融入企业文化、展现个人品味的桌面伙伴。为此,我们特推出专为追求卓越、注重细节的您设计的AI笔筒礼品版,它集高科技与实用性于一身…...

Android自启动管控
1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外,还会导致占用过多的系统CPU和内存资源,造成系统卡顿、发热、电池消耗过快;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…...

把握鸿蒙生态崛起的机遇:开发者视角的探讨
大家好,我是程序员小羊! 前言: 近年来,鸿蒙系统(HarmonyOS)的发展备受瞩目。随着其在智能手机、智能穿戴、车载系统和智能家居等领域的广泛应用,鸿蒙系统正逐渐形成与安卓、iOS并列的三足鼎立…...

MySQL初学之旅(1)配置与基础操作
目录 1.前言 2.正文 2.1数据库的发展历程 2.2数据库的基础操作 2.2.1启动服务 2.2.2创建与删除数据库 2.2.3数据类型 2.2.4创建表与删除表 2.3MySQL Workbench基础使用简介 3.小结 1.前言 哈喽大家好吖,今天博主正式开始为大家分享数据库的学习ÿ…...

一款革命性的视频剪辑工具,AI剪辑新纪元:Clapper
如果说AI视频剪辑工具哪家强?还真想不出有什么让人眼前一亮的AI视频剪辑应用。 毕竟随着AI技术的发展越来越快,各种AI应用如雨后春笋般涌现,然而,真正能够在视频剪辑领域脱颖而出的工具却寥寥无几。 今天我要介绍的 Clapper 就是…...
HTML 区块
HTML 区块 HTML(HyperText Markup Language)是构建网页的标准语言,它定义了网页的结构和内容。在HTML中,区块元素是指那些能够定义较大块状结构的元素,比如段落、标题、列表、表格和 divis 等。这些元素通常对页面的布…...

复杂度的讲解
数据结构可以简单理解为在内存中管理数据 它具有速度快 带电存储的特点(临时存储) 如何衡量一个算法的好坏 因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算…...

[ Linux 命令基础 2 ] Linux 命令详解-系统管理命令
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

使用docker部署Prometheus和Grafana去监控mysql和redis
自动化性能监控系统安装部署 相关工具的安装部署 服务工具分配 服务器工具端口10.0.20.9grafana300010.0.20.9prometheus909010.0.20.10mysql330610.0.20.10mysql-exporter910410.0.20.10redis330610.0.20.10redis_exporter9121 使用docker-compose安装prometheus 先拉取p…...

日志管理 | Log360 实现PCI DSS v4.0数据安全合规要求
PCI DSS 是一项网络安全标准,得到所有主要信用卡和支付处理公司的支持,旨在确保信用卡和借记卡号码的安全。最新的PCI DSS v4.0 代表支付卡行业数据安全标准。 任何依赖信用卡交易的企业都不能将数字安全视为一个偷工减料的领域,因为数据泄露…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...