Ceph介绍
Ceph 是一个能提供文件存储(cephfs)、块存储(rbd)和对象存储(rgw)的分布式存储系统,具有高扩展性、高性能、高可靠性等优点。Ceph 在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。
Ceph特点
- 高性能
-
摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
-
考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架等。
-
能够支持上千个存储节点的规模,支持TB到PB级的数据
-
- 高可用性
- 副本数可以灵活控制。
- 支持故障域分割,数据强一致性。
- 多重故障场景自动进行修复自愈。
- 没有单点故障,自动管理。
- 高可扩展性
- 去中心化。
- 扩展灵活。
- 随着节点增加而线性增长
- 特性丰富
- 支持三种存储接口:块存储、文件存储、对象存储
- 支持自定义接口,支持多种语言驱动
Ceph架构
核心组件
- 监视器:Ceph Monitor (Ceph -mon)维护集群状态的映射,包括监视器映射、管理器映射、OSD映射、MDS映射和CRUSH映射。这些映射是Ceph守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户机之间的身份验证。通常至少需要三个监视器来实现冗余和高可用性。
- 管理器:Ceph Manager守护进程(Ceph -mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于web的Ceph仪表盘和REST API。高可用性通常需要至少两个管理器。
- Ceph OSD: Ceph OSD(对象存储守护进程,Ceph - OSD)负责存储数据,处理数据复制、恢复、再平衡,并通过检查其他Ceph OSD进程是否有心跳,为Ceph monitor和manager提供一些监控信息。通常至少需要3个Ceph osd来实现冗余和高可用性。
- MDS: Ceph元数据服务器(MDS, Ceph - MDS)代表Ceph文件系统(即Ceph块设备和Ceph对象存储不使用MDS)存储元数据。Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls, find等),而不会给Ceph存储集群带来巨大的负担(对象存储和块存储不需要该组件)。
数据存储流程
环境准备
此处使用ceph-deploy工具安装ceph,ceph-deploy是一个集群自动化部署工具,基于ssh方式。
1、配置主机名解析
172.29.1.100 HL-1-100 172.29.1.101 HL-1-101 172.29.1.102 HL-1-102 |
2、配置yum源
mkdir /etc/yum.repos.d/repo_bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak #配置基础源信息 wget http://mirrors.aliyun.com/repo/Centos-7.repo -P /etc/yum.repos.d/ wget http://mirrors.aliyun.com/repo/epel-7.repo -P /etc/yum.repos.d/ #配置Ceph源 rpm -ivh https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm |
开始安装
以下安装步骤详情可见官网:https://docs.ceph.com/en/latest/man/8/ceph-deploy/
1、安装ceph-deploy
yum -y install ceph-deploy python-setuptools python-pip mkdir /etc/ceph && cd /etc/ceph #后续操作都在此目录进行,仅HL-1-101节点执行即可 |
2、初始化节点
ceph-deploy new --public-network 172.29.0.0/24 HL-1-100 HL-1-101 HL-1-102 |
3、安装Ceph集群
ceph-deploy能以远程的方式进入ceph集群各节点完成程序包的安装等操作,格式如下:
eg:ceph-deploy install HOST [HOST]
#此处选择在各节点执行相关安装命令 yum -y install ceph ceph-radosgw #此处也可使用如下方法,等待时间较长 ceph-deploy install --no-adjust-repos HL-1-100 HL-1-101 HL-1-102 |
4、配置初始化MON节点,并收集所有密钥
ceph-deploy mon create-initial |
5、把配置文件和admin密钥拷贝ceph集群各节点
ceph-deploy admin HL-1-100 HL-1-101 HL-1-102 |
6、创建manager节点
ceph-deploy mgr create HL-1-100 #添加多个mgr可以实现HA ceph-deploy mgr create HL-1-101 ceph-deploy mgr create HL-1-102 ceph -s #查看集群状态,health: HEALTH_OK |
以上集群状态异常时,相关解释参考官网:https://docs.ceph.com/en/latest/rados/operations/health-checks
RADOS集群添加OSD
1、列出ceph集群节点所有可用磁盘的相关信息:
ceph-deploy disk list HL-1-100 ceph-deploy disk list HL-1-101 ceph-deploy disk list HL-1-102 |
2、擦除磁盘,清除残留数据
ceph-deploy disk zap HL-1-100 /dev/sd{a,b,c,d,e,f,g,h,i,j} ceph-deploy disk zap HL-1-101 /dev/sd{a,b,c,d,e,f,g,h,i,j} ceph-deploy disk zap HL-1-102 /dev/sd{a,b,c,d,e,f,g,h,i,j} |
3、添加osd
ceph-deploy osd create HL-1-100 --data /dev/sd{a,b,c,d,e,f,g,h,i,j} ceph-deploy osd create HL-1-101 --data /dev/sd{a,b,c,d,e,f,g,h,i,j} ceph-deploy osd create HL-1-102 --data /dev/sd{a,b,c,d,e,f,g,h,i,j} |
5、扩展监视器节点
概述:Ceph存储集群需要至少运行一个Ceph Monitor和Ceph Mnager,为实现高可用,Ceph存储通常运行多个监视器,以免单个监视器节点整个集群崩溃。
ceph-deploy mon add HL-1-101 ceph-deploy mon add HL-1-102 |
删除osd
此处在每个节点各删除2个osd,挂载本地使用。
1、查看集群的osd磁盘状态
ceph osd tree |
2、先标记为out状态,标记后再次查看状态,可以发现权重置为0了,但状态还是up
ceph osd out osd.26 ceph osd tree |
3、在osd.26对应的节点停止ceph-osd服务,再rm删除
systemctl status ceph-osd@26.service systemctl stop ceph-osd@26.service ceph osd rm osd.26 |
4、crush算法中和auth验证中删除
ceph -s ceph osd crush remove osd.26 ceph auth del osd.26 |
5、在osd.26对应的节点上卸载
df -h |grep osd umount /var/lib/ceph/osd/ceph-26 |
6、在osd.26对应的节点上删除osd磁盘产生的逻辑卷
pvs vgs lvremove ceph-xxxxxxxxxxxxxxx |
块存储(RBD)
RBD介绍
RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。 块存储本质就是将裸磁盘或类似裸磁盘(lvm)设备映射给主机使用,主机可以对其进行格式化并存储和读取数据,块设备读取速度快但是不支持共享。 ceph可以通过内核模块和librbd库提供块设备支持。客户端可以通过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘一样,可以对其就行格式化然后使用;客户应用也可以通过librbd使用ceph块,典型的是云平台的块存储服务(如下图),云平台可以使用rbd作为云的存储后端提供映像存储、volume块或者客户的系统引导盘等。 |
1、创建存储池
存储池相关可参考:存储池(Pool)
eg:ceph osd pool create [pool_name] pg_num #创建 ceph osd pool create mypool 128 #查看当前集群有多少存储池 ceph osd lspools |
此处存在归置组(pg_num)的概念,大小设置参考:中文文档
2、创建映像
eg:rbd create --size {megabytes} {pool-name}/{image-name} #创建映像 rbd create mypool/test-image [--image-feature layering] --size 10G #查看当前存储池的映像 rbd list mypool #需指定pool_name #查看映像信息 rbd info mypool/test-image |
3、动态调整
#扩容 rbd resize --size 15G mypool/test-image #缩容 rbd resize --size 7G image --allow-shrink #查看映像大小信息 rbd info mypool/test-image |
4、通过KRBD访问(客户端使用)
#客户端安装ceph-common包 yum -y install ceph-common #传递集群密钥给客户端,客户端知道集群哪里如何连接 scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.admin.keyring node:/etc/ceph #将映像映射为本地磁盘 rbd map mypool/test-image lsblk /dev/rbd0 rbd showmapped #查看已经映射的映像 #格式化挂载使用 mkfs.ext4 /dev/rbd0 mount /dev/rbd0 /home |
5、其他操作
# 扩容操作 #blockdev --getsize64 /dev/rbd0 e2fsck -f /dev/rbd0 # 检查分区 resize2fs /dev/rbd0 # ext4格式 xfs_growfs /dev/rbd0 # xfs格式 # 客户端撤销磁盘映射 //语法格式 rbd unmap /dev/rbd/{poolname}/{imagename} rbd unmap /dev/rbd/mypool/test-image或rbd unmap /dev/rbd0 # 删除映像 rbd rm mypool/test-image #获取当前副本数 ceph osd pool get test-pool size #获取pool的配置值,比如获取当前pg_num ceph osd pool get test-pool pg_num #查看每个pool的详细信息 ceph osd pool ls detail |
6、开机自动挂载
1、写入块设备信息 cd /etc/ceph echo >> rbdmap <<EOF volumes/mysql-data1.img id=admin,keyring=/etc/ceph/ceph.client.admin.keyring EOF 2、写入开机挂载文件 /dev/rbd0 /data ext4 defaults,_netdev 0 0 3、启动rbdmap服务 systemctl status rbdmap && systemctl start rbdmap |
文件存储(CephFs)
CephFs介绍
Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本 (10.2.0) 是第一个包含稳定 CephFS 的 Ceph 版本. CephFS 需要至少一个元数据服务器 (Metadata Server - MDS) daemon (ceph-mds) 运行, MDS daemon 管理着与存储在 CephFS 上的文件相关的元数据, 并且协调着对 Ceph 存储系统的访问。 对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。 |
CephFs架构
底层是核心集群所依赖的, 包括:
- OSDs (ceph-osd): CephFS 的数据和元数据就存储在 OSDs 上
- MDS (ceph-mds): Metadata Servers, 管理着 CephFS 的元数据
- Mons (ceph-mon): Monitors 管理着集群 Map 的主副本
Ceph 存储集群的协议层是 Ceph 原生的 librados 库, 与核心集群交互.
1、安装元数据服务器
yum -y install ceph-mds ceph-deploy mds create node03 |
2、创建存储池和元数据存储池
ceph osd pool create cephfs_data 128 ceph osd pool create cephfs_metadata 128 |
3、创建文件系统
ceph fs new cephfs cephfs_metadata cephfs_data #查看fs ceph fs ls #查看msd服务器状态 ceph mds stat |
4、挂载cephfs(客户端节点)
mkdir /home mount -t ceph HL-1-100:6789,HL-1-101:6789,HL-1-102:6789:/ /home -o name=admin,secret=xxxxx |
5、B28挂载使用
mount -t ceph 172.29.1.100:6789,172.29.1.101:6789,172.29.1.102:6789:/ /es-snapshots/ -o name=cephfs,secret=AQDAZcxg+ZuIIxAAOeh7xhvrP97c2SM3FoJn1w== |
Troubleshooting指南
此处以官网讲解做常见故障处理及处理思路总结:
一、常见错误及处理
1、clock skew detected on mon.HL-1-101, mon.HL-1-102
处理:此报错为对应节点的时间不同步造成,可重新同步时间即可。eg: ntpdate ntp1.aliyun.com
2、Module 'dashboard' has failed: IOError("Port 8443 not free on ''",)
处理:端口冲突引起,将dashboard迁移至其它mgr节点。eg: ceph config set mgr mgr/dashboard/server_addr HL-1-101
3、rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable mypool/test-image object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
处理:rbd设备支持4种格式,但目前3.10仅支持layering格式的映像,所以在客户端使用挂载时会报此错误,其他格式的需关闭掉 rbd feature disable mypool/test-image object-map fast-diff deep-flatten或者在创建映像时就明确指定layering格式。
4、POOL_APP_NOT_ENABLED: application not enabled on 1 pool(s)
处理:使用ceph health detail查看具体报错信息,后明确pool为rbd或车cephfs类型的存储池,便于ceph管理识别
二、排查思路
1、rbd时客户端不能正常挂载使用
处理:可检查服务节点是否存在iptables相关规则限制,需放开相应限制
2、osd相关服务排查
日志:/var/log/ceph、存储空间、IO
数据恢复时可提升最大线程数:sysctl -w kernel.pid_max=4194303
nf_conntrack相关排查