Ceph介绍及安装
- 一、Ceph介绍
- 二、部署Ceph集群
- 2.1 部署方式:
- 2.2 服务器准备
- 2.3 部署环境
- **2.3.1、四台服务器作为ceph集群osd存储服务器,每台服务器支持两个网络,`public`网络针对客户端访问,`cluster`网络用于集群管理及数据同步,每台三块或以上的磁盘**
- **2.3.2、三台服务器作为ceph集群的`Mon`监视服务器,每台服务器可以和`ceph`集群的`cluster`网络通信**
- **2.3.3、两个`ceph-mgr`管理服务器,可以和ceph集群的`cluster`网络通信**
- **2.3.4、一个服务器用于部署ceph集群,即安装`ceph-deploy`,也可以和`ceph-mgr`等复用**
- **2.3.5、创建一个普通用户。能够通过sudo执行特权命令,配置主机名解析,ceph集群部署过程中需要对个主机配置不同的主机名,另外如果是centos系统则需要关闭各服务器的防火墙和selinux**
- **2.3.6、网络环境:**
- 2.4 部署RADOS集群
- 2.4.1 仓库准备
- 2.4.2 创建ceph集群部署用户cephadmin
- 2.4.3 配置主机名解析
- 2.4.4 安装ceph部署工具
- 2.4.5 初始化mon节点
- 2.4.6 初始化ceph存储节点
- 2.4.7 安装Ceph-mon 服务
- 2.4.8 验证mon节点
- 2.4.9 分发admin密钥
- 2.4.10 ceph node节点验证密钥
- 2.4.11 部署ceph-mgr节点
- 2.4.12 验证ceph-mgr节点
- 2.4.13 ceph-deploy管理ceph集群
- 2.4.14 测试ceph命令
- 2.4.15 初始化存储节点
- 2.4.16 添加OSD
- 2.4.17 验证ceph集群
- 2.4.18 从RADOS移出OSD
- 2.4.19 测试上传与下载数据
- 2.5 扩展ceph集群实现高可用
一、Ceph介绍
1.1 ceph说明
Ceph可用于为云平台提供Ceph对象存储、块存储、文件系统存储。所有Ceph存储集群部署都从设置每个Ceph节点开始,然后设置网络
不同存储的介绍
使用场景:
块存储
:在使用的时候需要格式化为指定的文件系统,然后挂载使用,其对操作系统的兼容性相对比较好(可以格式化为操作系统支持的文件系统),挂载的时候通常是每个服务单独分配独立的块存储,即各服务的块存储是独立且不共享使用的,如Redis
的master
和slave
的块存储是独立的、zookeeper
各节点的块存储是独立的、Mysql
的master
和slave
的块存储是独立的、也可以用于私有云与公有云的虚拟机的系统盘和云盘等场景,上面的场景适合使用块存储。cephFS
:对于需要再多个主机实现数据共享的场景,比如多个nginx读取由多个tomcat写入到存储的数据,可以使用cephFS对象存储
:而对于数据不会经常变化、删除和修改的场景,如短视频、APP下载等,可以使用对象存储
Ceph存储集群需要以下内容:至少一个Ceph Monitor
和至少一个Ceph Manager
,以及至少与Ceph集群中存储的给定对象的副本一样多的Ceph对象存储守护进程(OSD)(例如,如果给定对象的三个副本存储在Ceph集群中,则该Ceph集群中必须至少存在三个OSD)
Ceph支持EB(1EB=1000000000GB)级别的数据存储,ceph吧每一个待管理的数据流(文件等数据)切分为一到多个固定大小(默认4m)的对象数据,并以其为原子单元(原子是构成元素的最小单元)完成数据的读写
Ceph的底层存储服务是由多个存储主机(host)组成的存储集群,该集群也被称之为RADOS(reliable automatic distributed object store)存储集群,即可靠的、自动化的、分布式的对象存储系统。
librados是RADOS存储集群的API,支持C/C++/JAVA/python/ruby/php/go等编程语言的客户端。
Librados、radosgw、rbd、cephfs
统称为Ceph客户端接口。RADOSGW、RBD、Ceph FS
是基于 LIBRADOS
提供的多编程语言接口开发的
1.2 Ceph架构
ceph组成分为Mon、Mgr、OSD、MDS、RGW、管理节点等
monitor
:Ceph监视器(ceph-mon)维护集群状态,包括监视器、管理器、OSD、MDS和CRUSH
。这些是ceph守护进程相互协调所需的关键组件。监视器还负责管理守护进程和客户端之间的身份验证。通常至少需要三个监视器
来实现冗余和高可用。- 主要作用:
- 维护集群状态、包括存储节点、池、用户等信息
- 负责集群的配置管理和分发
- 提供认证服务,确保客户端和守护进程的连接安全
- 原理:
- Ceph Mon 使用Paxos分布式算法来保证数据的一致性和高可用性。多个监视器节点组成一个Quorum(法定人数),确保在监视器节点故障时仍然可以提供一致性的集群状态。
- 主要作用:
mgr
:Ceph管理器(ceph-mgr
)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph管理器守护进程还托管基于Python的模块来管理和公开Ceph集群信息,包括基于Web的Ceph的dashboard和REST API
。通常至少需要两个管理器才能实现高可用性。(官方推荐每个mon配置一个Ceph mgr是最佳做法)- 原理: 通过插件机制扩展功能,可以执行各种管理任务,如集群状态监控、图形化页面支持等。它从Mon获取集群状态信息,并通过RESTful API提供管理接口。
Ceph OSD
:对象存储守护进程(Ceph OSD)存储数据、处理数据复制、恢复、重新平衡,并通过检查其他Ceph OSD守护进程的心跳向Ceph OSD守护进程向Ceph监视器和管理器提供一些监视信息。通常至少需要3个OSD
实现冗余和高可用性。- 原理:每个OSD守护进程管理一个存储设备(通常是一个硬盘或ssd)。OSD使用CRUSH算法确定数据的存储位置,从而避免了中心化的元数据原理,提升了系统的可扩展性。
MDS
:Ceph元数据服务器(ceph-mds)
存储Ceph文件系统的元数据。Ceph元数据服务器允许CephFS用户运行基础命令(如ls、find等),而不会给Ceph存储集群带来负担。- 元数据:指描述数据的数据,例如文件的路径、大小、创建时间、修改时间、权限等
- 文件系统操作:MDS 处理文件系统操作请求,例如创建、删除、重命名文件或目录,修改权限等。这些操作涉及到对元数据的读取和修改
- 缓存和优化:MDS 可以缓存频繁访问的元数据,以提高访问速度。它还会优化元数据的分布和存储,以提高文件系统的性能和可扩展性。
RGW
:提供对象存储服务,兼容Amazon S3
和OpenStack Swift API
,支持多租户和与Ceph集成的认证和授权机制。- 原理:RGW充当一个HTTP服务器,处理客户端的RESTful请求,它将这些请求转换为
RADOS
操作,从而利用Ceph的分布式存储特性来提供高可用性和高性能的对象存储服务。
- 原理:RGW充当一个HTTP服务器,处理客户端的RESTful请求,它将这些请求转换为
管理节点
:ceph的常用管理接口是一组命令行工具,例如rados、ceph、rbd等命令,ceph管理员可以从某个特定的mon节点执行管理操作。推荐使用部署专用的管理节点对ceph进行配置管理、升级与后期维护,方便后期权限管理,管理节点的权限只对管理人员开放,可以避免一些不必要的误操作的发生。
Ceph将数据作为对象存储在逻辑存储池中。使用CRUSH
算法,Ceph计算哪个PG应包含该对象,以及那个OSD应存储该放置组。CRUSH算法是Ceph存储集群能够动态扩展、重新平衡和恢复
1.3 Ceph逻辑组织架构
1.3.1 Pool
Pool是Ceph中的逻辑存储空间,用于管理和隔离数据。一个Pool可以包含多个PG(Placement Group)
并且可以有不同的配置参数,如副本数量、数据分布策略等。
Pool的作用:
- 数据隔离:可以为不同的应用或用户创建不同的Pool,实现数据的隔离和独立管理(类似k8s中的
namespace
) - 策略管理:不同的Pool可以有不同的复制策略、存储策略等,以满足不同的需求。
- 资源控制:通过Pool可以限制每个应用或用户的存储资源,避免资源争用情况。
1.3.2 PG
PG(Placement Group)
是Ceph用于将对象分配到OSD的逻辑分组。每个PG可以存储多个对象,PG的数量是固定的,但可以动态映射到OSD上。
作用:
- 简化数据分布:通过将对象分配到PG,再将PG映射到OSD,简化了数据管理。
- 提高扩展性:通过动态映射PG到OSD,可以实现高效的扩展和负载均衡。
- 高可用性:PG有多个副本,分布在不同的OSD上,确保数据的高可用性。
1.3.3 PGP
PGP(Placement Group for Placement)
是进一步的细化概念,用于优化数据分布和负载均衡。PGP数量可以独立于PG进行调整,一般和PG数量保持一致。
作用:
- 优化数据分布:通过调整PGP数量,可以实现更均衡的数据分布。
- 渐进式扩展:当增加或减少OSD时,可以通过调整PGP数量实现平滑的扩展。
Ceph集群部署完成之后,要先创建存储池并指定PG数量,才能向Ceph写入数据,文件在向Ceph保存之前要先进行一致性Hash计算,计算好后会把文件保存在某个对应的PG上,此文件一定属于某个pool的一个PG,再通过PG保存在OSD上,数据对象在写到主OSD之后,再同步到从OSD以实现数据的高可用
Ceph数据写入详细过程:
- 通过Ceph客户端(例如librados)发送一个写请求到Ceph集群
- 对象到PG的映射:
- 使用哈希函数将对象映射到一个特定的PG。
- 哈希值由对象名和Pool ID计算得出
- PG到OSD的映射:
- 使用CRUSH 算法将PG映射到几个OSD节点上。这些OSD节点组成一个副本集(称为PG副本)
- CRUSH 算法考虑了集群拓扑结构、OSD容量和当前状态等因素,动态计算出数据的存储位置。
- 写请求到主OSD:
- 写请求首先发送到PG副本集中的主OSD(Primary OSD)
- 主OSD 是通过CRUSH算法确定的,它负责协调写入操作
- 主OSD的处理:
- 主OSD接受到请求后,会将写请求转发到副本集中的其他OSD(称为次要OSD ,Secondary OSD)
- 主OSD会生成一个事务,将写操作的细节,包括数据和元数据,封装成一个事务。
- 事务传播:
- 主OSD将事务发送到次要OSD
- 次要OSD接受到事务后,会将数据写入其本地存储,并准备提交事务
7. 确认机制:
- 次要OSD成功写入数据后,会发送确认消息(ACK)给主OSD
- 主OSD在接受到所有次要OSD的确认消息后才会将事务标记为提交成功,然后会返回确认消息给客户端表示此次写操作完成。
Ceph对象数据的元数据以key-value的形式存在,在RADOS中有两种实现:xattrs和omap
Ceph可选后端支持多种存储引擎,比如filestore,bluestore,kvstore,memstore,ceph使用bluestore存储对象数据的元数据信息。
xattrs(扩展属性): 是将元数据保存在对象对应文件的扩展属性中并保存到系统磁盘上,这要求支持对象存储的本地文件系统(一般是XFS)支持扩展属性。
omap: 是object map的简称,是将元数据保存在本地文件系统之外的独立 key-value存储系统中,在使用filestore 时是leveldb,在使用bluestore时是rocksdb,由于filestore存在功能问题(需要将磁盘格式化为XFS格式)及元数据高可用问题等,因此在目前ceph使用bluestore
二、部署Ceph集群
github:https://github.com/ceph/ceph
历史版本: https://docs.ceph.com/en/latest/releases/index.html
Ceph 15 版本以后不再支持centos7 系统
2.1 部署方式:
ceph-ansible
:https://github.com/ceph/ceph-ansible #python
ceph-salt
:https://github.com/ceph/ceph-salt #python
ceph-container
:https://github.com/ceph/ceph-container #shell
ceph-chef
:https://github.com/ceph/ceph-chef #Ruby
cephadm
: https://docs.ceph.com/en/latest/cephadm/ #ceph 官方在 ceph 15 版本加入的Ceph部署工具
rook-ceph
: https://rook.io/docs/rook/v1.14/Getting-Started/quickstart/#prerequisites # 也可以看我这篇文章
ceph-deploy
:https://github.com/ceph/ceph-deploy #python
是一个ceph官方维护的基于ceph-deploy命令行部署ceph集群的工具,基于ssh执行可以sudo权限的shell命令以及一些python脚本实现ceph集群的部署和管理维护
Ceph-deploy 只用于部署和管理 ceph 集群,客户端需要访问 ceph,需要部署客户端工具。
2.2 服务器准备
官网推荐硬件:
https://docs.ceph.com/en/reef/start/hardware-recommendations/
硬件要求和建议
monitor、mgr、radosgw
:
4C 8G~16G(小型,专用虚拟机)、8C 16G~32G(中型,专用虚拟机)、16C ~32C 32G~64G(大型/超大型,专用物理机)
MDS
(相对配置更高一个等级)
8C 8G~16G(小型,专用虚拟机)、16C 16G~32G(中型,专用虚拟机)、32C ~64C 64G~96G(大型、超大型,物理机)
OSD节点 CPU
:
每个 OSD 进程至少有一个 CPU 核心或以上,比如服务器一共 2 颗 CPU 每个 12 核心 24线程,那么服务器总计有 48 核心 CPU,这样最多最多最多可以放 48 块磁盘。(物理 CPU 数量每颗 CPU 核心) / OSD 磁盘数量 = X/每 OSD CPU 核心 >= 1 核心 CPU
比如:(2 颗每颗 24 核心) / 24 OSD 磁盘数量= 2/每 OSD CPU 核心 >= 1 核心 CPU
OSD 节点内存
:
OSD 硬盘空间在 2T 或以内的时候每个硬盘 2G 内存,4T 的空间每个 OSD 磁盘 4G 内存,即大约每 1T 的磁盘空间(最少)分配 1G 的内存空间做数据读写缓存。
(总内存/OSD 磁盘总空间)= X > 1G 内存
比如: (总内存 128G/36T 磁盘总空间 )= 3G/每 T > 1G 内存
Ceph OSD 要以下条件:
1、目标磁盘不能有任何磁盘分区(例如不能有 sdb1/sdc2
)。
2、目标磁盘不能有基于 PV/LV
创建的 LVM
。
3、目标磁盘不能被挂载到当前文件系统的任何目录。
4、目标磁盘不能包含文件系统(例如不能包含 ext4/xfs
)。
5、目标磁盘不能包含 Ceph BlueStore OSD
,会对磁盘进行全部擦除。
6、目标磁盘大小必须大于 5GB,Ceph 会自动为小于 5GB 的磁盘指定权重 0。
2.3 部署环境
我这是测试环境,所以配置都相对较低(8c16g
),生产环境需要按照自己公司需求来定,每台服务器时间必须一致
2.3.1、四台服务器作为ceph集群osd存储服务器,每台服务器支持两个网络,public
网络针对客户端访问,cluster
网络用于集群管理及数据同步,每台三块或以上的磁盘
# 31段是public网络,91段是cluster网络
192.168.31.56/192.168.91.56
192.168.31.57/192.168.91.57
192.168.31.58/192.168.91.58
192.168.31.59/192.168.91.59
各存储服务器磁盘划分
/dev/nvme0n1
/dev/nvme0n2
/dev/nvme0n3
/dev/nvme0n4
各200G
2.3.2、三台服务器作为ceph集群的Mon
监视服务器,每台服务器可以和ceph
集群的cluster
网络通信
192.168.31.51/192.168.91.51
192.168.31.52/192.168.91.52
192.168.31.53/192.168.91.53
2.3.3、两个ceph-mgr
管理服务器,可以和ceph集群的cluster
网络通信
192.168.31.54/192.168.91.54
192.168.31.55/192.168.91.55
2.3.4、一个服务器用于部署ceph集群,即安装ceph-deploy
,也可以和ceph-mgr
等复用
192.168.31.50/192.168.91.50
2.3.5、创建一个普通用户。能够通过sudo执行特权命令,配置主机名解析,ceph集群部署过程中需要对个主机配置不同的主机名,另外如果是centos系统则需要关闭各服务器的防火墙和selinux
2.3.6、网络环境:
https://docs.ceph.com/en/latest/rados/configuration/network-config-ref/#cluster-network
2.4 部署RADOS集群
https://mirrors.aliyun.com/ceph/ #阿里云镜像仓库
http://mirrors.163.com/ceph/ #网易镜像仓库
https://mirrors.tuna.tsinghua.edu.cn/ceph/ #清华大学镜像源
2.4.1 仓库准备
各节点配置ceph yum仓库:
导入key文件:
#支持 https 镜像仓库源:
apt install -y apt-transport-https ca-certificates curl software-properties-common
#导入 key:
wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
Ubuntu 18.04.x/20.04.x/22.04.x:
18.04: bionic
~# cat /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe
multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe
multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe
multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main
# echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list #pacific 代表 16 版本的 ceph
20.04: focal
# echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-quincy focal main" >> /etc/apt/sources.list #代表 17 版本的 ceph
22.04:jammy
root@ceph-deploy:~# echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-reef jammy main" >> /etc/apt/sources.list #代表 18 版本的 ceph
root@ceph-deploy:~# apt update
2.4.2 创建ceph集群部署用户cephadmin
ceph
推荐使用指定的普通用户部署和运行ceph
集群,普通用户只要能以非交互方式执行sudo
命令执行一些特权命令即可,新版的ceph-deploy可以指定包含root在内只要可以执行sudo命令的用户,不过仍然推荐使用普通用户,ceph集群安装完成会自动创建ceph用户(ceph集群默认会使用ceph用户运行个服务器进程,如ceph-osd
等),因此推荐使用除了ceph用户之外的,比如cephuser
、cephadmin
这样的用户去部署和管理ceph集群
cephadmin
仅用于通过ceph-deploy
部署和管理ceph集群的时候使用,比如首次初始化集群
和部署集群
、添加节点
、删除节点
等,ceph集群在node
节点、mgr
等节点会使用ceph
用户启动进程
在包含ceph-deploy
节点的存储节点、mon
节点和mgr
节点等创建cephadmin
用户
[root@ceph-deploy ~]# groupadd -r -g 2088 cephadmin && useradd -r -m -s /bin/bash -u 2088 -g 2088 cephadmin && echo cephadmin:123456 | chpasswd
各服务器允许cephadmin用户以sudo执行特权命令
echo "cephadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
#或者手动更改:
vim /etc/sudoers
root ALL=(ALL) ALL
cephadm ALL=(ALL) NOPASSWD: ALL
配置免密钥登录:
在ceph-deploy节点配置密钥分发,允许cephadmin用户以非交互的方式登录到各ceph node/mon/mgr 节点进行集群部署及管理操作,就是在ceph-deploy节点生成密钥对,然后分发公钥到各个服务器
[root@ceph-deploy ~]# su - cephadmin
[cephadmin@ceph-deploy ~]$ ssh-keygen
[cephadmin@ceph-deploy ~]$ cat copypub.sh
#!/bin/bash
# 定义起始和结束的 IP 后缀
start=50
end=59
# 循环遍历 IP 后缀
for i in $(seq $start $end); do
# 构造完整的 IP 地址
ip="192.168.91.$i"
# 将 SSH 密钥复制到目标机器
ssh-copy-id cephadmin@$ip
done
[cephadmin@ceph-deploy ~]$ sh copypub.sh
2.4.3 配置主机名解析
cephadmin@ceph-deploy:~$ cat /etc/hosts
192.168.91.50 ceph-deploy.admin.local ceph-deploy
192.168.91.51 ceph-mon1.admin.local ceph-mon1
192.168.91.52 ceph-mon2.admin.local ceph-mon2
192.168.91.53 ceph-mon3.admin.local ceph-mon3
192.168.91.54 ceph-mgr1.admin.local ceph-mgr1
192.168.91.55 ceph-mgr2.admin.local ceph-mgr2
192.168.91.56 ceph-node1.admin.local ceph-node1
192.168.91.57 ceph-node2.admin.local ceph-node2
192.168.91.58 ceph-node3.admin.local ceph-node3
192.168.91.59 ceph-node4.admin.local ceph-node4
2.4.4 安装ceph部署工具
在ceph部署服务器安装部署工具ceph-deploy
ubuntu 2004/2204
[cephadmin@ceph-deploy ~]$ sudo apt install python2
[cephadmin@ceph-deploy ~]$ sudo curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
[cephadmin@ceph-deploy ~]$ sudo python2 get-pip.py
如果apt安装python2失败,可以编译安装,这里不多介绍
[cephadmin@ceph-deploy ~]$ sudo pip2 install ceph-deploy
[cephadmin@ceph-deploy ~]$ ceph-deploy --help # 验证命令存在并可以执行
ubuntu 1804:
~# sudo apt install python-pip #安装 python2
~# sudo pip2 install ceph-deploy #使用 python2 的 pip 安装 ceph-deploy
或:
cephadmin@ceph-deploy:~$ apt-cache madison ceph-deploy
ceph-deploy | 2.0.1 | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main amd64 Packages
ceph-deploy | 2.0.1 | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main i386 Packages
ceph-deploy | 1.5.38-0ubuntu1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/universe amd64 Packages
ceph-deploy | 1.5.38-0ubuntu1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/universe i386 Packages
cephadmin@ceph-deploy:~$ sudo apt install ceph-deploy
Centos:
[cephadmin@ceph-deploy ~]$ sudo yum install ceph-deploy python-setuptools python2-subprocess3
2.4.5 初始化mon节点
在管理节点初始化mon
cephadmin@ceph-deploy:~$ mkdir ceph-cluster
cephadmin@ceph-deploy:~$ cd ceph-cluster/
cephadmin@ceph-deploy:~/ceph-cluster$
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --help
new:开始部署一个新的 ceph 存储集群,并生成 CLUSTER.conf 集群配置文件和 keyring认证文件。
install: 在远程主机上安装 ceph 相关的软件包, 可以通过--release 指定安装的版本。
rgw:管理 RGW 守护程序(RADOSGW,对象存储网关)。
mgr:管理 MGR 守护程序(ceph-mgr,Ceph Manager DaemonCeph 管理器守护程序)。
mds:管理 MDS 守护程序(Ceph Metadata Server,ceph 源数据服务器)。
mon:管理 MON 守护程序(ceph-mon,ceph 监视器)。
gatherkeys:从指定获取提供新节点的验证 keys,这些 keys 会在添加新的 MON/OSD/MD加入的时候使用。
disk:管理远程主机磁盘。
osd:在远程主机准备数据磁盘,即将指定远程主机的指定磁盘添加到 ceph 集群作为 osd使用。
repo: 远程主机仓库管理。
admin:推送 ceph 集群配置文件和 client.admin 认证文件到远程主机。
config:将 ceph.conf 配置文件推送到远程主机或从远程主机拷贝。
uninstall:从远端主机删除安装包。
purgedata:从/var/lib/ceph 删除 ceph 数据,会删除/etc/ceph 下的内容。
purge: 删除远端主机的安装包和所有数据。
forgetkeys:从本地主机删除所有的验证 keyring, 包括 client.admin, monitor, bootstrap 等认证文件。
pkg: 管理远端主机的安装包。
calamari:安装并配置一个 calamari web 节点,calamari 是一个 web 监控平台。
初始化mon节点过程如下:
Ubuntu个服务器需要单独安装Python2
root@ceph-mon1:~#sudo apt install python2.7 -y
root@ceph-mon1:~#sudo ln -sv /usr/bin/python2.7 /usr/bin/python2
在部署节点执行:
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy new --cluster-network 192.168.91.0/24 --public-network 192.168.31.0/24 ceph-mon1.example.local
执行完成之后,会在ceph-cluster目录下生成以下文件
[cephadmin@ceph-deploy ceph-cluster]$ ll
total 16
-rw-rw-r-- 1 cephadmin cephadmin 263 Oct 21 14:24 ceph.conf #自动生成的配置文件
-rw-rw-r-- 1 cephadmin cephadmin 7096 Oct 21 14:24 ceph-deploy-ceph.log #初始化日志
-rw------- 1 cephadmin cephadmin 73 Oct 21 14:24 ceph.mon.keyring #用于 cephmon 节点内部通讯认证的秘钥环文件
cephadmin@ceph-deploy:~/ceph-cluster$ cat ceph.conf
[global]
fsid = 74d6f368-8875-4340-857f-0daa3e96b5dc
public_network = 192.168.31.0/24
cluster_network = 192.168.91.0/24
mon_initial_members = ceph-mon1,ceph-mon2,ceph-mon3
mon_host = 192.168.31.51,192.168.31.52,192.168.31.53
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
2.4.6 初始化ceph存储节点
初始化存储节点等于在存储节点安装了ceph及ceph-rodsgw安装包,但是使用默认的官方仓库会因为网络原因初始化曹氏,因此各存储节点推荐修改ceph仓库为阿里或清华源。
2.4.6.1 修改ceph镜像源
各节点都需要配置清华的ceph镜像源
ceph-octopus 版本(15):
~# cat /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-octopus bionic main
Ceph-pacific版本(16)Ubuntu 18.04:
~# cat /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main
Ceph-quincy版本(17)ubuntu2004:
$ cat /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universemultiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricteduniverse multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-quincy focal main
Ceph-reef版本(18)ubuntu2204:
root@ceph-node4:~# cat /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universemultiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricteduniverse multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-reef jammy main
2.4.6.2 初始化node节点
此步骤必须执行,否则ceph集群的后续安装步骤会报错:
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node2 ceph-node3 ceph-node4
# --no-adjust-repos #不修改已有的 apt 仓库源(默认会使用官方仓库)
# --nogpgcheck #不进行校验
此过程会在指定的ceph node节点按照串行的方式逐个服务器安装ceph-base ceph-common等组件包,上图就已经是安装完成了
2.4.7 安装Ceph-mon 服务
在各mon节点按照组件ceph-mon ,并通过初始化mon节点,mon节点HA还可以后期横向扩容
2.4.7.1 安装ceph-mon
Ubuntu安装ceph-mon
root@ceph-mon1:~# apt-cache madison ceph-mon
ceph-mon | 18.2.2-1jammy | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-reef jammy/main amd64 Packages ceph-mon | 17.2.7-0ubuntu0.22.04.1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 Packages ceph-mon | 17.2.6-0ubuntu0.22.04.3 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-security/main amd64 Packages ceph-mon | 17.1.0-0ubuntu3 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 Packages
root@ceph-mon1:~# apt install ceph-mon -y
root@ceph-mon2:~# apt install ceph-mon -y
root@ceph-mon3:~# apt install ceph-mon -y
2.4.7.2 ceph集群添加ceph-mon服务
[cephadmin@ceph-deploy ceph-cluster]$ pwd
/home/ceph/ceph-cluster
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy mon create-initial
2.4.8 验证mon节点
验证在mon节点已经自动安装并启动了ceph-mon服务,并且后期再ceph-deploy节点初始化目录会生成一些bootstrap ceph mds/mgr/osd/rgw等服务的keyring认证文件,这些初始化文件拥有对ceph集群的最高权限,所以一定要保存好。
[root@ceph-mon1 ~]# ps -ef | grep ceph-mon
ceph 4526 1 0 16:47 ? 00:00:00 /usr/bin/ceph-mon -f --cluster ceph --id ceph-mon1 --setuser ceph --setgroup ceph
2.4.9 分发admin密钥
在ceph-deploy节点吧配置文件和admin密钥拷贝Ceph集群需要执行ceph管理命令的节点,从而不需要后期通过ceph命令对ceph集群进行管理配置的时候每次都需要指定ceph-mon节点地址和ceph.client.admin.keyring文件,另外各ceph-mon节点也需要同步ceph的集群配置文件与认证文件。
cephadmin@ceph-deploy:~/ceph-cluster$ sudo apt install ceph-common #先安装 ceph的公共组件
root@ceph-node1:~# apt install ceph-common -y #node 节点在初始化时已经安装
root@ceph-node2:~# apt install ceph-common -y
root@ceph-node3:~# apt install ceph-common -y
root@ceph-node4:~# apt install ceph-common -y
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy admin ceph-node1 ceph-node2 ceph-node3 ceph-node4
2.4.10 ceph node节点验证密钥
到node节点验证key文件
root@ceph-node2:~# ll /etc/ceph/
total 28
drwxr-xr-x 2 root root 4096 8月 29 16:32 ./
drwxr-xr-x 135 root root 12288 8月 27 15:51 ../
-rw------- 1 root root 151 8月 29 16:32 ceph.client.admin.keyring
-rw-r--r-- 1 root root 315 8月 29 16:32 ceph.conf
-rw-r--r-- 1 root root 92 7月 12 23:42 rbdmap
-rw------- 1 root root 0 8月 27 15:56 tmpcCeCBe
认证文件的属主和属组为了安全考虑,默认设置为root用户和root组,如果需要ceph用户也能执行ceph命令,就需要对ceph用户进行授权
root@ceph-node1:~# sudo apt install acl
root@ceph-node1:~# setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
root@ceph-node2:~# setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
root@ceph-node3:~# setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
root@ceph-node4:~# setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring
2.4.11 部署ceph-mgr节点
mgr节点需要读取ceph的配置文件,即/etc/ceph目录中的配置文件
#初始化 ceph-mgr 节点:
[root@ceph-mgr1 ~]# apt install ceph-mgr
# 管理节点执行
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy mgr create ceph-mgr1
2.4.12 验证ceph-mgr节点
root@ceph-mgr1:~/Python-2.7.18# ps -ef |grep mgr
ceph 67421 1 0 8月27 ? 00:17:23 /usr/bin/ceph-mgr -f --cluster ceph --id ceph-mgr1 --setuser ceph --setgroup ceph
root 71464 3097 0 16:36 pts/3 00:00:00 grep --color=auto mgr
2.4.13 ceph-deploy管理ceph集群
在ceph-deploy节点配置一下系统环境,以方便后期可以执行ceph管理命令
[cephadmin@ceph-deploy ceph-cluster]$ sudo apt install ceph-common
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy admin ceph-deploy #推送证书给自己
2.4.14 测试ceph命令
cephadmin@ceph-deploy:~/ceph-cluster$ sudo setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.admin.keyring #授权
cephadmin@ceph-deploy:~/ceph-cluster$ ceph -s
cluster:
id: 74d6f368-8875-4340-857f-0daa3e96b5dc
health: HEALTH_WARN
mons are allowing insecure global_id reclaim #需要禁用非安全模式通信
1 pool(s) do not have an application enabled
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 2d)
mgr: ceph-mgr1(active, since 2d)
osd: 16 osds: 16 up (since 47h), 16 in (since 2d)
data:
pools: 3 pools, 97 pgs
objects: 5 objects, 14 MiB
usage: 510 MiB used, 3.1 TiB / 3.1 TiB avail
pgs: 97 active+clean
# 查看ceph版本
cephadmin@ceph-deploy:~/ceph-cluster$ ceph versions
{
"mon": {
"ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)": 3
},
"mgr": {
"ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)": 1
},
"osd": {
"ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)": 16
},
"overall": {
"ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)": 20
}
}
2.4.15 初始化存储节点
osd节点安装运行环境
#node 节点、ubuntu 2004、2204 系统单独安装 ceph-volume,负责无法初始化
cephadmin@ceph-node1:~$ sudo apt install ceph-volume -y
cephadmin@ceph-node2:~$ sudo apt install ceph-volume -y
cephadmin@ceph-node3:~$ sudo apt install ceph-volume -y
cephadmin@ceph-node4:~$ sudo apt install ceph-volume -y
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy install --release reef ceph-node1 #擦除磁盘之前通过 deploy 节点对 node 节点执行安装 ceph 基本运行环境
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy install --release reef ceph-node2
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy install --release reef ceph-node3
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy install --release reef ceph-node4
root@ceph-node2:~# apt autoremove #node 节点可选删除不需要的包
列出ceph node节点磁盘
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/local/bin/ceph-deploy disk list ceph-node1
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] debug : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] subcommand : list
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7e42c688a910>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] host : ['ceph-node1']
[ceph_deploy.cli][INFO ] func : <function disk at 0x7e42c68df0d0>
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph-node1][DEBUG ] find the location of an executable
[ceph-node1][INFO ] Running command: sudo fdisk -l
[ceph-node1][INFO ] Disk /dev/loop1: 4 KiB, 4096 bytes, 8 sectors
[ceph-node1][INFO ] Disk /dev/loop2: 74.27 MiB, 77881344 bytes, 152112 sectors
[ceph-node1][INFO ] Disk /dev/loop3: 266.63 MiB, 279584768 bytes, 546064 sectors
[ceph-node1][INFO ] Disk /dev/loop4: 496.98 MiB, 521121792 bytes, 1017816 sectors
[ceph-node1][INFO ] Disk /dev/loop5: 91.69 MiB, 96141312 bytes, 187776 sectors
[ceph-node1][INFO ] Disk /dev/loop6: 40.43 MiB, 42393600 bytes, 82800 sectors
[ceph-node1][INFO ] Disk /dev/loop7: 12.32 MiB, 12922880 bytes, 25240 sectors
[ceph-node1][INFO ] Disk /dev/nvme0n1: 200 GiB, 214748364800 bytes, 419430400 sectors
[ceph-node1][INFO ] Disk /dev/nvme0n2: 200 GiB, 214748364800 bytes, 419430400 sectors
[ceph-node1][INFO ] Disk /dev/nvme0n3: 200 GiB, 214748364800 bytes, 419430400 sectors
[ceph-node1][INFO ] Disk /dev/nvme0n4: 200 GiB, 214748364800 bytes, 419430400 sectors
[ceph-node1][INFO ] Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
[ceph-node1][INFO ] Disk /dev/loop8: 38.83 MiB, 40714240 bytes, 79520 sectors
[ceph-node1][INFO ] Disk /dev/loop9: 452 KiB, 462848 bytes, 904 sectors
[ceph-node1][INFO ] Disk /dev/loop10: 505.09 MiB, 529625088 bytes, 1034424 sectors
[ceph-node1][INFO ] Disk /dev/mapper/ceph--d377304c--aac2--4933--be0f--170ddccaf1af-osd--block--65296b4d--6b27--4ae4--b08d--16c0688527be: 200 GiB, 214744170496 bytes, 419422208 sectors
[ceph-node1][INFO ] Disk /dev/mapper/ceph--6e8da6a9--3ce1--4423--9f67--e734492be7d8-osd--block--d6072f55--01bf--4d7e--9599--20efbd33e8dd: 200 GiB, 214744170496 bytes, 419422208 sectors
[ceph-node1][INFO ] Disk /dev/mapper/ceph--dd711eb2--594b--4372--9f7c--b4c5f4832525-osd--block--3510c172--c22a--4420--a19a--d950eed8f7da: 200 GiB, 214744170496 bytes, 419422208 sectors
[ceph-node1][INFO ] Disk /dev/mapper/ceph--05d504d1--667e--421b--b330--bdd2c9f0ac05-osd--block--5799cdbe--5916--4e65--850a--76a7623b75a9: 200 GiB, 214744170496 bytes, 419422208 sectors
[ceph-node1][INFO ] Disk /dev/loop11: 269.77 MiB, 282873856 bytes, 552488 sectors
[ceph-node1][INFO ] Disk /dev/loop12: 74.27 MiB, 77881344 bytes, 152112 sectors
/dev/nvme0n1~4 是我们的ceph数据盘,使用ceph-deploy disk zap
擦除各ceph node 的ceph数据磁盘:
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node1 /dev/nvme0n1
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node1 /dev/nvme0n2
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node1 /dev/nvme0n3
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node1 /dev/nvme0n4
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node2 /dev/nvme0n1
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node2 /dev/nvme0n2
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node2 /dev/nvme0n3
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node2 /dev/nvme0n4
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node3 /dev/nvme0n1
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node3 /dev/nvme0n2
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node3 /dev/nvme0n3
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node3 /dev/nvme0n4
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node4 /dev/nvme0n1
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node4 /dev/nvme0n2
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node4 /dev/nvme0n3
cephadmin@ceph-deploy:/home/ceph/ceph-cluster$ ceph-deploy disk zap ceph-node4 /dev/nvme0n4
2.4.16 添加OSD
2.4.16.1 数据分类保存
Data: 即ceph保存的对象数据
Block:rocks DB数据,即元数据
block-wal:数据库的wal日志,预写式日志
可以将元数据、对象数据、预写式日志分别存放,不放在一起
ceph-deploy osd create {node} --data /path/to/data --block-db /path/to/db-device
ceph-deploy osd create {node} --data /path/to/data --block-wal /path/to/wal-device
ceph-deploy osd create {node} --data /path/to/data --block-wal /path/to/wal-device --block-db /path/to/db-device
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd --help
usage: ceph-deploy osd [-h] {list,create} ... Create OSDs from a data disk on a remote host:
ceph-deploy osd create {node} --data /path/to/device
For bluestore, optional devices can be used::
ceph-deploy osd create {node} --data /path/to/data --block-db /path/to/db-device
ceph-deploy osd create {node} --data /path/to/data --block-wal /path/to/wal-device
ceph-deploy osd create {node} --data /path/to/data --block-db /path/to/db-device --block-wal /path/to/wal-device
For filestore, the journal must be specified, as well as the objectstore::
ceph-deploy osd create {node} --filestore --data /path/to/data --journal /path/to/journal #使用 filestor的数据和文件系统的日志的路径,journal是 systemd的一个组
件,用于捕获系统日志信息、内核日志信息、磁盘的日志信息等,
For data devices, it can be an existing logical volume in the format of:
vg/lv, or a device. For other OSD components like wal, db, and journal, it
can be logical volume (in vg/lv format) or it must be a GPT partition. positional arguments:
{list,create}
list List OSD info from remote host(s)
create Create new Ceph OSD daemon by preparing and activating a device
optional arguments: -h, --help show this help message and exit
2.4.16.2 添加osd
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node1 --data /dev/nvme0n1
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node1 --data /dev/nvme0n2
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node1 --data /dev/nvme0n3
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node1 --data /dev/nvme0n4
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node2 --data /dev/nvme0n1
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node2 --data /dev/nvme0n2
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node2 --data /dev/nvme0n3
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node2 --data /dev/nvme0n4
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node3 --data /dev/nvme0n1
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node3 --data /dev/nvme0n2
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node3 --data /dev/nvme0n3
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node3 --data /dev/nvme0n4
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node4 --data /dev/nvme0n1
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node4 --data /dev/nvme0n2
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node4 --data /dev/nvme0n3
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy osd create ceph-node4 --data /dev/nvme0n4
添加之后可以到osd节点查看进程是否已经启动
root@ceph-node1:~# ps -ef |grep ceph-osd
ceph 15629 1 0 8月27 ? 00:22:52 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph 17191 1 0 8月27 ? 00:26:01 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
ceph 18755 1 0 8月27 ? 00:21:17 /usr/bin/ceph-osd -f --cluster ceph --id 2 --setuser ceph --setgroup ceph
ceph 20316 1 0 8月27 ? 00:24:55 /usr/bin/ceph-osd -f --cluster ceph --id 3 --setuser ceph --setgroup ceph
root 24261 4010 0 15:39 pts/2 00:00:00 grep --color=auto ceph-osd
2.4.17 验证ceph集群
如果有下面的警告,可以执行
cephadmin@ceph-deploy:~/ceph-cluster$ ceph health
HEALTH_WARN mons are allowing insecure global_id reclaim
cephadmin@ceph-deploy:~/ceph-cluster$ ceph config set mon auth_allow_insecure_global_id_reclaim false
cephadmin@ceph-deploy:~/ceph-cluster$ ceph config get mon auth_allow_insecure_global_id_reclaim
false
cephadmin@ceph-deploy:~/ceph-cluster$
cephadmin@ceph-deploy:~/ceph-cluster$ ceph health
HEALTH_OK
2.4.18 从RADOS移出OSD
Ceph集群中的一个OSD是一个node节点的服务进程且对于一个物理磁盘设备,是一个专用的守护进程。在某个osd设备出现故障,或管理员处于管理需要移出特定的osd设备,需要先停止相关的守护进程,而后再进行移出操作,对于Luminous及其之后的版本来说,停止和移出命令的格式为:
1. 停用设备:ceph osd out {osd-num}
2. 停止进程:sudo systemctl stop ceph-osd@{osd-num}
3. 移除设备:ceph osd purge {id} --yes-i-really-mean-it
比如,我这里要停止第15块osd:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd ls
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd out 15
marked out osd.15.
# 然后需要到此osd的节点上停止进程,我id等于15的osd是在node4上面
root@ceph-node4:~# sudo systemctl stop ceph-osd@1
ceph-osd@12.service ceph-osd@13.service ceph-osd@14.service ceph-osd@15.service
root@ceph-node4:~# sudo systemctl stop ceph-osd@15.service
# 然后再回到deploy节点
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd purge 15 --yes-i-really-mean-it
purged osd.15
cephadmin@ceph-deploy:~/ceph-cluster$ ceph -s
cluster:
id: 74d6f368-8875-4340-857f-0daa3e96b5dc
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 2d)
mgr: ceph-mgr1(active, since 2d)
osd: 15 osds: 15 up (since 104s), 15 in (since 118s)
data:
pools: 2 pools, 65 pgs
objects: 3 objects, 577 KiB
usage: 454 MiB used, 2.9 TiB / 2.9 TiB avail
pgs: 65 active+clean
# 这样id等与15的osd就被剔除ceph集群了
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd ls
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
如果想再把此osd加入呢,执行擦除命令发现会报错
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node4 /dev/nvme0n4
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/local/bin/ceph-deploy disk zap ceph-node4 /dev/nvme0n4
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] debug : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] subcommand : zap
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7c728efcf910>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] host : ceph-node4
[ceph_deploy.cli][INFO ] func : <function disk at 0x7c728f0240d0>
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] disk : ['/dev/nvme0n4']
[ceph_deploy.osd][DEBUG ] zapping /dev/nvme0n4 on ceph-node4
[ceph-node4][DEBUG ] connection detected need for sudo
[ceph-node4][DEBUG ] connected to host: ceph-node4
[ceph-node4][DEBUG ] detect platform information from remote host
[ceph-node4][DEBUG ] detect machine type
[ceph-node4][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO ] Distro info: debian bookworm/sid sid
[ceph-node4][DEBUG ] zeroing last few blocks of device
[ceph-node4][DEBUG ] find the location of an executable
[ceph-node4][INFO ] Running command: sudo /usr/sbin/ceph-volume lvm zap /dev/nvme0n4
[ceph-node4][WARNIN] --> Zapping: /dev/nvme0n4
[ceph-node4][WARNIN] --> Zapping lvm member /dev/nvme0n4. lv_path is /dev/ceph-2856f07e-d133-4b30-9037-8b651f4965b4/osd-block-6e15447a-62a2-44dc-9717-462aa8bbbd4b
[ceph-node4][WARNIN] --> Unmounting /var/lib/ceph/osd/ceph-15
[ceph-node4][WARNIN] Running command: /usr/bin/umount -v /var/lib/ceph/osd/ceph-15
[ceph-node4][WARNIN] stderr: umount: /var/lib/ceph/osd/ceph-15 unmounted
[ceph-node4][WARNIN] Running command: /usr/bin/dd if=/dev/zero of=/dev/ceph-2856f07e-d133-4b30-9037-8b651f4965b4/osd-block-6e15447a-62a2-44dc-9717-462aa8bbbd4b bs=1M count=10 conv=fsync
[ceph-node4][WARNIN] stderr: 10+0 records in
[ceph-node4][WARNIN] 10+0 records out
[ceph-node4][WARNIN] 10485760 bytes (10 MB, 10 MiB) copied, 0.0385965 s, 272 MB/s
[ceph-node4][WARNIN] --> --destroy was not specified, but zapping a whole device will remove the partition table
[ceph-node4][WARNIN] stderr: wipefs: error: /dev/nvme0n4: probing initialization failed: Device or resource busy
[ceph-node4][WARNIN] --> failed to wipefs device, will try again to workaround probable race condition
[ceph-node4][WARNIN] stderr: wipefs: error: /dev/nvme0n4: probing initialization failed: Device or resource busy
[ceph-node4][WARNIN] --> failed to wipefs device, will try again to workaround probable race condition
[ceph-node4][WARNIN] stderr: wipefs: error: /dev/nvme0n4: probing initialization failed: Device or resource busy
[ceph-node4][WARNIN] --> failed to wipefs device, will try again to workaround probable race condition
[ceph-node4][WARNIN] stderr: wipefs: error: /dev/nvme0n4: probing initialization failed: Device or resource busy
[ceph-node4][WARNIN] --> failed to wipefs device, will try again to workaround probable race condition
[ceph-node4][WARNIN] stderr: wipefs: error: /dev/nvme0n4: probing initialization failed: Device or resource busy
[ceph-node4][WARNIN] --> failed to wipefs device, will try again to workaround probable race condition
[ceph-node4][WARNIN] stderr: wipefs: error: /dev/nvme0n4: probing initialization failed: Device or resource busy
[ceph-node4][WARNIN] --> failed to wipefs device, will try again to workaround probable race condition
[ceph-node4][WARNIN] stderr: wipefs: error: /dev/nvme0n4: probing initialization failed: Device or resource busy
[ceph-node4][WARNIN] --> failed to wipefs device, will try again to workaround probable race condition
[ceph-node4][WARNIN] stderr: wipefs: error: /dev/nvme0n4: probing initialization failed: Device or resource busy
[ceph-node4][WARNIN] --> failed to wipefs device, will try again to workaround probable race condition
[ceph-node4][WARNIN] --> RuntimeError: could not complete wipefs on device: /dev/nvme0n4
[ceph-node4][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-volume lvm zap /dev/nvme0n4
# 到node4节点查看发现还有一个LVM逻辑卷
root@ceph-node4:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
fd0 2:0 1 4K 0 disk
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 505.1M 1 loop /snap/gnome-42-2204/176
loop2 7:2 0 74.3M 1 loop /snap/core22/1564
loop3 7:3 0 266.6M 1 loop /snap/firefox/3836
loop4 7:4 0 497M 1 loop /snap/gnome-42-2204/141
loop5 7:5 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop6 7:6 0 12.3M 1 loop /snap/snap-store/959
loop7 7:7 0 40.4M 1 loop /snap/snapd/20671
loop8 7:8 0 38.8M 1 loop /snap/snapd/21759
loop9 7:9 0 452K 1 loop /snap/snapd-desktop-integration/83
loop10 7:10 0 500K 1 loop /snap/snapd-desktop-integration/178
loop11 7:11 0 269.8M 1 loop /snap/firefox/4793
loop12 7:12 0 74.3M 1 loop /snap/core22/1586
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 513M 0 part /boot/efi
└─sda3 8:3 0 199.5G 0 part /var/snap/firefox/common/host-hunspell
/
sr0 11:0 1 1024M 0 rom
sr1 11:1 1 4.7G 0 rom
nvme0n1 259:0 0 200G 0 disk
└─ceph--91ca3005--3236--42ed--aca3--5d3e12b9d450-osd--block--a91c2921--c0b5--49f9--a66b--3f2fc9cb0a96
252:0 0 200G 0 lvm
nvme0n2 259:1 0 200G 0 disk
└─ceph--215e765e--f973--401e--8b67--45c1fb5fb720-osd--block--1f31063d--ad5d--40bf--89de--7e2e87d3dc66
252:1 0 200G 0 lvm
nvme0n3 259:2 0 200G 0 disk
└─ceph--e94e1d82--285f--4134--bd12--2fdabb689efe-osd--block--011ff4dd--c8ec--42ed--9f67--50ad01b9be67
252:2 0 200G 0 lvm
nvme0n4 259:3 0 200G 0 disk
└─ceph--2856f07e--d133--4b30--9037--8b651f4965b4-osd--block--6e15447a--62a2--44dc--9717--462aa8bbbd4b
252:3 0 200G 0 lvm
# 查看设备可能被设备映射器使用,查看列表
root@ceph-node4:~# dmsetup ls
ceph--215e765e--f973--401e--8b67--45c1fb5fb720-osd--block--1f31063d--ad5d--40bf--89de--7e2e87d3dc66 (252:1)
ceph--2856f07e--d133--4b30--9037--8b651f4965b4-osd--block--6e15447a--62a2--44dc--9717--462aa8bbbd4b (252:3)
ceph--91ca3005--3236--42ed--aca3--5d3e12b9d450-osd--block--a91c2921--c0b5--49f9--a66b--3f2fc9cb0a96 (252:0)
ceph--e94e1d82--285f--4134--bd12--2fdabb689efe-osd--block--011ff4dd--c8ec--42ed--9f67--50ad01b9be67 (252:2)
# 从设备映射器中删除
root@ceph-node4:~# dmsetup remove ceph--2856f07e--d133--4b30--9037--8b651f4965b4-osd--block--6e15447a--62a2--44dc--9717--462aa8bbbd4b
root@ceph-node4:~#
root@ceph-node4:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
fd0 2:0 1 4K 0 disk
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 505.1M 1 loop /snap/gnome-42-2204/176
loop2 7:2 0 74.3M 1 loop /snap/core22/1564
loop3 7:3 0 266.6M 1 loop /snap/firefox/3836
loop4 7:4 0 497M 1 loop /snap/gnome-42-2204/141
loop5 7:5 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop6 7:6 0 12.3M 1 loop /snap/snap-store/959
loop7 7:7 0 40.4M 1 loop /snap/snapd/20671
loop8 7:8 0 38.8M 1 loop /snap/snapd/21759
loop9 7:9 0 452K 1 loop /snap/snapd-desktop-integration/83
loop10 7:10 0 500K 1 loop /snap/snapd-desktop-integration/178
loop11 7:11 0 269.8M 1 loop /snap/firefox/4793
loop12 7:12 0 74.3M 1 loop /snap/core22/1586
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 513M 0 part /boot/efi
└─sda3 8:3 0 199.5G 0 part /var/snap/firefox/common/host-hunspell
/
sr0 11:0 1 1024M 0 rom
sr1 11:1 1 4.7G 0 rom
nvme0n1 259:0 0 200G 0 disk
└─ceph--91ca3005--3236--42ed--aca3--5d3e12b9d450-osd--block--a91c2921--c0b5--49f9--a66b--3f2fc9cb0a96
252:0 0 200G 0 lvm
nvme0n2 259:1 0 200G 0 disk
└─ceph--215e765e--f973--401e--8b67--45c1fb5fb720-osd--block--1f31063d--ad5d--40bf--89de--7e2e87d3dc66
252:1 0 200G 0 lvm
nvme0n3 259:2 0 200G 0 disk
└─ceph--e94e1d82--285f--4134--bd12--2fdabb689efe-osd--block--011ff4dd--c8ec--42ed--9f67--50ad01b9be67
252:2 0 200G 0 lvm
nvme0n4 259:3 0 200G 0 disk
# 移出逻辑卷
root@ceph-node4:~# sudo lvremove /dev/ceph-2856f07e-d133-4b30-9037-8b651f4965b4/osd-block-6e15447a-62a2-44dc-9717-462aa8bbbd4b
Do you really want to remove and DISCARD logical volume ceph-2856f07e-d133-4b30-9037-8b651f4965b4/osd-block-6e15447a-62a2-44dc-9717-462aa8bbbd4b? [y/n]: y
Logical volume "osd-block-6e15447a-62a2-44dc-9717-462aa8bbbd4b" successfully removed
# 然后再在deploy节点抹除
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node4 /dev/nvme0n4
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/local/bin/ceph-deploy disk zap ceph-node4 /dev/nvme0n4
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] debug : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] subcommand : zap
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7c757e28a910>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] host : ceph-node4
[ceph_deploy.cli][INFO ] func : <function disk at 0x7c757e2df0d0>
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] disk : ['/dev/nvme0n4']
[ceph_deploy.osd][DEBUG ] zapping /dev/nvme0n4 on ceph-node4
[ceph-node4][DEBUG ] connection detected need for sudo
[ceph-node4][DEBUG ] connected to host: ceph-node4
[ceph-node4][DEBUG ] detect platform information from remote host
[ceph-node4][DEBUG ] detect machine type
[ceph-node4][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO ] Distro info: debian bookworm/sid sid
[ceph-node4][DEBUG ] zeroing last few blocks of device
[ceph-node4][DEBUG ] find the location of an executable
[ceph-node4][INFO ] Running command: sudo /usr/sbin/ceph-volume lvm zap /dev/nvme0n4
[ceph-node4][WARNIN] --> Zapping: /dev/nvme0n4
[ceph-node4][WARNIN] --> --destroy was not specified, but zapping a whole device will remove the partition table
[ceph-node4][WARNIN] Running command: /usr/bin/dd if=/dev/zero of=/dev/nvme0n4 bs=1M count=10 conv=fsync
[ceph-node4][WARNIN] stderr: 10+0 records in
[ceph-node4][WARNIN] 10+0 records out
[ceph-node4][WARNIN] 10485760 bytes (10 MB, 10 MiB) copied, 0.0296094 s, 354 MB/s
[ceph-node4][WARNIN] --> Zapping successful for: <Raw Device: /dev/nvme0n4>
# 再次将osd添加到ceph
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node4 --data /dev/nvme0n4
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadmin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/local/bin/ceph-deploy osd create ceph-node4 --data /dev/nvme0n4
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] bluestore : None
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x746ac9a55af0>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] fs_type : xfs
[ceph_deploy.cli][INFO ] block_wal : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] journal : None
[ceph_deploy.cli][INFO ] subcommand : create
.....
.....
[ceph-node4][WARNIN] --> ceph-volume lvm prepare successful for: /dev/nvme0n4
[ceph-node4][WARNIN] Running command: /usr/bin/chown -R ceph:ceph /var/lib/ceph/osd/ceph-15
[ceph-node4][WARNIN] Running command: /usr/bin/ceph-bluestore-tool --cluster=ceph prime-osd-dir --dev /dev/ceph-d6a93c16-53ee-4308-9db6-cb290d84b617/osd-block-e7b64452-7691-479e-9fb8-f9c46eb5d240 --path /var/lib/ceph/osd/ceph-15 --no-mon-config
[ceph-node4][WARNIN] Running command: /usr/bin/ln -snf /dev/ceph-d6a93c16-53ee-4308-9db6-cb290d84b617/osd-block-e7b64452-7691-479e-9fb8-f9c46eb5d240 /var/lib/ceph/osd/ceph-15/block
[ceph-node4][WARNIN] Running command: /usr/bin/chown -h ceph:ceph /var/lib/ceph/osd/ceph-15/block
[ceph-node4][WARNIN] Running command: /usr/bin/chown -R ceph:ceph /dev/dm-3
[ceph-node4][WARNIN] Running command: /usr/bin/chown -R ceph:ceph /var/lib/ceph/osd/ceph-15
[ceph-node4][WARNIN] Running command: /usr/bin/systemctl enable ceph-volume@lvm-15-e7b64452-7691-479e-9fb8-f9c46eb5d240
[ceph-node4][WARNIN] stderr: Created symlink /etc/systemd/system/multi-user.target.wants/ceph-volume@lvm-15-e7b64452-7691-479e-9fb8-f9c46eb5d240.service → /lib/systemd/system/ceph-volume@.service.
[ceph-node4][WARNIN] Running command: /usr/bin/systemctl enable --runtime ceph-osd@15
[ceph-node4][WARNIN] Running command: /usr/bin/systemctl start ceph-osd@15
[ceph-node4][WARNIN] --> ceph-volume lvm activate successful for osd ID: 15
[ceph-node4][WARNIN] --> ceph-volume lvm create successful for: /dev/nvme0n4
[ceph-node4][INFO ] checking OSD status...
[ceph-node4][DEBUG ] find the location of an executable
[ceph-node4][INFO ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[ceph-node4][WARNIN] there is 1 OSD down
[ceph_deploy.osd][DEBUG ] Host ceph-node4 is now ready for osd use.
若类似如下的 OSD 的配置信息存在于 ceph.conf 配置文件中,管理员在删除 OSD 之后手动将其删除。
不过,对于 Luminous 之前的版本来说,管理员需要依次手动执行如下步骤删除 OSD 设备:
1. 于 CRUSH 运行图中移除设备:ceph osd crush remove {name}
2. 移除 OSD 的认证 key:ceph auth del osd.{osd-num}
3. 最后移除 OSD 设备:ceph osd rm {osd-num}
2.4.19 测试上传与下载数据
存取数据时,客户端必须首先连接到RADOS集群上的某个存储池(pool),然后根据对象名称由相关的CRUSH算法完成数据对象寻址(指定osd),所以为了测试集群数据存储功能,这里创建一个用于测试的存储池mypool,并设定PG数量为64个
[cephadmin@ceph-deploy ceph-cluster]$ ceph osd pool create mypool 32 32 #32PG和
32PGP
pool 'mypool' created
[cephadmin@ceph-deploy ceph-cluster]$ ceph pg ls-by-pool mypool | awk '{print
$1,$2,$15}' #验证 PG 与 PGP 组合
[cephadmin@ceph-deploy ceph-cluster]$ ceph osd pool ls
mypool
或者:
[cephadmin@ceph-deploy ceph-cluster]$ rados lspools
mypool
当前的 ceph 环境还没还没有部署使用块存储和文件系统使用 ceph,也没有使用对象存储的客户端,但是 ceph 的 rados 命令可以实现访问 ceph 对象存储的功能:
上传文件:
cephadmin@ceph-deploy:~/ceph-cluster$ rados put test-log ceph-deploy-ceph.log --pool=mypool #把 ceph-deploy-ceph.log 文件上传到 mypool 并指定对象 id 为 test-log
列出文件:
cephadmin@ceph-deploy:~/ceph-cluster$ rados ls --pool=mypool
test-log
文件详情:
ceph osd map 命令可以获取到存储池中数据对象的具体位置信息:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd map mypool test-log
osdmap e175 pool 'mypool' (5) object 'test-log' -> pg 5.d95e430 (5.30) -> up ([7,3,10], p7) acting ([7,3,10], p7)
上面的命令结果说明:
1、osdmap e175
: e175
表示当前的OSD map
版本(epoch 175
)。OSD map 是维护Ceph OSD状态和分布信息的一个数据结果,每个版本都有一个唯一的epoch标识
2、pool 'mypool'
:mypool
是对象所在的池名,(5)
是池的ID。在Ceph中,每个池都有一个唯一的ID。
3、object 'test-log'
:上传的对象名
4、-> pg 5.d95e430 (5.30)
: 5.d95e430
是对象所属的PG的哈希值标识。5
指的是池ID,d95e430
是由对象名和池ID计算出的哈希值的一部分,(5,30)
表示PG的编号,5
还是池ID,而30
是PG的索引号
5、-> up ([7,3,10],p7)
:up
是当前PG副本分布的状态,[7,3,10]
是当前PG的主副本和其他副本所在的osd id列表,p7
表示主OSD的ID是7
6、acting ([7,3,10], p7)
:acting
是当前pg实际上在那些OSD上有副本,[7, 3, 10]
和 up 部分相同,表示这些 OSD 是当前实际在参与处理这个 PG 请求的 OSD,p7
再次确认了主 OSD 是 7
上面那条命令的结果可以得知,对象
test-log
在池mypool
中被映射到PG 5.30 (哈希值5.d95e430 )
,这个PG的主副本
在OSD7
,另外两个副本在OSD3
和OSD10
,up和acting
状态表名这些OSD都是健康
的且正在参与处理这个pg的请求
。
也可以通过下面的命令查看,5.30,[7,3,10]p7 ,池id5,pg索引30,主osd是7,从osd是3和10
cephadmin@ceph-deploy:~/ceph-cluster$ ceph pg ls-by-pool mypool |awk '{print $1,$2,$15}'
PG OBJECTS UP
5.0 0 [10,1,4]p10
5.1 0 [4,3,9]p4
5.2 0 [6,0,10]p6
5.3 0 [0,6,15]p0
5.4 0 [10,2,12]p10
5.5 0 [0,15,6]p0
5.6 0 [2,5,14]p2
5.7 0 [14,1,9]p14
5.8 0 [14,10,2]p14
5.9 0 [14,11,6]p14
5.a 0 [2,8,4]p2
5.b 0 [13,0,5]p13
5.c 0 [1,15,6]p1
5.d 0 [12,11,5]p12
5.e 0 [13,8,0]p13
5.f 0 [5,11,2]p5
5.10 0 [12,8,6]p12
5.11 0 [14,4,9]p14
5.12 0 [8,12,3]p8
5.13 0 [15,10,3]p15
5.14 0 [3,10,4]p3
5.15 0 [5,1,8]p5
5.16 0 [5,12,1]p5
5.17 0 [3,9,15]p3
5.18 0 [4,11,13]p4
5.19 0 [1,5,8]p1
5.1a 0 [13,8,7]p13
5.1b 0 [5,0,14]p5
5.1c 0 [14,11,2]p14
5.1d 0 [15,4,10]p15
5.1e 0 [12,7,11]p12
5.1f 0 [6,14,8]p6
5.20 0 [8,4,1]p8
5.21 0 [6,2,9]p6
5.22 0 [10,15,5]p10
5.23 0 [11,3,12]p11
5.24 0 [14,1,7]p14
5.25 0 [13,8,5]p13
5.26 0 [11,15,0]p11
5.27 0 [10,7,1]p10
5.28 0 [13,8,3]p13
5.29 0 [0,7,9]p0
5.2a 0 [13,3,8]p13
5.2b 0 [4,0,13]p4
5.2c 0 [2,8,6]p2
5.2d 0 [3,9,13]p3
5.2e 0 [14,2,9]p14
5.2f 0 [11,12,4]p11
5.30 1 [7,3,10]p7
5.31 0 [13,11,6]p13
5.32 0 [3,11,4]p3
5.33 0 [2,12,9]p2
5.34 0 [5,3,12]p5
5.35 0 [7,10,13]p7
5.36 0 [1,8,14]p1
5.37 0 [4,12,10]p4
5.38 0 [7,2,11]p7
5.39 0 [7,11,14]p7
5.3a 0 [3,8,12]p3
5.3b 0 [10,3,15]p10
5.3c 0 [1,4,12]p1
5.3d 0 [5,8,1]p5
5.3e 0 [11,3,4]p11
5.3f 0 [8,12,0]p8
下载文件:
[cephadmin@ceph-deploy ceph-cluster]$ sudo rados get test-log --pool=mypool /opt/my.txt
[cephadmin@ceph-deploy ceph-cluster]$ ll /opt/
total 180
-rw-r--r-- 1 root root 180766 Jun 1 15:01 my.txt
验证下载文件:
[cephadmin@ceph-deploy ceph-cluster]$ head /opt/my.txt
修改文件:
[cephadmin@ceph-deploy ceph-cluster]$ sudo rados put test-log /etc/passwd --pool=mypool
[cephadmin@ceph-deploy ceph-cluster]$ sudo rados get test-log --pool=mypool /opt/2.txt
验证下载文件:
[cephadmin@ceph-deploy ceph-cluster]$ tail /opt/2.txt
删除文件:
[cephadmin@ceph-deploy ceph-cluster]$ sudo rados rm test-log --pool=mypool
[cephadmin@ceph-deploy ceph-cluster]$ rados ls --pool=mypool
2.5 扩展ceph集群实现高可用
主要是扩展ceph集群的mon节点以及mgr节点,已实现集群高可用
2.5.1 扩展ceph-mon节点
Ceph-mon 是原生具备自选举以实现高可用机制的 ceph 服务,节点数量通常是奇数。
ubuntu:
root@ceph-mon2:~# apt install ceph-mon
root@ceph-mon3:~# apt install ceph-mon
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy mon add ceph-mon2
[ceph-mon2][DEBUG ] "name": "ceph-mon2",
[ceph-mon2][DEBUG ] "outside_quorum": [],
[ceph-mon2][DEBUG ] "quorum": [],
[ceph-mon2][DEBUG ] "rank": -1,
[ceph-mon2][DEBUG ] "state": "probing",
[ceph-mon2][DEBUG ] "sync_provider": []
[ceph-mon2][DEBUG ] }
[ceph-mon2][DEBUG ] ********************************************************************************
[ceph-mon2][INFO ] monitor: mon.ceph-mon2 is currently at the state of probing
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy mon add ceph-mon3
[ceph-mon3][DEBUG ] "name": "ceph-mon3",
[ceph-mon3][DEBUG ] "outside_quorum": [],
[ceph-mon3][DEBUG ] "quorum": [],
[ceph-mon3][DEBUG ] "rank": -1,
[ceph-mon3][DEBUG ] "state": "probing",
[ceph-mon3][DEBUG ] "sync_provider": []
[ceph-mon3][DEBUG ] }
[ceph-mon3][DEBUG ] ********************************************************************************
[ceph-mon3][INFO ] monitor: mon.ceph-mon3 is currently at the state of probing
2.5.2 验证ceph-mon状态
[cephadmin@ceph-deploy ceph-cluster]$ ceph quorum_status
[cephadmin@ceph-deploy ceph-cluster]$ ceph quorum_status --format json-pretty
2.5.3 扩展mgr节点
安装:
~# apt install ceph-mgr
添加:
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy mgr create ceph-mgr2
[cephadmin@ceph-deploy ceph-cluster]$ ceph-deploy admin ceph-mgr2 #同步配置文件到 ceph-mg2 节点