Ceph集群
1.Ceph简介
Ceph 独一无二地在一个统一的系统中同时提供了****对象、块、和文件存储功能。
CEPH 对象存储(S3,网盘,在线视频网站)
- REST 风格的接口
- 与 S3 和 Swift 兼容的 API
- S3 风格的子域
- 统一的 S3/Swift 命名空间
- 用户管理
- 利用率跟踪
- 条带化对象
- 云解决方案集成
- 多站点部署
- 灾难恢复
CEPH 块设备(SAN)
- 瘦接口支持
- 映像尺寸最大 16EB
- 条带化可定制
- 内存缓存
- 快照
- 写时复制克隆
- 支持内核级驱动
- 支持 KVM 和 libvirt
- 可作为云解决方案的后端
- 增量备份
CEPH 文件系统(挂载为一个目录)
- 与 POSIX 兼容的语义
- 元数据独立于数据
- 动态重均衡
- 子目录快照
- 可配置的条带化
- 有内核驱动支持
- 有用户空间驱动支持
- 可作为 NFS/CIFS 部署
- 可用于 Hadoop (取代 HDFS ) 在正式安装前,需完成以下准备过程:
2.Ceph概念
Ceph集群由几个组件组成:
Ceph OSD:Ceph OSD守护进程的功能是负责对数据进行处理(存储数据,处理数据的复制,恢复,回填,再均衡),并且守护进程之间相互监控,有主备确保容灾,将异常情况上报给monitor,吃多核性能 Monitor:Ceph Monitor维护着展示集群状态的各种图表。 MDS:Ceph MDS元数据服务器为Ceph文件系统存储元数据,让POSIX文件系统的用户们可以在不对Ceph存储集群造成负担的情况下对文件进行索引,吃cpu单核主频
Ceph集群存储原理: Ceph将客户端数据保存为存储池内的对象,用CRUSH算法算出哪个归置组(PG)应该持有指定的对象(Object),然后再进一步算出哪个OSD守护进程持有这个归置组(PG)。 归置组PG可以理解为一个容器,数据存储在这个篮子里面,再由这个篮子通过CRUSH算法去把数据分发到OSD上。 简而言之: 文件->切块的文件->Object->资源池(副本池/纠删码池)->归置组(PG)->OSD CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。
Pool 是 ceph 的一个逻辑概念 用于存放对象 不同 pool 之间相互隔离 PG 全称为 Placement groups 是构成 pool 的子集 也是一系列对象的集合 RADOS 的对象只能分布在一个 PG 中 一个 PG 仅能属于一个 Pool 。 PG 里的对象会被映射到不同的 OSD 上 客户端在保存对象时 ceph 会根据对象的名称进行 hash 然后使用 CRUSH 算法将其映射给 PG 当对象和 PG 的映射关系确定后 ceph 会根据集群的副本数 、 PG 及 CRUSH 规则来计算对象的所有副本与 OSD的对应关系 当集群中添加或删除 OSD 时 PG 会自动将对象重平衡到其他的 OSD 中
Ceph安装
1 配置主机名解析 (All Hosts Need)
** 每台主机设置主机名为对应hostname。**
2 关闭防火墙和 selinux
3 配置时间同步
4 下载安装 cephadm (ceph01 only)
5 配置 ceph 所需 yum 源 (ALL expect client)
7 安装官方推荐容器引擎
3.初始化Ceph
初始化ceph集群
在ceph管理容器中,生成集群公钥并拷贝到剩余主机
将主机添加到集群内
查看集群主机状态
关闭mon服务自动扩展功能
给ceph02,03添加" _admin"标签
将mon和mgr组件部署到指定节点
将所有主机上的硬盘添加为OSD
ceph orah apply 与ceph orah daemon的区别类似于k8s中对deployment(智能对象)和对pod(单个对象)进行操作。
常用操作
指定某个组件只在某些节点上运行
给某个节点打标签
驱逐某个节点并移除
资源池
资源池(Pool)是一种存放对象的逻辑概念,可设置为副本卷或者纠删卷,资源池可用于块存储、文件存储、对象存储。
创建使能一个资源池/删除一个资源池
查看资源池信息信息
设置资源池用途
设置资源池参数
使用rados对资源池进行简单操作
快照操作
用户管理
用户创建,赋权
Ceph对象存储实践
- Swift(兼容层):一种对象存储访问协议,Ceph RGW 可与其兼容。
- RGW:Ceph 对象存储的网关,实现对象存储服务,并支撑多站点功能。
- zone:多站点部署的基本单元,每个 zone 对应一个独立的 Ceph 集群/实例。
- zonegroup:管理一组 zone,区分不同地理区域或业务需求。
- realm:最高层次的逻辑域,统一管理多个 zonegroup 及其中的 zone。
Server-Side:创建对象存储网关
创建realm
创建zonegroup
创建zone
创建RGW
**创建rgw,一个zone里面的数量为2(因为上面的纠删规则就是k=2 m=1**
创建RGW用户
配额限制
对用户/对象数量限制
对桶/容量大小限制
Client-Side:
安装Swift
连接测试
桶操作
CephFs实践
Cephfs的资源池支持自动部署,但部署出来的资源池默认为副本池,具体命令为:
或者手动部署: 创建两个副本池data_cephfs和metadata_cephfs,其中data_cephfs用于存储数据,metadata_cephfs用于存储元数据
部署MDS
生成客户端密钥
debug命令
Ceph集群
1.Ceph简介
CEPH 对象存储(S3,网盘,在线视频网站)
CEPH 块设备(SAN)
CEPH 文件系统(挂载为一个目录)
2.Ceph概念
Ceph集群由几个组件组成:
Ceph OSD:Ceph OSD守护进程的功能是负责对数据进行处理(存储数据,处理数据的复制,恢复,回填,再均衡),并且守护进程之间相互监控,有主备确保容灾,将异常情况上报给monitor,吃多核性能Monitor:Ceph Monitor维护着展示集群状态的各种图表。MDS:Ceph MDS元数据服务器为Ceph文件系统存储元数据,让POSIX文件系统的用户们可以在不对Ceph存储集群造成负担的情况下对文件进行索引,吃cpu单核主频Ceph集群存储原理: Ceph将客户端数据保存为存储池内的对象,用CRUSH算法算出哪个归置组(PG)应该持有指定的对象(Object),然后再进一步算出哪个OSD守护进程持有这个归置组(PG)。 归置组PG可以理解为一个容器,数据存储在这个篮子里面,再由这个篮子通过CRUSH算法去把数据分发到OSD上。 简而言之: 文件->切块的文件->Object->资源池(副本池/纠删码池)->归置组(PG)->OSD CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。
Pool 是 ceph 的一个逻辑概念 用于存放对象 不同 pool 之间相互隔离 PG 全称为 Placement groups 是构成 pool 的子集 也是一系列对象的集合 RADOS 的对象只能分布在一个 PG 中 一个 PG 仅能属于一个 Pool 。 PG 里的对象会被映射到不同的 OSD 上 客户端在保存对象时 ceph 会根据对象的名称进行 hash 然后使用 CRUSH 算法将其映射给 PG 当对象和 PG 的映射关系确定后 ceph 会根据集群的副本数 、 PG 及 CRUSH 规则来计算对象的所有副本与 OSD的对应关系 当集群中添加或删除 OSD 时 PG 会自动将对象重平衡到其他的 OSD 中
Ceph安装
1 配置主机名解析 (All Hosts Need)
** 每台主机设置主机名为对应hostname。**
2 关闭防火墙和 selinux
3 配置时间同步
4 下载安装 cephadm (ceph01 only)
5 配置 ceph 所需 yum 源 (ALL expect client)
7 安装官方推荐容器引擎
3.初始化Ceph
初始化ceph集群
在ceph管理容器中,生成集群公钥并拷贝到剩余主机
将主机添加到集群内
查看集群主机状态
关闭mon服务自动扩展功能
给ceph02,03添加" _admin"标签
将mon和mgr组件部署到指定节点
将所有主机上的硬盘添加为OSD
ceph orah apply 与ceph orah daemon的区别类似于k8s中对deployment(智能对象)和对pod(单个对象)进行操作。
常用操作
指定某个组件只在某些节点上运行
ceph orch apply mon --placement '{"hosts": ["ceph01", "ceph03", "ceph04"]}' ceph orch apply mon --placement="label:_admin"给某个节点打标签
驱逐某个节点并移除
资源池
资源池(Pool)是一种存放对象的逻辑概念,可设置为副本卷或者纠删卷,资源池可用于块存储、文件存储、对象存储。
创建使能一个资源池/删除一个资源池
查看资源池信息信息
设置资源池用途
设置资源池参数
使用rados对资源池进行简单操作
快照操作
用户管理
用户创建,赋权
Ceph对象存储实践
Server-Side:创建对象存储网关
创建realm
[ceph: root@ceph01 /] radosgw-admin realm create --rgw-realm=for_swift --default { "id": "6239e155-772b-4ce5-a75f-d35129211dc7", "name": "for_swift", "current_period": "ab1e7c65-3728-4aba-9da1-1ee5d175792c", "epoch": 1 }创建zonegroup
[ceph: root@ceph01 /] radosgw-admin zonegroup create --rgw-realm=for_swift --rgw-zonegroup=for_swift --master --default { "id": "078cdda6-c68f-4391-bbb3-da56a4dd099d", "name": "for_swift", "api_name": "for_swift", "is_master": "true", "endpoints": [], "hostnames": [], "hostnames_s3website": [], "master_zone": "", "zones": [], "placement_targets": [], "default_placement": "", "realm_id": "6239e155-772b-4ce5-a75f-d35129211dc7", "sync_policy": { "groups": [] } }创建zone
[ceph: root@ceph01 /] radosgw-admin zone create --rgw-realm=for_swift --rgw-zonegroup=for_swift --rgw-zone=for_swift --master --default { "id": "a91e505b-35ff-4dd6-8c7e-0f9314a42695", "name": "for_swift", "domain_root": "for_swift.rgw.meta:root", "control_pool": "for_swift.rgw.control", "gc_pool": "for_swift.rgw.log:gc", "lc_pool": "for_swift.rgw.log:lc", "log_pool": "for_swift.rgw.log", "intent_log_pool": "for_swift.rgw.log:intent", "usage_log_pool": "for_swift.rgw.log:usage", "roles_pool": "for_swift.rgw.meta:roles", "reshard_pool": "for_swift.rgw.log:reshard", "user_keys_pool": "for_swift.rgw.meta:users.keys", "user_email_pool": "for_swift.rgw.meta:users.email", "user_swift_pool": "for_swift.rgw.meta:users.swift", "user_uid_pool": "for_swift.rgw.meta:users.uid", "otp_pool": "for_swift.rgw.otp", "system_key": { "access_key": "", "secret_key": "" }, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": "for_swift.rgw.buckets.index", "storage_classes": { "STANDARD": { "data_pool": "for_swift.rgw.buckets.data" } }, "data_extra_pool": "for_swift.rgw.buckets.non-ec", "index_type": 0 } } ], "realm_id": "6239e155-772b-4ce5-a75f-d35129211dc7", "notif_pool": "for_swift.rgw.log:notif" } 创建RGW
**创建rgw,一个zone里面的数量为2(因为上面的纠删规则就是k=2 m=1**
创建RGW用户
配额限制
对用户/对象数量限制
对桶/容量大小限制
Client-Side:
安装Swift
连接测试
桶操作
CephFs实践
Cephfs的资源池支持自动部署,但部署出来的资源池默认为副本池,具体命令为:
或者手动部署: 创建两个副本池data_cephfs和metadata_cephfs,其中data_cephfs用于存储数据,metadata_cephfs用于存储元数据
部署MDS
生成客户端密钥
debug命令