Ceph分布式存储

Ceph 分布式存储全解析:架构 / 部署 / 池 / 认证 / 块·对象·文件存储 实战指南

前言

Ceph 是一款开源、分布式、软件定义存储(SDS),具备极高的可用性、扩展性和易用性,用于存储海量数据。Ceph 可部署在通用服务器上(x86 或 ARM 架构),并支持在同一集群内混用 x86 和 ARM 主机。

本文根据教学教材系统整理,带你从 Ceph 介绍 → 架构 → 部署 → 池管理 → 认证授权 → 块/对象/文件存储 全流程掌握 Ceph。


第 1 章 Ceph 分布式存储介绍

1.1 存储中用户角色

在一个较大的云存储环境中,存在不同职责的存储用户:

  • 存储管理员:安装、配置和维护 Ceph 存储集群;培训架构师;提供弹性和恢复(复本、备份、灾难恢复);通过基础设施即代码实现自动化。
  • 存储操作员:协助日常操作,主要使用 Ceph Dashboard GUI 查看和响应集群警报和统计,负责更换故障存储设备等日常任务。
  • 其他角色:云操作员、自动化工程师、应用开发人员(DevOps)、服务管理员、部署工程师、应用架构师、基础架构架构师、数据中心操作员。

在不同组织中角色实施不同:电信/云服务商中"云操作员、存储操作员、基础架构架构师"通常只消费存储不维护;银行金融等场景所有角色由内部人员承担;小规模组织一个人可能承担多个角色。

1.2 Ceph 技术优势

  • 采用 RADOS 系统将所有数据作为对象存储在存储池中;
  • 去中心化:客户端可根据 CRUSH 算法自行计算出对象存储位置,再进行数据读写;
  • 集群可自动进行扩展、数据再平衡、数据恢复。

1.3 Ceph 历史

  • 2003 年,圣克鲁兹加利福尼亚大学的 Sage Weil 开发 Ceph(其博士项目一部分),初始原型约 4 万行 C++ 代码;
  • 2006 年,遵循 LGPL 协议开源;
  • 2012 年,Sage Weil 在 DreamHost 资助下成立 Inktank 公司提供专业服务;
  • 2014 年,Inktank 并入红帽(Red Hat),成为 Ceph 存储;
  • Ceph 与 Linux 内核、SUSE、OpenStack、CloudStack 等项目深度整合。

1.4 上游 Ceph 版本

Ceph 采用代号 + 版本号的发布机制,主要 LTS 版本:

版本 代号 发布时间
16.2.x Pacific 2021-03
17.2.x Quincy 2022-04
18.2.x Reef 2023-08
19.2.x Squid 2024-09

版本格式 x.y.z 含义:

  • x:发行周期(如 13 表示 Mimic);
  • y:发行类型(x.0.z 开发版、x.1.z 候选版、x.2.z 稳定版);
  • z:发行号。

红帽企业版 Ceph(RHCS)与社区 LTS 版本生命周期一致,并提供 36 个月支持。

1.5 Ceph 架构介绍

Ceph 采用模块化分布式架构,包含:

存储后端组件:

组件 全称 职责
MON Monitor(监控器) 维护集群状态映射,帮助其他守护进程协调
OSD Object Storage Device(对象存储设备) 存储数据,处理数据复制、恢复和重新平衡
MGR Manager(管理器) 通过浏览器 Dashboard 和 REST API 跟踪运行时指标、公开集群信息
MDS Metadata Server(元数据服务器) 存储 CephFS 使用的元数据(非对象/块存储)

四种访问方式:

访问方式 库 说明
Ceph 原生 API librados 原生 C 库,性能最优
Ceph 块设备 librbd(RBD) RADOS 块设备,支持精简配置、快照、克隆
Ceph 对象网关 librgw(RGW) 兼容 S3 和 Swift API
Ceph 文件系统 libcephfs(CephFS) POSIX 接口,支持快照

Ceph 使用 RADOS 提供对象存储,通过 librados 封装库提供多种存储方式,外层通过 RGW(对象)、RBD(块)、CephFS(文件)将数据写入存储。


第 2 章 Ceph 部署

2.1 集群安装方式

官方推荐:

  • Cephadm:基于容器部署,支持 Octopus 及以后版本,部署后可通过命令行和图形界面管理;
  • Rook:基于 Kubernetes 部署,支持 Nautilus 及以后版本。

其他方式: ceph-ansible(ansible 部署)、ceph-deploy(已不维护)、DeepSea(salt 部署)、手动部署。

2.2 Ceph 服务端口

服务 端口 描述
MON 6789、3300 Ceph 集群内部通信
OSD 6800-7300 每个 OSD 占四个端口(客户端通信、OSD 数据通信、心跳)
MDS 6800-7300 元数据服务器通信
MGR 8443 SSL 方式登录 Ceph 图形化页面
RESTful 管理模块 8003 SSL 方式与 RESTful 模块通信
Prometheus 9283/9093/9100 管理、告警、节点导出
Grafana 3000 Grafana 服务
RGW 80 RADOS 网关通信
Ceph iSCSI 网关 9287 iSCSI 网关通信

所有端口均为 TCP 协议。实验环境通常直接关闭 firewalld 和 SELinux 以降低部署难度。

2.3 Cephadm 简介

Cephadm 是一个 Ceph 全生命周期管理工具,通过"引导(bootstrapping)"创建一个包含一个 MON 和一个 MGR 的单节点集群,后续可通过自带的编排接口进行扩容、添加主机、部署服务。

  • Cephadm 使用容器部署 Ceph,大大降低复杂性和包依赖性;
  • Cephadm 通过 SSH 向集群添加新主机、添加存储或监控;
  • 提供两个管理接口:Ceph CLI 和 Dashboard GUI。

Ceph CLI 接口:

bash 复制代码
# 进入容器化 shell(安装了所有必需的 Ceph 包)
cephadm shell
[ceph: root@ceph1 /]#

# 直接运行命令
cephadm shell -- ceph status
#   cluster: id: 2faf...  health: HEALTH_OK
#   services: mon: 3 daemons  mgr: ceph2.oetbal(active)

# 常用状态查看
ceph status
ceph -s

2.4 部署 mon 和 mgr

bash 复制代码
# 引导集群(创建单节点集群,含 MON + MGR)
cephadm bootstrap --mon-ip 192.168.108.11

# 查看集群状态
ceph status

2.5 部署 OSD

OSD 资源建议:

  • OSD CPU 最少 1 核,每 200-500MB/s 或 1000-3000 IOPS 增加一核;
  • OSD 内存 2G-4G 可实现基本功能。
bash 复制代码
# 在节点上添加 OSD
ceph orch device ls                       # 查看可用磁盘
ceph orch apply osd --all-available-devices  # 应用所有可用磁盘为 OSD

# 查看 OSD 状态
ceph osd tree
ceph osd status

2.6 部署服务

bash 复制代码
ceph orch ls                  # 列出所有服务
ceph orch apply mon ceph2      # 在节点部署 mon
ceph orch apply mgr ceph2      # 部署 mgr
ceph orch apply osd ...        # 部署 osd

第 3 章 Ceph 集群配置

3.1 配置文件

Ceph 配置文件采用 INI 文件格式 ,涵盖 Ceph 守护进程和客户端配置,位于 /etc/ceph/ceph.conf。每个部分使用 [name] 标记。

ini 复制代码
[global]
fsid = 2faf683a-...
mon host = ceph1.laogao.cloud,ceph2,ceph3

[mon]
mon allow pool delete = true

[osd]
osd journal size = 1024

3.2 配置集群监控器(Monitor)

MON 维护集群状态映射(cluster map),包括 MON、OSD、MDS 信息。可通过 ceph mon dump、ceph mon stat 查看监控器状态。

3.3 配置集群网络

  • 公共网络(public network):客户端与 Ceph 集群通信;
  • 集群网络(cluster network):OSD 之间数据复制、心跳、再平衡流量。

配置独立 cluster 网络可减少 public 网络流量负载、与后端 OSD 运维流量分流。

ini 复制代码
[global]
public network = 192.168.108.0/24
cluster network = 10.1.0.0/16

存储网络推荐配置 MTU 支持巨型帧(jumbo frame)以提升性能。


第 4 章 Ceph 池管理

4.1 Ceph 数据组织结构

复制代码
POOL(资源池)
  └── PG(Placement Group,放置组)
       └── OSD(对象存储设备)
            └── Object(对象)
  • POOL(池):Ceph 存储集群的逻辑分区,用于在通用名称标签下存储对象。每个池分配特定数量的 PG。
  • PG(Placement Group):构成 pool 的子集,一系列对象的集合,一个 PG 仅能属于一个 Pool。Ceph 将每个 PG 映射到一组 OSD。

PG 数量影响性能:

  • PG 过多:每个 PG 维护数据量过少,Ceph 占用大量 CPU 和内存计算;
  • PG 过少:单个 PG 存储数据多,移动 PG 占用大量带宽。

PG 数量原则(一般):

OSD 数量 PG 数量
OSD < 5 128
5 < OSD < 10 512
10 < OSD < 50 4096
OSD > 50 借助官方工具计算

4.2 映射对象到 OSD(CRUSH 算法)

复制代码
1. 客户端从 MON 获取最新的集群映射副本(不含对象位置)
2. 计算 PG ID:PG ID = hash(Object ID) % (PG number)
3. 使用 CRUSH 算法确定 PG 负责的 OSDs(Acting Set)
   - Acting Set 第一个 OSD 是主 OSD(primary),其余是辅助 OSD
4. 客户端直接与主 OSD 通信读写对象

Ceph 客户端自行计算对象存储位置,比通过组件交互查询快得多,因此数据读写时由客户端根据 CRUSH 完成位置计算。

4.3 Ceph 数据读写流程

读取流程:

复制代码
1. 客户端通过 MON 获取 cluster map
2. 客户端获取主 OSD 节点信息,向其发送读取请求
3. 主 OSD 将数据返回给客户端

写入流程(强一致性,分两次确认优化):

复制代码
1. 客户端通过 MON 获取 cluster map
2. 客户端向主 OSD 发送写入请求
3. 主 OSD 写入数据,并向两个备 OSD 发起写入指令
4. 备 OSD 写入后返回确认到主 OSD
5. 主 OSD 收到所有备 OSD 确认后,向客户端返回写入完成确认

优化:第一次所有数据写入 OSD 缓存后即向客户端确认;第二次所有数据从缓存写入磁盘后再确认,客户端据此删除本地数据。

4.4 数据保护(两种池类型)

池类型 原理 特点
复本池(replicated) 将对象复本到多个 OSD 需较多存储空间,冗余提高读取可用性
纠删代码池(erasure code) 奇偶校验计算 需较少存储空间和带宽,但占用较多 CPU

选择建议:

  • 不频繁访问、不需要低延迟的数据 → 纠删码池;
  • 频繁访问、需快速读取性能的数据 → 复本池。

⚠️ 池一旦创建完成,池的类型便无法更改。

4.5 创建池

创建复本池:

bash 复制代码
ceph osd pool create pool-name pg-num pgp-num replicated crush-rule-name

# 示例
ceph osd pool create mypool 128 128 replicated
ceph osd pool ls
ceph osd pool ls detail     # 查看池详情

创建纠删代码池:

bash 复制代码
# 创建纠删代码配置文件
ceph osd erasure-code-profile set ec-profile k=2 m=1 crush-failure-domain=osd

# 创建纠删池
ceph osd pool create ec-pool 128 128 erasure ec-profile

# 删除池
ceph osd pool delete mypool mypool --yes-i-really-really-mean-it

第 5 章 Ceph 认证和授权管理

5.1 cephx 协议

Ceph 存储使用 cephx 协议 管理集群认证。用户账户用途:

  • Ceph 守护进程之间的内部通信;
  • 客户端通过 librados 库访问集群;
  • 集群管理。

账户命名规则:

  • 守护进程账户与进程名匹配,如 osd.1、mgr.ceph1;
  • librados 客户端账户以 client. 前缀,如 client.openstack、client.rgw.hostname;
  • 超级用户账户 client.admin(访问所有内容、修改集群配置)。

5.2 密钥环文件(keyring)

Ceph 创建用户账户时,为每个账户生成密钥环文件验证身份,必须复制到客户端系统或应用服务器。

  • 默认位置:/etc/ceph/$cluster.$name.keyring(如 ceph.client.openstack.keyring);
  • 密钥环文件以纯文本存储机密密钥,需用适当 Linux 文件权限保护。

5.3 指定用户身份

bash 复制代码
# 用 --id(不带 client. 前缀)指定用户
ceph --id operator3 osd lspools

# 用 --name(需 client. 前缀)
ceph --name client.operator3 osd lspools

# 密钥环在默认位置则无需 --keyring
# 可设置环境变量
export CEPH_ARGS="--id laogao"

5.4 管理用户账户

bash 复制代码
# 列出所有用户账户
ceph auth list
ceph auth ls

# 获取特定账户详情
ceph auth get osd.0

# 获取密钥
ceph auth get-key client.operator3
ceph auth print-key client.operator3

# 创建用户(get-or-create)
ceph auth get-or-create client.rbd mon 'profile rbd' osd 'profile rbd' \
  -o /etc/ceph/ceph.client.rbd.keyring

5.5 cephx 协议通信原理

复制代码
1. client 向 MON 请求会话密钥(传递共享密钥)
2. MON 创建会话密钥,分享给 MDS 和 OSD
3. MON 使用共享密钥加密会话密钥返回给 client
4. client 解密获得会话密钥,用其向 MON 请求票据(ticket)
5. client 使用 ticket 与 MDS、OSD 交互,三者共享 MON 产生的密钥验证 ticket 合法性

第 6 章 Ceph 块存储管理(RBD)

6.1 Ceph RBD IO 流程

复制代码
1. 客户端创建 pool,指定 pg 数量
2. 创建 pool/image(rbd 设备)进行挂载
3. 用户写入的数据切块(每块默认 4M,名字为 object+序号)
4. 每个 object 通过 pg 进行副本位置分配
5. pg 根据 CRUSH 算法寻找 3 个 OSD 保存 object
6. OSD 底层磁盘格式化为 xfs 文件系统
7. object 存储为 rbd0.object1.file 文件

6.2 RBD 常用命令

命令 功能
rbd create 创建块设备映像
rbd ls 列出 rbd 存储池中的块设备
rbd info 查看块设备信息
rbd diff 统计 rbd 使用量
rbd map 映射块设备
rbd showmapped 查看已映射块设备
rbd remove 删除块设备
rbd resize 更改块设备大小

6.3 创建 RBD 镜像

bash 复制代码
# 1. 创建 rbd 池并初始化
ceph osd pool create images_pool
rbd pool init images_pool      # 等同于 ceph osd pool application enable images_pool rbd

# 2. 创建专用受限用户(仅授 RBD 池读写权限)
ceph auth get-or-create client.rbd mon 'profile rbd' osd 'profile rbd' \
  -o /etc/ceph/ceph.client.rbd.keyring

# 3. 创建 RBD 镜像
rbd create images_pool/webapp1 --size 1G

# 4. 查看
rbd ls images_pool
rbd pool stats images_pool
rbd info images_pool/webapp1

6.4 访问 RBD 块设备存储

访问方式:

  • KRBD:客户端 krbd 模块将 RBD 镜像映射为 Linux 块设备;
  • librbd 库:将 RBD 存储提供给 KVM 虚拟机和 OpenStack 云实例。

使用内核 RBD(KRBD)访问:

bash 复制代码
# 客户端安装 ceph-common
dnf install -y ceph-common

# 从 ceph1 复制配置文件和密钥环到客户端
scp /etc/ceph/ceph.conf root@client:/etc/ceph/
scp /etc/ceph/ceph.client.rbd.keyring root@client:/etc/ceph/

# 客户端列出镜像
rbd ls images_pool --id rbd

# 映射 RBD 镜像为 /dev/rbd0
rbd map images_pool/webapp1 --id rbd

# 查看已映射
rbd showmapped

# 格式化并挂载
mkfs.xfs /dev/rbd0
mkdir /mnt/rbd
mount /dev/rbd0 /mnt/rbd

第 7 章 Ceph 对象存储管理(RGW)

7.1 对象存储介绍

对象存储将数据存储为离散项(对象),每个对象具有唯一对象 ID。对象包含三部分:

部分 说明
Key(键) 对象名称,UTF-8 编码,长度 0~1024,桶内唯一
Metadata(元数据) 描述信息(Date、Content-length、ETag 等)
Data(数据) 文件数据内容

对象存储在**扁平的命名空间(桶 bucket / 容器 container)**中,无多层级目录结构。

特征: 接入灵活、访问协议简单(http/https)、访问网络不受限、结构扁平化。

7.2 RADOS 网关(RGW)

  • RADOS Gateway(对象网关 RGW)为客户端提供标准对象存储 API 访问 Ceph 集群;
  • Ceph 支持 Amazon S3 (称存储桶)和 OpenStack Swift(称容器)两种对象 API;
  • 守护进程 radosgw 基于 librados 库构建,提供 HTTP Web 服务接口。

RADOS 网关用户只能访问网关,不能像 cephx 用户一样直接访问存储集群。网关用户通过 RGW 认证后,网关再使用 cephx 凭据向存储集群认证。

RGW 默认创建的池: .rgw.root、.default.rgw.control、.default.rgw.meta、.default.rgw.log、.default.rgw.buckets.index、.default.rgw.buckets.data、.default.rgw.buckets.non-ec。

7.3 多站点 RGW 部署(区域概念)

  • 区域(zone):关联一个或多个 RADOS 网关;
  • 区域组(zone group):一个或多个区域集合,数据复制到组内所有区域;
  • 域(realm):所有对象和存储桶的全局命名空间,含一个或多个区域组;
  • 期间(period)/ 时期(epoch):跟踪域、区域组、区域的配置状态与版本。

创建用户等元数据更新操作必须在主区域进行。

7.4 使用 Amazon S3 API 客户端(aws CLI)

bash 复制代码
# 1. 安装 awscli(pip 方式,配置 aliyun 源)
mkdir .pip
cat > .pip/pip.conf << 'EOF'
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
pip3 install awscli

# 2. 配置 AWS CLI 凭据
aws configure
# AWS Access Key ID: 12345
# AWS Secret Access Key: 67890
# Default region name: (回车)
# Default output format: (回车)

# 3. 创建存储桶(bucket)
aws --endpoint-url http://192.168.108.11 s3 mb s3://webapp

# 4. 上传 / 下载对象
aws --endpoint-url http://192.168.108.11 s3 cp ./file4 s3://webapp/file4
aws --endpoint-url http://192.168.108.11 s3 ls s3://webapp

# 多配置凭据
aws configure --profile=ceph

7.5 Swift 客户端

bash 复制代码
# 安装 swift 客户端
pip3 install python-swiftclient

# 配置凭据(S3 和 Swift 共享)
# 创建容器
swift --auth-version 3 ...

第 8 章 Ceph 文件系统存储管理(CephFS)

8.1 介绍 CephFS

CephFS 是构建在 Ceph 存储之上、兼容 POSIX 的文件系统,作为 librados 的原生接口实施。

三种存储方式对比:

类型 特点
文件存储 带目录树层次结构,文件有名 + 元数据
块存储 大小相等区块,格式化或直接读写
对象存储 任意数据 + 元数据,扁平池,API 访问

8.2 元数据服务器(MDS)

MDS 负责:管理目录层次结构和文件元数据、访问客户端缓存并维护一致性。

两种运行模式:

  • 活动 MDS:负责管理 CephFS 元数据;
  • 备用 MDS:备份,活动 MDS 无响应时切换为活动模式。

CephFS 相关概念:

  • CephFS 卷:对应一个 CephFS 文件系统;
  • CephFS 子卷:对应文件系统子目录,可指定 UID/GID、文件模式、大小;
  • 配额 :通过 ceph.quota.max_bytes、ceph.quota.max_files 限制。

客户端访问 CephFS 流程:

复制代码
1. 客户端联系 MON 身份验证并检索集群映射
2. 客户端从集群映射获取活动 MDS 信息
3. 客户端向活动 MDS 索取文件元数据
4. 客户端直接与 OSD 通信,使用元数据访问文件/目录

8.3 部署 CephFS

部署方法:手动部署(步骤多可控)或卷部署(步骤少简单)。

手动部署流程:创建池 → 创建 CephFS → 部署 MDS

bash 复制代码
# 1. 创建数据池和元数据池
ceph osd pool create cephfs.cephfs1.data.1
ceph osd pool create cephfs.cephfs1.meta

# 元数据池设置更高复本级别
ceph osd pool set cephfs.cephfs1.meta size 3

# 2. 创建文件系统
ceph fs new cephfs1 cephfs.cephfs1.meta cephfs.cephfs1.data.1

# 添加数据池
ceph osd pool create cephfs.cephfs1.data.2
ceph fs add_data_pool cephfs1 cephfs.cephfs1.data.2

卷部署(推荐):

bash 复制代码
# 创建 CephFS 卷(部署三个 MDS 实例)
ceph fs volume create cephfs2 --placement="3 ceph1.laogao.cloud ceph2.laogao.cloud ceph3.laogao.cloud"

# 查看
ceph fs ls
ceph mds stat
ceph orch ls mds

# 删除
ceph fs volume rm cephfs2 --yes-i-really-mean-it

8.4 挂载 CephFS 文件系统

挂载方式:

  • Kernel 挂载:要求 Linux 内核 4+(RHEL 8+),不支持配额,速度较快;
  • FUSE 挂载:支持配额和 ACL。

CephFS 访问权限选项:

  • r:读取权限;
  • w:写入权限;
  • p:额外使用布局或配额;
  • s:额外创建快照。

授权用户:

bash 复制代码
# 示例1:允许对 / 文件夹具备读写、配额、快照权限
ceph fs authorize cephfs1 client.cephfs1-all-user / rwps \
  > /etc/ceph/ceph.client.cephfs1-all-user.keyring

# 示例2:允许读取 / 文件夹,/dir2 具备读写
ceph fs authorize cephfs1 client.cephfs1-restrict-user / r /dir2 rw \
  > /etc/ceph/ceph.client.cephfs1-restrict-user.keyring

客户端挂载准备:

bash 复制代码
# 客户端安装 ceph-common
dnf install -y ceph-common

# 复制配置和 keyring
scp /etc/ceph/ceph.conf root@client:/etc/ceph/
scp /etc/ceph/ceph.client.cephfs1-all-user.keyring root@client:/etc/ceph/

使用 Kernel 挂载:

bash 复制代码
# mount.ceph [src] [mount-point] -o ceph-options
mkdir /mnt/cephfs1
mount.ceph ceph1.laogao.cloud:/ /mnt/cephfs1 -o name=cephfs1-all-user,fs=cephfs1

# 验证
df -h /mnt/cephfs1
mkdir /mnt/cephfs1/dir1
echo Hello World > /mnt/cephfs1/dir1/welcome.txt

# 查看文件系统状态
ceph fs status
ceph df

总结

  1. 架构:Ceph 由 MON(集群状态)、OSD(数据)、MGR(管理)、MDS(元数据)四大组件构成,通过 RADOS + CRUSH 实现去中心化。
  2. 部署:官方推荐 cephadm(容器化)和 Rook(K8s),一条命令引导出单节点集群再扩容。
  3. 池管理:对象 → PG → OSD 三级映射,CRUSH 算法客户端自算位置;复本池重性能、纠删池省空间,池类型创建后不可更改。
  4. 认证:cephx 共享密钥协议,客户端 → MON 取会话密钥 → 取票据 → 与 OSD/MDS 交互。
  5. 三种存储:块(RBD,虚拟磁盘)、对象(RGW,兼容 S3/Swift)、文件(CephFS,POSIX),统一后端 RADOS。
  6. 统一存储:一个 Ceph 集群同时提供块、对象、文件三种存储服务,是私有云/OpenStack 的首选存储底座。

希望这份 Ceph 教程对你有帮助,欢迎点赞收藏,评论区交流~

相关推荐
acrel73 小时前
Acrel-1000系列分布式光伏监控系统在湖北荆门一马光彩大市场屋顶光伏发电项目中应用
分布式·光伏并网
程序 代码狂人3 小时前
金融数仓体系与核心业务知识详解
大数据·分布式·spark
java_nnnn5 小时前
Redis 初识:从单体架构到分布式架构的演进
redis·分布式·架构
Sayai6 小时前
Kafka 2.8→3.9.1 跨大版本升级实战:ZooKeeper 同步升级、数据目录迁移与回滚预案全流程
大数据·运维·分布式·zookeeper·kafka
敲上瘾6 小时前
分布式系统——Redis哨兵:自动故障转移与选举原理
linux·数据库·redis·分布式·缓存·微服务
微三云 - 廖会灵 (私域系统开发)21 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
她说可以呀1 天前
Docker 镜像的两种创建方式
java·分布式·docker
杭州领祺科技1 天前
分布式光伏『四可』接入改造:绿电直连场景下的二次系统通信与安全架构(27 号令 4 区落位 + 7 产品边界)
分布式·安全·安全架构·光伏·电力·绿电直连·二次系统