- Ceph概述
- 部署Ceph集群
- Ceph存储使用
- Pod使用Ceph持久化数据
- Ceph监控
- Rook部署Ceph
1❖ Ceph概述
- Ceph介绍
- Ceph架构
- Ceph核心概念
Ceph介绍
Ceph是一个开源的分布式存储系统,具有高扩展性、高性能、高可靠性等特点,提
供良好的性能、可靠性和可扩展性。支持对象存储、块存储和文件系统。
是目前为云平台提供存储的理想方案。
Ceph架构
- RBD(RADOS Block Device):块存储接口
- RGW(RADOS Gateway)):对象存储网关,接口与S3和Swift兼容
- CephFS(Ceph File System):文件级存储接口
- RADOS(Reliable Autonomic Distributed Object Store):抽象的对象存储集群,Ceph核心,实现用户数据分配、故障转移等集群操作
- MON:集群状态维护,例如OSD是否健康、PG状态等
- MDS (Metadata Server) :CephFS服务依赖的元数据服务
- OSD(Object Storage Daemon):对象存储设备,主要存储数据
Ceph核心概念
- Pool:存储池,是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略;支持两种类型:副本(replicated)和 纠删码(Erasure Code)
- PG( placement group):放置策略组,对象的集合,该集合里的所有对象都具有相同的放置策略;简单点说就是相同PG内的对象都会放到相同的硬盘上; PG是ceph的核心概念, 服务端数据均衡和恢复的最小粒度;引入PG这一层其实是为了更好的分配数据和定位数据。
右边这张图描述了它们之间的关系:
- 一个Pool里有很多PG;
- 一个PG里包含一堆对象;一个对象只能属于一个PG;
- PG属于多个OSD,分布在不同的OSD上;
2❖ 部署Ceph集群
- Ceph版本选择
- 服务器配置建议
- Ceph集群部署规划
- 操作系统初始化配置
- Ceph集群部署
- Ceph集群服务管理
- Ceph集群常用管理命令
Ceph版本选择
Ceph目前最新版本16(P版),市面上应用最广泛的是12(L版)
参考:https://docs.ceph.com/en/latest/releases/
服务器配置建议
Ceph集群部署规划
- ceph-deploy:ceph集群部署节点,负责集群整体部署,这里复用node1节点,也可以单独找一台服务器作为部署节点。
- monitor:Ceph监视管理节点,承担Ceph集群重要的管理任务,负责集群状态维护,例如存储池副本数、PG状态、OSD数量等,至少部署1个,一般需要3或5个节点组建高可用。
- osd:Ceph存储节点,实际负责数据存储的节点,集群中至少有3个OSD,不少于默认副本数,每个OSD对应一块硬盘。
操作系统初始化配置
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久,重启生效
setenforce 0 # 临时
# 关闭swap(可选)
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久,重启生效
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在node添加hosts
cat >> /etc/hosts << EOF
192.168.31.71 ceph-node01
192.168.31.72 ceph-node02
192.168.31.73 ceph-node03
EOF# 设置文件描述符
ulimit -SHn 65535
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
# 配置SSH免交互认证
ssh-keygen -t rsa
ssh-copy-id root@ceph-node01
ssh-copy-id root@ceph-node02
ssh-copy-id root@ceph-node03
Ceph集群部署
Ceph集群部署方式:
14(N)版本及之前:
- yum:常规的部署方式
- ceph-deploy:ceph提供的简易部署工具,可以非常方便部署ceph集群。
- ceph-ansible:官方基于ansible写的自动化部署工具
14(N)版本之后:
- cephadm:使用容器部署和管理Ceph集群,需要先部署Docker或者Podman和Python3
- rook:在Kubernetes中部署和管理Ceph集群
Ceph集群部署步骤:
- 配置阿里云yum仓库
- 安装ceph-deploy工具
- 创建集群
- 安装Ceph
- 部署Monitor服务
- 部署OSD服务并添加硬盘
- 部署MGR服务
1、配置阿里云yum仓库
cat > /etc/yum.repos.d/ceph.repo << EOF
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/\$basearch
gpgcheck=0
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
gpgcheck=0
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
gpgcheck=0
EOF
2、安装ceph-deploy工具
yum -y install ceph-deploy
3、创建集群
创建一个my-cluster目录,所有命令在此目录下进行:
mkdir my-cluster
cd my-cluster
# 创建一个Ceph集群
ceph-deploy new ceph-node01 ceph-node02 ceph-node03
4、安装Ceph
安装Ceph包到指定节点:
ceph-deploy install --no-adjust-repos ceph-node01 ceph-node02 ceph-node03
注:–no-adjust-repos参数是直接使用本地源,不使用官方默认源。
5、部署Monitor服务
初始化并部署monitor,收集所有密钥:
ceph-deploy mon create-initial
使用ceph-deploy命令将配置文件和 admin key复制到管理节点和Ceph节点,以便每次执行ceph CLI命令无需
指定monitor地址和 ceph.client.admin.keyring。
ceph-deploy admin ceph-node01 ceph-node02 ceph-node03
6、部署OSD服务并添加硬盘
创建6个OSD,分别对应每个节点未使用的硬盘:
ceph-deploy osd create --data /dev/sdb ceph-node01
ceph-deploy osd create --data /dev/sdc ceph-node01
ceph-deploy osd create --data /dev/sdb ceph-node02
ceph-deploy osd create --data /dev/sdc ceph-node02
ceph-deploy osd create --data /dev/sdb ceph-node03
ceph-deploy osd create --data /dev/sdc ceph-node03
7、部署MGR服务
ceph-deploy mgr create ceph-node01 ceph-node02 ceph-node03
注:MGR是Ceph L版本新增加的组件,主要作用是分担和扩展monitor的部分功能,减轻monitor的负担。
建议每台monitor节点都部署一个mgr,以实现相同级别的高可用。
查看Ceph集群状态:
ceph -s
查看Ceph版本:
ceph -v
日志目录:/var/log/ceph
Ceph集群服务管理
1、启动所有守护进程
# systemctl restart ceph.target
2、按类型启动守护进程
# systemctl restart ceph-osd@id
# systemctl restart ceph-osd.target
# systemctl restart ceph-mon.target
# systemctl restart ceph-mgr.target
Ceph集群常用管理命令
3❖ Ceph存储使用
- 三种存储类型介绍
- RBD块存储
- CephFS文件存储
三种存储类型介绍
- 块存储(RBD)
优点:存储速度较快
缺点:不支持共享存储
应用场景:虚拟机硬盘
典型设备:硬盘、Raid
- 文件存储(CephFS)
优点:支持共享存储
缺点:读写速度较慢(需要经过操作系统处理再转为块存储)
应用场景:文件共享,多台服务器共享使用同一个存储
典型设备:FTP、NFS
- 对象存储(Object)
优点:具备块存储的读写性能和文件存储的共享特性
缺点:操作系统不能直接访问,只能通过应用程序级别的API访问
应用场景:图片存储,视频存储
典型设备:阿里云OSS,腾讯云COS
RBD块存储:RBD工作流程
1、客户端创建一个pool,并指定pg数量,创建rbd设备并挂载到文件系统;
2、用户写入数据,ceph进行对数据切块,每个块的大小默认为4M,每个块名
字是object+序号;
3、将每个object通过pg进行副本位置的分配;
4、pg根据crush算法会寻找3个osd,把这object分别保存在这3个osd上存储;
5、osd实际把硬盘格式化为xfs文件系统,object存储在这个文件系统就相当
于存储了一个文件rbd0.object1.file。
RBD块存储:常用管理命令
RBD块存储:RBD创建并使用
1、创建存储池
ceph osd pool create rbd-pool 128 # 格式:ceph osd pool create <pool-name> <pg-num>
ceph osd pool ls
2、指定存储池使用存储类型
ceph osd pool application enable rbd-pool rbd
3、创建一个10G的块设备
rbd create --size 10240 rbd-pool/image01 # 格式:rbd create --size {megabytes} {pool-name}/{image-name}
4、查看块设备
rbd ls -l rbd-pool
rbd info rbd-pool/image01
RBD块存储:RBD创建并使用
节点本地挂载使用块设备:
1、映射
rbd map rbd-pool/image01
2、格式化块设备
mkfs.xfs /dev/rbd0
3、挂载
mount /dev/rbd0 /mnt
4、取消挂载和内核映射
umount /mnt
rbd unmap rbd-pool/image01
远程挂载使用块设备:
1、拷贝配置文件和秘钥
cd my-cluster/
scp ceph.conf root@192.168.31.74:/etc/ceph
scp ceph.client.admin.keyring root@192.168.31.74:/etc/ceph
2、安装Ceph客户端
yum install epel-release -y
yum -y install ceph-common
3、剩余操作就与左侧一样了
RBD块存储:快照
快照:在某个时间点的副本,当系统出现问题,可以通过恢复快照恢复之前副本状态。
1、创建快照
rbd snap create rbd-pool/image01@snap01
2、查看快照
rbd snap list image01
rbd snap ls rbd/image01
rbd ls –l
3、还原快照
rbd snap rollback rbd-pool/image01@snap01
注:还原快照前需先取消挂载和内核映射,否则会出错
4、重新映射并挂载验证
rbd map rbd-pool/image01
mount /dev/rbd0 /mnt/
5、删除快照
rbd snap rm rbd-pool/image01@snap01
RBD块存储:克隆
克隆:基于指定的块设备克隆出相同的一份出来
1、创建一个块设备
rbd create --size 10240 rbd-pool/image02
2、创建快照
rbd snap create rbd-pool/image02@snap01
3、设置快照处于被保护状态
rbd snap protect rbd-pool/image02@snap01
4、通过快照克隆一个新块设备
rbd clone rbd-pool/image02@snap01 rbd-pool/image02_clone
rbd info image02_clone
5、就可以按照前面方式使用这个新克隆的块设备了
6、目前克隆的块设备依赖于父块设备,也可以将其独立于父块设备
rbd flatten rbd-pool/image02_clone
CephFS文件系统
CephFS 是一个基于 ceph 集群且兼容POSIX标准的文件系统。
创建 cephfs 文件系统时需要在 ceph 集群中添加 mds 服务,该服务
负责处理 POSIX 文件系统中的 metadata 部分,实际的数据部分交由
ceph 集群中的OSD处理。
CephFS文件存储:部署MDS服务
部署MDS实例:
ceph-deploy mds create ceph-node01 ceph-node02 ceph-node03
ceph mds stat # 查看MDS节点状态
CephFS文件系统:创建文件系统
1、创建存储池
ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
ceph fs ls
2、创建文件系统
ceph fs new cephfs cephfs_metadata cephfs_data # 格式:ceph fs new <fs_name> <metadata> <data>
ceph fs ls #查看创建后的cephfs