基础概念
集群存储:是将多台存储设备中的存储空间聚合成一个能够给应用服务器提供统一访问接口和管理界面的存储池,应用可以通过该访问接口透明地访问和利用所有存储设备上的磁盘,可以充分发挥存储设备的性能和磁盘利用率。数据将会按照一定的规则从多台存储设备上存储和读取,以获得更高的并发访问性能。
存储的类型
通过数据类型分类:
-
块存储(常见设备如硬盘、光盘、U盘,常见技术如ISCSI)
-
优点:
-
可用通过 Raid、LVM 等简单技术实现高可用
-
可独立使用
-
简单方便
-
-
缺点:
-
不利于在多台网络设备之间进行共享
-
不利于不同系统间的数据共享
-
-
-
文件存储(常见设备如Samba、FTP、NFS,常见技术如Apache、Nginx)
-
优点:
-
构建成本资金较低
-
可在不同主机之间共享存储
-
-
缺点:
-
读写效率低,传输效率慢
-
文件存储数据会被分为两部分:超级块,数据块
-
-
-
对象存储(常见设备如元数据——真实数据、真实数据,常见技术如分布式存储、云存储 CEPH、MooseFS、RHCS、ClusterFS)
-
优点:
-
读写效率高
-
可在不同主机之间共享存储
-
容器无限大:可以到 EB 级别
-
-
缺点:
-
造价昂贵
-
技术实现难度较高
-
对象存储则可以将数据的元数据信息单独存放到一台机器,然后将文件的真实数据内容存放到不同的机器。
-
-
通过网络拓扑分类:
-
DAS(Direct-Attached Storage 直接附加存储)
-
等同于存储设备通过数据线、光缆、SATA 直连主机
-
优点:
-
技术简单;
-
传输效率最高
-
-
缺点:
-
扩展容量有限(存储设备与主机相互绑定,不利于后期扩展与共享(服务器本身容易成为系统瓶颈));
-
数据备份复杂
-
-

-
NAS(Network Attached Storage 网络附加存储)
-
网络附加存储,通过网络在存储主机与使用主机之间传输数据
-
例如:NFS、Samba等软件实现的文件共享
-
优点
-
技术相对简单(不需要格式化成文件系统,就可以直接使用)
-
不要求存储设备直连本机(与 DAS 相比),只需在局域网下即可(FTP 是可以在公网中使用)
-
-
缺点:
-
存储速率较慢,容易受到网络上其他流量的影响,当网络上有其他大数据流量时会严重影响系统性能。因为搭建NAS是为了给多个人使用,这样就造成存储空间和网络宽带传输效率均会被平分。
-
存储数据通过普通数据网络传输,容易产生数据泄密等安全问题。 存储只能以文件方式访问,而不能像普通文件系统一样直接访问物理数据块,因此会在某些情况下严重影响系统效率,比如大型数据库就不能使用NAS。
-
不容易进行扩展。
-
-

-
SAN (Storage Area Network 存储区域网络)
-
存储区域网络,将生产网络与存储网络进行隔离,有效增加各部效率,减轻网络设备压力,适合大并发业务。
-
优点:
-
存储安全性较高
-
存储速率较高
-
-
缺点:
-
造价昂贵
-
-

DAS,NAS,SAN特性对比
| DAS | NAS | SAN | |
|---|---|---|---|
| 传输类型 | SCSI、FC | IP | FC |
| 数据类型 | 块级 | 文件级 | 块级 |
| 典型应用 | 任何 | 文件服务器 | 数据库应用 |
| 优点 | 易于理解兼容性好 | 易于安装成本低 | 高扩展性高性能高可用性 |
| 缺点 | 难以管理扩展性有限存储空间利用率不高 | 性能较低对某些应用不适合 | 比较昂贵配置复杂互操作性问题 |
如果网络拓扑和存储技术混合
——网络拓扑 + 存储技术(存储实现技术与网络存储之间的联系)
块存储 + DAS
结构描述: 块存储直连主机设备是最常见的存储方式,也是后边所有存储方式的基石。是标配,也是一般电脑和服务器使用最常见的方式。
结构拓扑

块存储 + NAS
结构描述: 将块设备通过局域网络共享至其它使用主机节点,提升空间利用率,便于后期扩展。
结构拓扑

传统方式:应用程序 → SCSI或者光纤驱动 → 主机控制器 → 光纤或者SCSI母线 → Storage存储设备。(传输的长度有限)
网络存储方式:应用程序 → SCSI驱动 → iSCSI驱动(互联网) → TCP协议 → 网卡驱动 → 网卡适配器 → IP网络 → Storage存储设备。
块存储 + SAN
结构描述: 将块设备通过局域网络共享至其它使用主机节点,提升空间利用率。并且将用户访问网络 与存储网络相隔离,利用提升存储效率以后后期维护扩展
结构拓扑

文件存储 + NAS
NFS:Network File System
结构描述: 利用共享服务将文件通过网络传输至使用设备,便于文件在多台机器之间的共享操作
结构拓扑

用的技术越简单,出现问题的几率就越小,出了问题的解决方法也比较简单。
对象存储 + SAN
MFS:MooseFS 驯鹿,RHCS:红帽集群套件,Ceph,GlusterFS。
结构描述: 利用分布式文件存储结构提升文件读写并发效率,并且将用户访问网络与存储网络相隔离, 利用提升存储效率以后后期维护扩展
结构拓扑

企业中是需要确定存储技术的选型和存储网络的选型,两者相结合。
传统存储方式核心问题总结
| 问题类型 | 核心表现 |
|---|---|
| 存储处理能力不足 | 硬盘 IO 性能有限(IDE 100 次 / 秒、SATA SSD 500 次 / 秒、NVMe SSD 2000-4000 次 / 秒),无法承载高峰期数十万级以上访问,且受主机网络 IO 限制 |
| 存储空间能力不足 | 单块磁盘容量提升有限,无法满足用户访问所需的数据容量需求 |
| 单点问题(SPOF) | 单主机存储存在单点故障风险,一旦主机故障,数据无法访问 |
主流对象存储解决方案对比
| 对比维度 | Ceph | GlusterFS | TFS(Tencent File System) | MinIO |
|---|---|---|---|---|
| 技术架构 | 分布式对象存储,采用 CRUSH 算法;含监视器、OSD、元数据服务器 | 分布式文件系统,基于卷架构;含管理节点 + 多个独立存储节点 | 分布式文件系统,采用多副本、数据条带化、智能分片算法 | 轻量级对象存储,兼容 S3 协议 |
| 性能 | 高性能 | 性能相对较弱(节点间通信开销大) | 高性能 | 适用于大容量非结构化数据存储 |
| 可用性 | 高可用性,支持自动化数据恢复 | 数据一致性和冗余机制简单,存在数据丢失 / 损坏风险 | 高可用性 | 稳定性较好,轻量易部署 |
| 可扩展性 | 高扩展性 | 扩展性一般 | 高扩展性 | 支持灵活扩展 |
| 核心特点 | 支持对象、块、文件多接口;集中式管理 | 易于部署和管理 | 适配大规模云存储、大数据分析;提供丰富 API 和工具 | 开源(Apache License V2.0);默认不计算 MD5;支持 Windows;含 Web 管理界面 |
| 适用场景 | 对性能、可用性、扩展性有高要求的场景 | 需简单分布式文件系统,对性能要求不高的场景 | 大规模云存储、大数据分析场景 | 存储图片 / 视频 / 日志等非结构化数据;需兼容 S3 协议的场景 |
Ceph集群搭建
-
cephadm:
-
Docker+Python3+LVM2+时间同步
-
-
192.168.221.21 server-21
-
192.168.221.22 server-22
-
192.168.221.23 server-23
Ubuntu22.04LTS基于cephadm快速部署Ceph Reef(18.2.X)集群
### 基础配置
Python 3
Systemd
Podman or Docker for running containers 使用Podman或Docker运行容器
Time synchronization (such as Chrony or the legacy ntpd) 时间同步
(例如Chrony或传统的ntpd)
LVM2 for provisioning storage devices 使用LVM2为存储设备进行资源分配
# 每台虚拟机要扩容一块磁盘(可以是120G)
# 提前安装好Python3和LVM2(Ubuntu自带,不用安装)
apt install python3 lvm2 -y
# 设置时区
timedatectl set-timezone Asia/Shanghai
ll /etc/localtime
# 安装docker环境
# 添加hosts文件解析(第一台)
cat >> /etc/hosts <<EOF
192.168.221.21 server-21
192.168.221.22 server-22
192.168.221.23 server-23
EOF
### 启动Ceph新集群
# 下载需要安装ceph版本的cephadm
CEPH_RELEASE=18.2.4
curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
# 将cephadm添加到PATH环境变量
mv cephadm /usr/local/bin/
chmod +x /usr/local/bin/cephadm
ls -l /usr/local/bin/cephadm
出现-rwxr-xr-x 1 root root 215316 Oct 22 09:48 /usr/local/bin/cephadm
# 创建新集群
cephadm bootstrap --mon-ip 192.168.221.21 --cluster-network 192.168.221.0/24 --allow-fqdn-hostname
-----------------------------------------------------------------
会出现Creating directory /etc/ceph for ceph.conf
......
Pulling container image quay.io/ceph/ceph:v18...
Ceph version: ceph version 18.2.7 (6b0e988052ec84cf2d4a54ff9bbbc5e720b621ad) reef (stable)
......
URL: https://ceph21:8443/
User: admin
Password: 6sqyn7e98w
......
-----------------------------------------------------------------
温馨提示:
- 1.此步骤会去官方下载镜像,我们可以将惊喜手动导入;
https://docs.ceph.com/en/latest/install/containers/#containers
- 2.注意观察输出信息,记录dashboard账号信息
###进入网页之后加入集群(在主节点操作)
# 1.安装ceph命令
apt install ceph-common
# 2.查看现有的集群主机列表
root@server-21:~# ceph orch host ls
HOST ADDR LABELS STATUS
server-21 192.168.221.21 _admin
1 hosts in cluster
# 3.把秘钥放到其他服务器上
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph22
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph23
# 4.将秘钥节点加入到集群
ceph orch host add server-22 192.168.221.22
ceph orch host add server-23 192.168.221.23
# 扩展:移除主机
ceph orch host rm ceph23 Removed host 'ceph23'
# 5.再次查看集群的主机列表
root@server-21:~# ceph orch host ls
HOST ADDR LABELS STATUS
server-21 192.168.221.21 _admin
server-22 192.168.221.22
server-23 192.168.221.23
3 hosts in cluster
### 添加OSD设备到ceph集群
# 1.添加OSD之前环境查看
# 1.1 查看集群可用的设备【每个设备想要加入到集群,则其大小不得小于5GB】
root@server-21:~# ceph orch device ls
HOST PATH TYPE DEVICE ID SIZE AVAILABLE REFRESHED REJECT REASONS
server-21 /dev/sr0 hdd VMware_Virtual_SATA_CDRW_Drive_01000000000000000001 1023M No 23m ago Failed to determine if device is BlueStore, Insufficient space (<5GB)
server-22 /dev/sr0 hdd VMware_Virtual_SATA_CDRW_Drive_01000000000000000001 1023M No 23m ago Failed to determine if device is BlueStore, Insufficient space (<5GB)
server-23 /dev/sr0 hdd VMware_Virtual_SATA_CDRW_Drive_01000000000000000001 1023M No 20m ago Failed to determine if device is BlueStore, Insufficient space (<5GB)
# 1.2 查看各节点的空闲设备信息
三台节点分别输入lsblk查看
lsblk
# 1.3 查看OSD列表
root@server-21:~# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0 root default
# 2.添加OSD设备到集群
# 2.1 添加server-21节点的设备到ceph集群(我没有sdc就不写这步了,具体要看lsblk里哪块磁盘是空的,根据实际写)
root@server-21:~# ceph orch daemon add osd server-21:/dev/sdb
Created osd(s) 0 on host 'server-21'
root@server-21:~# ceph orch daemon add osd server-22:/dev/sdb
Created osd(s) 1 on host 'server-22'
root@server-21:~# ceph orch daemon add osd server-23:/dev/sda
Created osd(s) 2 on host 'server-23'
# 备注:此步骤会在"/var/lib/ceph/<Ceph_Cluster_ID>/osd.<OSD_ID>/fsid"文件中记录对应ceph的OSD编号对应本地的磁盘设备标识。
# 2.2 查看集群的osd总容量大小
ceph osd tree
# 2.3 查看集群的大小
ceph -s
cluster:
id: 64563ad0-aee9-11f0-a8e0-a9683990e32e
health: HEALTH_WARN
clock skew detected on mon.server-22, mon.server-23
services:
mon: 3 daemons, quorum server-21,server-22,server-23 (age 31m)
mgr: server-21.uqqqlc(active, since 30m), standbys: server-22.dfvomb
osd: 3 osds: 3 up (since 2m), 3 in (since 2m)
data:
pools: 1 pools, 1 pgs
objects: 2 objects, 449 KiB
usage: 81 MiB used, 60 GiB / 60 GiB avail(说明集群大小总共60G)
pgs: 1 active+clean
### 测试集群的可用性(只在主节点操作)
# 1.创建存储池
ceph osd pool create MyPool
----------------------中间没懂,先不做---------------------------
# 创建RGW用户(获取访问密钥)
radosgw-admin user create --uid="myuser" --display-name="My User"
{
"user": "myuser",
"access_key": "EQDWEBG5XM32IQVBPGD2",
"secret_key": "FoCEAuwtTYMSjOZvH8kykUrihc8YfNEMnqALdVJn"
}
# 安装并配置s3cmd,用于操作对象存储
apt install s3cmd -y
# 在Ceph集群中执行命令部署RGW服务
ceph orch apply rgw myrgw --placement="server-21,server-22,server-23"
# 查看RGW服务的部署状态,待状态为running即表示部署成功
ceph orch ps --service_name rgw.myrgw
# 也可以简化为
ceph orch ps
# 待RGW服务启动后,创建一个RGW存储桶(关联你的存储池MyPool)
radosgw-admin bucket create --bucket=MyPool --pool=MyPool
s3cmd --configure
---------------------------------------------------------------
# 2.往存储池上传文件
rados -p MyPool put sys.txt /etc/os-release
# 3.查看存储池上传的文件
rados -p MyPool ls
# 4.查看存储池文件的状态信息
rados -p MyPool stat sys.txt
p1/sys.txt mtime 2024-08-25T09:49:58.000000+0800, size 386
# 5.查看PG的副本在哪些OSD上
ceph osd map MyPool sys.txt
# 不难发现,pg到三个副本分别在0,2,1
osdmap e43 pool 'MyPool' (3) object 'sys.txt' -> pg 3.486f5322 (3.2) -> up ([0,2,1], p0) acting ([0,2,1], p0)
# 6.存储池文件下载到本地
[root@ceph141 ~]# rados -p MyPool get sys.txt a.txt
[root@ceph141 ~]# ls
a.txt
[root@ceph141 ~]# cat a.txt
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
----------------------后面是删除的,也不做------------------------
# 7.删除文件
[root@ceph141 ~]# rados -p MyPool rm sys.txt
[root@ceph141 ~]# rados -p MyPool ls
[root@ceph141 ~]# ceph osd map MyPool sys.txt
# 删除文件后不难发现映射信息还在,那如何删除这些映射信息呢?那就等待。
osdmap e43 pool 'MyPool' (3) object 'sys.txt' -> pg 3.486f5322 (3.2) -> up ([0,2,1], p0) acting ([0,2,1], p0)
## 补充:删除池
# 临时开启删除池的权限(默认禁止)
ceph tell mon.* injectargs --mon-allow-pool-delete=true
# 执行删除命令
ceph osd pool delete MyPool MyPool --yes-i-really-really-mean-it
# 恢复删除限制(可选,增强安全性)
ceph tell mon.* injectargs --mon-allow-pool-delete=false
3273

被折叠的 条评论
为什么被折叠?



