Ceph 原理与集群配置

news2025/5/11 9:47:56

一、Ceph 工作原理

1.1.为什么学习 Ceph?

在学习了 NFS 存储之后,我们仍然需要学习 Ceph 存储。这主要是因为不同的存储系统适用于不同的场景,NFS 虽然有其适用之处,但也存在一定的局限性。而 Ceph 能够满足现代分布式、大规模、高可靠存储架构的要求。

NFS 主要适用于简单文件共享的轻量场景,它就像是一个小型的共享仓库,适合几个人或者小团队之间简单地共享一些文件。但当我们面临大规模的数据存储、需要高度可靠的数据保护以及分布式的存储架构时,NFS 就显得力不从心了。

Ceph 则解决了大规模、高可靠、分布式存储的复杂需求。在现代数据密集型业务中,如云计算、大数据、AI 等领域,数据量巨大且对存储的可靠性和扩展性要求极高。学习 Ceph 可以让我们掌握应对这些复杂场景的核心技术,弥补 NFS 在扩展性、功能丰富度、可靠性上的不足,使我们能够适应技术发展的趋势。

1.2.什么是 Ceph⭐

Ceph 是实现优性能、可靠性、可扩展性存储系统,具有 “统一的” 和 “分布式” 两大特性:

  • “统一的”:Ceph 一套存储系统可同时提供对象存储、块存储、文件系统存储三种功能。

  • “分布式”:Ceph 是无中心结构,无中心结构就是 Ceph 集群,无论访问集群中的哪一个节点,都能访问整个 Ceph 结构,理论上具备无限可扩展性

1.3.Ceph 系统层次⭐

自下而上,四个层次

  • RADOS:基础存储系统(可靠的、自动化的、分布式的对象存储)

    • Cluster map:它是记录全局系统状态的数据结构,由以下两个部分组成:

      • OSD:数量众多,是数据存储和维护的核心。本质上,它是安装了操作系统和文件系统的计算机,每个 OSD 拥有自己的 OSD deamon,用于完成 OSD 的逻辑功能。同时,它还会与 Monitor 以及其他 OSD 进行通信,以完成数据的存储和维护。可以把 OSD 想象成一个个具体的小仓库,负责实际存放货物(数据)。

      • Monitor:主要负责状态检测和维护。它就像仓库的管理员,时刻关注着各个小仓库(OSD)的状态,确保整个仓库网络的正常运行。

  • LIBRADOS:基础库,为上层应用提供了访问 RADOS 的接口。可以把它看作是连接上层应用和底层存储系统的桥梁。

  • RADOS GW、RBD、Ceph FS:高层应用接口,分别对应对象存储、块存储和文件系统存储的接口。不同的应用可以通过这些接口来使用 Ceph 提供的不同存储功能。

  • 应用层:使用 Ceph 存储服务的各种应用程序。

1.4.寻址流程⭐

Ceph 通过三次映射实现了从文件到底层存储设备的高效、可靠寻址,具体如下:

  • File(文件)→ Object(对象)映射:将用户操作的文件切分成固定大小(由 RADOS 限定,如 2MB 或 4MB)的对象。这样做有两个好处:一是让大小不限的文件变为易于 RADOS 管理的统一尺寸对象,就像把不同大小的货物打包成统一规格的箱子;二是将对单一文件的串行处理转换为对多个对象的并行处理,提升了效率。

  • Object(对象)→ PG(归置组)映射:通过哈希算法将对象映射到 PG。一个对象只能映射到一个 PG,而一个 PG 可管理多个对象(如数千个甚至更多),实现对对象存储的逻辑组织。可以把 PG 看作是一个个货架,对象就像放在货架上的商品。

  • PG(归置组)→ OSD(对象存储设备)映射:利用 CRUSH 算法,将 PG 以多副本(通常为 3 副本)形式映射到不同的 OSD 上。这样每个 PG 的数据会分布到多个 OSD 存储,实现数据冗余备份、高可用及负载均衡,确保系统的可靠性和稳定性。就像把货架上的商品复制多份,分别存放在不同的小仓库中,即使某个小仓库出现问题,也不会影响商品的正常使用。

1.5.数据写入流程

Ceph 数据写入流程基于三次映射(File → Object → PG → OSD),具体如下:

  1. File 切片为 Object:用户写入的文件先被切分为固定大小的 Object(如 4MB),这是 Ceph 存储的最小单元,便于管理和并行操作。

  2. 确定存储位置:通过哈希 HASH 算法将 Object 映射到 PG(归置组),再利用 CRUSH 算法根据集群拓扑(如机架、机房等)将 PG 映射到多个 OSD(通常为 3 个,形成三副本)。这样可以确保数据的安全性和可靠性。

  3. 客户端与 OSD 通信

    • 客户端通过 CRUSH 算法知道目标 OSD(包含主 OSD 和从 OSD),将数据发送给主 OSD。

    • 主 OSD 接收数据后,会将数据同步到从 OSD。

    • 当所有从 OSD 成功接收数据并向主 OSD 确认后,主 OSD 才将数据持久化写入本地,并向客户端返回写入成功的确认。

1.6.集群维护

  • 在 Ceph 集群维护中,Monitor 负责汇总集群状态并形成 cluster map,随后将其扩散至所有 OSD 和 Client。OSD 利用 cluster map 进行数据维护,Client 借助 cluster map 实现数据寻址。

  • 需注意的是,Monitor 不会主动轮询 OSD 状态,而是由 OSD 主动向 Monitor 上报自身状态(如新增 OSD 加入集群,或检测到自身 / 其他 OSD 异常时)。

  • Monitor 收到上报信息后更新 cluster map 并再次扩散,确保集群内各组件掌握最新的集群状态,保障 Ceph 集群的正常运行与数据处理。

  • 简言之,通过 “OSD 主动上报状态 → Monitor 汇总更新 cluster map → 扩散至全体 OSD 和 Client” 的流程,实现集群状态的同步与维护,支撑 OSD 和 Client 的数据操作。

1.7.新增 OSD

新增 OSD:

  • 首先与 monitor 通信,monitor 将其加入 cluster map,设置状态 up 或者 out,将最终版的 cluster map 发给 OSD。

  • (新增 OSD 就像是在仓库网络中添加一个新的小仓库,需要先告知管理员(Monitor),管理员将其信息记录到仓库地图(cluster map)中,并设置其状态,然后将更新后的地图发给其他小仓库(OSD))

恢复 OSD:

  • Ceph 的自动化故障恢复指当 OSD 故障时,系统自动检测并通过 CRUSH 算法将故障节点上的数据副本重新分布到其他正常 OSD 上以维持副本数,故障节点修复后自动纳入集群并重新平衡数据,全程无需人工干预。

  • (这就像当某个小仓库出现问题时,系统会自动将里面的货物转移到其他小仓库,等这个小仓库修好后,再将货物重新分配回来)

负载均衡 OSD:

  • 新 OSD 替换旧 OSD,复制换数据后,新 OSD 被置为 up 且 in 状态,旧 OSD 退出该 PG,cluster map 数据更新。

  • (这就像用一个新的小仓库替换旧的小仓库,将旧仓库里的货物复制到新仓库,然后让旧仓库退出相应的货架管理,同时更新仓库地图)

自动化故障探测:

  • OSD 走动监测状态,包括自身问题和其他 OSD 问题,自动上报 monitor,monitor 把有问题 OSD 状态设置为 down 且 in,如果不能自动恢复则设置为 down 且 out,如果能自动恢复则设置为 up 且 in。

  • (这就像每个小仓库都有一个自我检测装置,发现问题后会及时告知管理员,管理员根据情况对小仓库的状态进行调整)


二、配置 Ceph 集群

  • 配置要求

    • 硬件要求:RHEL 9 三台主机,每台主机需要 4G 内存,并添加两块 50G 硬盘。

    • 系统设置:关闭防火墙、SELinux,以避免对 Ceph 集群的通信和运行造成干扰。

2.1.准备工作

配置 hosts 解析(所有主机都需做)。

目的:是为了让各个主机能够通过主机名相互识别和通信,就像给每个小仓库都取了一个容易记住的名字,方便大家交流。

cat >> /etc/hosts << EOF
192.168.67.121 ceph-master
192.168.67.122 ceph-node1
192.168.67.123 ceph-node2
EOF

时间同步,因为 Ceph 时间要求同步到 0.05s 之内,所以对时间要求很严格。

时间同步对于 Ceph 集群非常重要,因为各个组件之间的通信和数据处理需要基于统一的时间标准。如果时间不同步,可能会导致数据不一致、状态判断错误等问题。(所有主机都需做)

yum install bash-completion vim tree psmisc wget tar net-tools lrzsz -y
yum install chrony -y
​
sed -i 's/^pool.*/pool ntp1.aliyun.com iburst/g' /etc/chrony.conf
    
systemctl enable --now chronyd
systemctl restart chronyd
​
chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 120.25.115.20                 2   6    33     5  -1993ns[ -126us] +/-   17ms

2.2.cephadm 配置 Ceph

2.2.1.安装 docker-ce

安装 Docker-ce 是为了构建 Docker 软件仓库,用于下载 Docker。Docker 可以为 Ceph 组件提供一个隔离的运行环境,避免本地环境依赖问题。(所有主机都需做)

cat >> /etc/yum.repos.d/docker.repo << EOF
[docker]
name=docker
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9.3/x86_64/stable/
gpgcheck=0
EOF

安装 Docker-ce。(所有主机都需做)

yum install docker-ce -y

配置 Docker 加速器。(所有主机都需做)

cat >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": [
                        "https://docker.m.daocloud.io",
                        "https://hub-mirror.c.163.com",
                        "https://mirror.baidubce.com",
                        "https://docker.nju.edu.cn",
                        "https://register.liberx.info",
                        "https://mirror.ccs.tencentyun.com",
                        "https://2i1r7dqv.mirror.aliyuncs.com"
                      ]
}
EOF

2.2.2.安装 cephadm

准备 ceph 的 yum 源,以便后续安装 cephadm。(所有主机都需做)

cat >> /etc/yum.repos.d/ceph.repo << EOF
[ceph]
name=ceph x86_64
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/x86_64
enabled=1
gpgcheck=0
[ceph-noarch]
name=ceph noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/noarch
enabled=1
gpgcheck=0
[ceph-source]
name=ceph SRPMS
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/SRPMS
enabled=1
gpgcheck=0
EOF

安装 Python3,因为 cephadm 依赖 Python3。(所有主机都需做)

yum install python3 -y

在 ceph-master 主机上安装 cephadm(仅在 ceph-master 主机上做)。

cephadm 是 Ceph 官方提供的集群管理工具,支持自动化部署、扩容、监控,仅需在管理节点(如 ceph-master)安装。(仅在 ceph-master 主机上做)

yum install cephadm -y

2.2.3.初始化 ceph 集群

在 ceph-master 主机上初始化 ceph 集群。(仅在 ceph-master 主机上做)

cephadm --docker bootstrap \
--mon-ip 192.168.67.121 \
--initial-dashboard-user admin \
--initial-dashboard-password redhat \
--dashboard-password-noupdate \
--allow-fqdn-hostname
  • --docker:使用 Docker 运行 Ceph 组件(mon、mgr 等),避免本地环境依赖问题。

  • --mon-ip:指定第一个 Monitor 节点的 IP(集群核心组件,负责维护集群状态)。Monitor 就像仓库的管理员,需要有一个固定的地址来进行管理和通信。

  • --initial-dashboard-user/password:设置 Web 管理界面(Ceph Dashboard)的初始登录凭证,方便我们通过 Web 界面来管理和监控 Ceph 集群。

  • --dashboard-password-noupdate:禁止 Dashboard 自动更新密码(生产环境可选)。

  • --allow-fqdn-hostname:允许使用主机名(非 IP)进行节点识别,兼容后续可能的 DNS 配置。

2.2.4.扩展 ceph 集群

集群扩容,拷贝公钥到 node 节点。

将 ceph-master 的 SSH 公钥(ceph.pub 由 cephadm 自动生成)添加到 node 节点,实现无密码登录,便于后续远程管理和部署 OSD 等组件。这就像给管理员一把万能钥匙,可以直接打开各个小仓库的门。(仅在 ceph-master 主机上做)

ssh-copy-id -f -i /etc/ceph/ceph.pub ceph-node1
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph-node2

添加节点集群。(仅在 ceph-master 主机上做)

cephadm shell ceph orch host add ceph-node1
cephadm shell ceph orch host add ceph-node2
  • cephadm shell:进入 cephadm 命令行环境,获取集群管理权限。

  • ceph orch host add:将节点(ceph-node1/2)加入集群,以便后续分配 OSD、mon 等组件。这就像把新的小仓库加入到仓库网络中。

2.2.5.配置 ceph 集群

安装 ceph-common 的核心价值在于:

  1. 提供访问 Ceph 集群的必要工具(如 ceph、rbd 等命令)。

  2. 支持应用程序与 Ceph 集成(通过客户端库)。让其他应用程序能够方便地使用 Ceph 提供的存储服务。

  3. 简化集群配置与管理(自动加载配置文件、认证信息)。减少我们手动配置的工作量。

如果仅作为存储客户端(如挂载 CephFS 或使用 RBD 卷),ceph-common 是必需的;若作为集群管理员,则更依赖此包提供的完整工具链。(仅在 ceph-master 主机上做)

# 配置 epel 源
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-9.noarch.rpm
# 安装 ceph-common
yum install ceph-common -y

添加 osd 磁盘设备。

为每个节点的两块硬盘(/dev/sdb、/dev/sdc)创建 OSD 服务,OSD 是 Ceph 的核心存储单元,负责实际数据的存储和管理。添加 OSD 就像在各个小仓库中增加更多的存储空间,以满足不断增长的数据存储需求。(仅在 ceph-master 主机上做)

ceph orch daemon add osd ceph-master:/dev/sdb
ceph orch daemon add osd ceph-master:/dev/sdc
ceph orch daemon add osd ceph-node1:/dev/sdb
ceph orch daemon add osd ceph-node1:/dev/sdc
ceph orch daemon add osd ceph-node2:/dev/sdb
ceph orch daemon add osd ceph-node2:/dev/sdc

设置管理节点。

标记 ceph-master 为管理节点(_admin 是 cephadm 的特殊标签),允许该节点执行集群管理操作(如修改配置、添加组件)。这就像指定一个仓库管理员,负责整个仓库网络的管理和协调工作。(仅在 ceph-master 主机上做)

ceph orch host label add ceph-master _admin

将 mon 和 mgr 组件部署到所有节点中(高可用性)。(仅在 ceph-master 主机上做)

ceph orch apply mon "ceph-master ceph-node1 ceph-node2"
ceph orch apply mgr --placement "ceph-master ceph-node1 ceph-node2"
  • 部署 Monitor 组件:在三个节点上部署 Monitor 组件,通过 Paxos 算法实现选举和状态同步(奇数个节点避免脑裂,确保高可用性)。Monitor 负责维护集群的状态信息,多个 Monitor 节点可以保证在某个节点出现故障时,集群仍然能够正常运行。

  • 部署 Manager 组件:在三个节点上部署 Manager 组件(Active-Standby 模式),负责集群监控、仪表盘管理、自动化策略执行,提升运维效率。Manager 就像一个智能的监控系统,实时监控集群的运行状态,并根据预设的策略进行自动化管理。

2.3.验证 ceph 集群状态

查看 ceph 健康状态。(仅在 ceph-master 主机上做)

[root@ceph-master ~]# ceph -s
  cluster:
    id:     8bb910d6-2b1b-11f0-8725-000c292a6ede
    health: HEALTH_OK       # 健康状态 OK
 
  services:
    mon: 3 daemons, quorum ceph-master,ceph-node2,ceph-node1 (age 3m)   # 三个 mon
    mgr: ceph-master.nobasm(active, since 7m), standbys: ceph-node2.femkkp, ceph-node1.rvdoat       # 三个 mgr
    osd: 6 osds: 6 up (since 93s), 6 in (since 112s)        # 六个 osd
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 577 KiB
    usage:   161 MiB used, 300 GiB / 300 GiB avail      # osd 一共 300 GiB
    pgs:     1 active+clean

验证 ceph Web 页面(https://ip:8443)。

输入用户名和密码登录,显示如下界面即可。这可以让我们通过 Web 界面直观地管理和监控 Ceph 集群。

集成了 prometheus 并对接 grafna,(https://ip:3000)。

通过集成 prometheus 和 grafna,我们可以对 Ceph 集群进行更详细的监控和数据分析,及时发现和解决潜在的问题。

集群配置完毕。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2373025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

天线的PCB设计

目录 天线模块设计的重要性 天线模块的PCB设计 天线模块设计的重要性 当智能手表突然断连、无人机信号飘忽不定——你可能正在经历一场来自天线模块的"无声抗议"。这个隐藏在电子设备深处的关键组件&#xff0c;就像数字世界的隐形信使&#xff0c;用毫米级的精密结…

C++笔记-set和map的使用(包含multiset和multimap的讲解)

1.序列式容器和关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间一般没有紧密的关联关系&#xff0…

Linux `ifconfig` 指令深度解析与替代方案指南

Linux `ifconfig` 指令深度解析与替代方案指南 一、核心功能与现状1. 基础作用2. 版本适配二、基础语法与常用操作1. 标准语法2. 常用操作速查显示所有接口信息启用/禁用接口配置IPv4地址修改MAC地址(临时)三、高级配置技巧1. 虚拟接口创建2. MTU调整3. 多播配置4. ARP控制四…

Python pandas 向excel追加数据,不覆盖之前的数据

最近突然看了一下pandas向excel追加数据的方法&#xff0c;发现有很多人出了一些馊主意&#xff1b; 比如用concat,append等方法&#xff0c;这种方法的会先将旧数据df_1读取到内存&#xff0c;再把新数据df_2与旧的合并&#xff0c;形成df_new,再覆盖写入&#xff0c;消耗和速…

【金仓数据库征文】政府项目数据库迁移:从MySQL 5.7到KingbaseES的蜕变之路

摘要&#xff1a;本文详细阐述了政府项目中将 MySQL 5.7 数据库迁移至 KingbaseES 的全过程&#xff0c;涵盖迁移前的环境评估、数据梳理和工具准备&#xff0c;迁移实战中的数据源与目标库连接配置、迁移任务详细设定、执行迁移与过程监控&#xff0c;以及迁移后的质量验证、系…

Go语言——goflow工作流使用

一、引入依赖 这个很坑&#xff0c;他不允许连接带密码的redis&#xff0c;只能使用不带密码的redis&#xff0c;要带密码的话得自己改一下源代码&#xff0c;无语 go get github.com/s8sg/goflow二、画出我们的工作流程 三、编写代码 package mainimport ("encoding/j…

yarn npm pnpm

1 下载方式 npm 之前串行下载 现在并行下载 yarn 并行下载 加入缓存复用 pnpm 硬连接 避免重复下载&#xff0c;先检查本地是否存在&#xff0c;存在的话直接连接过去

Block Styler——字符串控件

字符串控件的应用 参考官方帮助案例&#xff1a;&#xff08;这个方式感觉更好&#xff0c;第二种方式也可以&#xff09;E:\NX1980\UGOPEN\SampleNXOpenApplications\C\BlockStyler\ColoredBlock 普通格式&#xff1a; 读取&#xff1a; //方法一 string0->GetProperti…

LangGraph(三)——添加记忆

目录 1. 创建MemorySaver检查指针2. 构建并编译Graph3. 与聊天机器人互动4. 问一个后续问题5. 检查State参考 1. 创建MemorySaver检查指针 创建MemorySaver检查指针&#xff1a; from langgraph.checkpoint.memory import MemorySavermemory MemorySaver()这是位于内存中的检…

【无标题】I/O复用(epoll)三者区别▲

一、SOCKET-IO复用技术 定义&#xff1a;SOCKET - IO复用技术是一种高效处理多个套接字&#xff08;socket&#xff09;的手段&#xff0c;能让单个线程同时监听多个文件描述符&#xff08;如套接字&#xff09;上的I/O事件&#xff08;像可读、可写、异常&#xff09;&#x…

ClassLoader类加载机制的核心引擎

ClassLoader类加载机制的核心引擎 文章目录 ClassLoader类加载机制的核心引擎1. ClassLoader基础1.1 什么是ClassLoader&#xff1f;1.2 ClassLoader的层次结构1.3 类加载的过程 2. 源码解析与工作原理2.1 ClassLoader的核心方法2.2 双亲委派模型的工作原理2.3 打破双亲委派模型…

tryhackme——Enumerating Active Directory

文章目录 一、凭据注入1.1 RUNAS1.2 SYSVOL1.3 IP和主机名 二、通过Microsoft Management Console枚举AD三、通过命令行net命令枚举四、通过powershell枚举 一、凭据注入 1.1 RUNAS 当获得AD凭证<用户名>:<密码>但无法登录域内机器时&#xff0c;runas.exe可帮助…

【Linux学习笔记】系统文件IO之重定向原理分析

【Linux学习笔记】系统文件IO之重定向原理分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】系统文件IO之重定向原理分析前言一. 系统文件I/01.1 一种传递标志位的方法1.2 hello.c写文件:1.3 he…

SpringBoot中使用MCP和通义千问来处理和分析数据-连接本地数据库并生成实体类

文章目录 前言一、正文1.1 项目结构1.2 项目环境1.3 完整代码1.3.1 spring-mcp-demo的pom文件1.3.2 generate-code-server的pom文件1.3.3 ChatClientConfig1.3.4 FileTemplateConfig1.3.5 ServiceProviderConfig1.3.6 GenerateCodeController1.3.7 Columns1.3.8 Tables1.3.9 Fi…

实现滑动选择器从离散型的数组中选择

1.使用原生的input 详细代码如下&#xff1a; <template><div class"slider-container"><!-- 滑动条 --><inputtype"range"v-model.number"sliderIndex":min"0":max"customValues.length - 1"step&qu…

基于Credit的流量控制

流量控制(Flow Control)&#xff0c;也叫流控&#xff0c;它是控制组件之间发送和接收信息的过程。在总线中&#xff0c;流控的基本单位称为flit。 在标准同步接口中(比如AXI协议接口)&#xff0c;握手信号如果直接采用寄存器打拍的方式容易导致信号在不同的方向上出现偏离。因…

【金仓数据库征文】金仓数据库KingbaseES: 技术优势与实践指南(包含安装)

目录 前言 引言 一 : 关于KingbaseES,他有那些优势呢? 核心特性 典型应用场景 政务信息化 金融核心系统&#xff1a; 能源通信行业&#xff1a; 企业级信息系统&#xff1a; 二: 下载安装KingbaseES 三:目录一览表: 四:常用SQL语句 创建表&#xff1a; 修改表结构…

金丝猴食品:智能中枢AI-COP构建全链路数智化运营体系

“金丝猴奶糖”&#xff0c;这个曾藏在无数人童年口袋里的甜蜜符号&#xff0c;如今正经历一场数智焕新。当传统糖果遇上数字浪潮&#xff0c;这家承载着几代人味蕾记忆的企业&#xff0c;选择以数智化协同运营平台为“新配方”&#xff0c;将童年味道酿成智慧管理的醇香——让…

java的输入输出模板(ACM模式)

文章目录 1、前置准备2、普通输入输出API①、输入API②、输出API 3、快速输入输出API①、BufferedReader②、BufferedWriter 案例题目描述代码 面试有时候要acm模式&#xff0c;刷惯leetcode可能会手生不会acm模式&#xff0c;该文直接通过几个题来熟悉java的输入输出模板&…

鸿蒙 所有API缩略图鉴

从HarmonyOS NEXT Developer Preview1&#xff08;API 11&#xff09;版本开始&#xff0c;HarmonyOS SDK以 Kit 维度提供丰富、完备的开放能力&#xff0c;涵盖应用框架、应用服务、系统、媒体、AI、图形在内的六大领域&#xff0c;共计30000个API