本文发布于Cylon的收藏册,转载请著名原文链接~
测试上传/下载对象
存取故据时,客户端必须首先连接至RAD05集群上某存储地,而后根据对像名称由相关的中CRUSH规则完成数据对象寻址。于是为了测试集群的数据存储功能,首先创建一个用于测试的存储池mypool,并设定其PG数量为16个。
ceph osd pool create mypool 16 16
而后,即可将测试文件上传至存储池中。例如下面的rados put
命令将/etc/hosts
rados
lspool 显示存储池
rmpool 删除存储池
mkpool 创建存储池
rados mkpool mypool 32 32
rados mkpool {name} {pgnum} {pgpnum}
rados mkpool test 32 32
$ ceph osd pool create testpool 32 32
pool 'testpool' created
列出存储池
$ ceph osd pool ls
mypool
rbdpool
testpool
$ rados lspools
mypool
rbdpool
testpool
而后即可将测试文件上传到存储池中,例如将rados put
命令将/etc/issue
文件上传至testpool存储池,对象名称仍然较保留文件名issue,而rados ls
可以列出指定存储池中的数据对象
rados put issue /etc/issue --pool=testpool
$ rados ls --pool=testpool # --pool 指定放入那个存储池中去
issue
而ceph osd map
可查看获取到存储池中数据对象的具体位置信息(数据和元数据怎么映射存储的)
ceph osd map testpool issue
$ ceph osd map mypool passwd
osdmap e36 pool 'mypool' (1) object 'passwd' -> pg 1.27292a34 (1.14) -> up ([0,3,2], p0) acting ([0,3,2], p0)
mypool存储池中的对象passwd
被放在pg上1.27292a34
1为存储池编号.
后面的编号可以理解为pg的位图。是pg的编号;up ([0,3,2], p0)
正常可访问编号0、3、2,副本型存储池,crush算法计算得到,0为主osd。活动集acting ([0,3,2], p0)
,此组pg(pg 1.27292a34 (1.14)
)之下所有的osd([0,3,2]
)都处于正常活动状态。
删除数据对象
ceph osd pool rm testpool --yes-i-really-really-mean-it
删除存储池命令存在数据丢失的风险,Ceph于是默认禁止此类操作。管理员需要在ceph.conf
配置文件中启用支持删除存储池的操作后,方可使用如下命令删除存储池。
rados rm issue --pool=mypool
ceph集群的访问接口
Ceph块设备接口
Ceph块设备,也称为RADOS块设备(简称RBD),是一种基于RADOS存储系统支持超配,(thin-provisioned)、可伸缩的条带化数据存储系统,它通过librbd库与OSD进行交互。RBD为KVM等虚拟化技术和云OS(如OpenStack和CloudStack)提供高可用和无限扩展性的存储后端,这些系统以来与libvirt和QEMU实用程序与RBD进行集。
在集群部署完成以后,就具有了RBD接口,RBD接口关键是在客户端的配置。服务端本身可以直接使用。只需创建出存储池,在存储池中就可以创建块设备。块设备主要表现为存储池当中的镜像或映像文件(image)。
客户端基于librbd库即可将RADOS存储集群用作块设备,不过,用于rbd的存储池需要实现启用rbd功能并进行初始化。例如,创建一个名为rbddata的存储池,在启动rbd功能后对其进行初始化
对于rbdpool而言,创建完成后并不能直接使用,因为三种应用程序需要单独进行启用。相关存储池的应用才可以。
ceph osd pool create rbpool 64 ## 指明pg数量
# 默认情况下是裸池
$ ceph osd pool application enable rbdpool rbd
enabled application 'rbd' on pool 'rbdpool'
osd pool application enable <poolname> <app> {--yes-i-really-mean-it} enable use of an application <app> [cephfs,rbd,rgw] on pool <poolname>
rbd pool init -p rbddata
不过,rbd存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image),以及可用映像、创建快照、将映像回滚到快照和查看快照等管理操作。
创建名为img1的映像
rbd create rbdpool/img --size 1G
$ rbd ls -p rbdpool
img
img1
显示映像的相关信息,rbd info
$ rbd info rbdpool/img
rbd image 'img':
size 1 GiB in 256 objects
order 22 (4 MiB objects)
id: 38bb6b8b4567
block_name_prefix: rbd_data.38bb6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Fri Jun 14 17:08:48 2019
在客户端主机上,用户通过内核级的rbd驱动识别相关设备,即可对其进行分区、创建文件系统并挂载使用。
Rank 层级 MDS MDS在哪台服务器 上 Pool 两个存储池,存储池都位于同一个ceph集群之上,所以看到的空间大小是一样的。
检查集群状态
命令:ceph-s
输出信息:
- 集群ID
- 集群运行状况
- 监视器地图版本号和监视器仲裁的状态
- OSD map版本号和OSD的状态
- 归置组map版本
- 归置组和存储池数量
- 所存储数据理论上的数量和所存储对象的数量
- 所存储数据的总量
获取集群的即时状态
- ceph pg stat
- ceph osd pool stat
- ceph df
- ceph df detail
ceph df
输出两端内容:GLOBAL和POOLS
- GLOBAL:存储量概览
- POOLS:存储池列表和每个存储池的理论用量,但出不反应副本、克隆数据或快照
GLOBAL段
- size 集群的整体存储容量
- AVAIL 集群中可以使用的可用空间容量
- RAW USED 已用的原始存储量
- % RAW USED:已用的原始存储量百分比,将此数字与 full ratio和near full ratio搭配使用,可确保您不会用完集群的容量。
检查OSD和Mon的状态
可通过执行以下命令来检查OSD,以确保它们已启动里正在运行
ceph osd stat
ceph osd dump
还可以根据OSD在CRUSH map中的位置查看OSDceph osd tree
- Ceph将列显CRUSH树及主机它的OSD、OSD是否已启动及其权重
$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.09775 root default
-3 0.03897 host stor01
0 hdd 0.01949 osd.0 up 1.00000 1.00000
7 hdd 0.01949 osd.7 up 1.00000 1.00000
-5 0.01959 host stor02
1 hdd 0.00980 osd.1 up 1.00000 1.00000
6 hdd 0.00980 osd.6 up 1.00000 1.00000
-7 0.01959 host stor03
2 hdd 0.00980 osd.2 up 1.00000 1.00000
5 hdd 0.00980 osd.5 up 1.00000 1.00000
-9 0.01959 host stor04
3 hdd 0.00980 osd.3 up 1.00000 1.00000
4 hdd 0.00980 osd.4 up 1.00000 1.00000
集群中存在多个Mon主机时,应该在启动集群之后读取或写入数据之前检查Mon的种裁状态:事实上,管理员也应该定期检查这种仲裁结果。
- 显示监视器映射:
ceph mon stat
命令或者ceph mon dump
$ ceph mon stat
e3: 3 mons at {stor01=10.0.0.4:6789/0,stor02=10.0.0.5:6789/0,stor03=10.0.0.6:6789/0}, election epoch 20, leader 0 stor01, quorum 0,1,2 stor01,stor02,stor03
- 显示伸裁状态:
ceph quorum status
使用管理套接字
每一个socket文件能够用来直接通过它管理对应的sock背后的守护进程。
Ceph的管理套接字接口常用于查询守护进程。
- 套接字默认保存于
/var/run/ceph
目录 - 此接口的使用不能以远程方式进程
命令的使用格式
ceph --admin-daemon /var/run/ceph/{socket-name}
获取使用帮助:
ceph --admin-daemon /var/run/ceph/{socket-name}
停止或重启Ceph集群
停止
- 告知Ceph集群不要将osd标记为out,命令
ceph osd set noout
- 按如下顺序停止守护进程和节点
- 存储客户端
- 网关,例如NFS Ganesha或对象网关
- 元数据服务器
- Ceph OSD
- Ceph Manager
- Ceph Monitor
启动
- 以与停止过程相反的顺序启动节点
- Ceph Monitor
- Ceph Manager
- Ceph OSD
- 元数据服务器
- 网关,例如NFS Ganesha或对象网关
- 存储客户端
- 删除noout标志,命令
ceph osd unset noout
Ceph的配置文件
配置文件结构
- ceph配置文件使用ini语法格式
- ceph在启动时会依次查找多个不同位置的配置文件,如后找的配置文件与前面发生冲突,会覆盖此前的配置信息
- 注释可通过"#",";"
- 配置文件主要有以下几个配置项所组成
[global]
:全局配置,影响ceph存储集群中的所有守护进程[osd]
: 影响Ceph存储集群中的所有ceph-osd守护进程并覆盖全局中的相同设置[mon]
: 影响ceph存储集群中的所有ceph-mon守护进程并覆盖全局中的相同设置[client]
: 影响所有客户端,例如,挂载ceph块设备,ceph对象网关等
每一个独立的配置项是对所有选项生效的,如[mon]
,如有需要对单独的选项进行配置可以使用[mon.id]
加上id进行标识。
-
您可以通过输入由
.
分隔的类型来指定守护程序的特定实例的配置,您可以指定该实例。 并通过实例ID -
ceph osd守护进程的实例id总是数字,但它可能是
ceph monitors
的字母数字- 例如
[mon.a]
、[mon.b]
、[mon.0]
等
- 例如
-
按顺序包含的默认ceph配置文件位置
-
$CEPH_CONF环境变量指定的文件路径路径
-
-c
/path/ceph.conf 使用-c
的命令行选项传递给ceph各应用程序或守护进程的命令行选项 -
/etc/ceph/ceph.conf
-
~/.ceph/config
-
./ceph.conf
用户当前工作目录
在配置文件配置时,还可以使用元变量来引用配置文件中的其他信息或引用ceph集群中的元数据信息做变量替换的。称作元参数或元变量
常用的元参数
cluster
: 当前Ceph集群的名称$type
: 当前服务的类型名称,可能会展开为OSD或mon$id
: 进程的标识符,例如对osd.0来说,其标识符为0$host
:守护进程所在的主机的主机名$name
: 其值为$type.$id
进程的运行时配置
在进程的运行当中,设定osd
、mon
、mgr
等工作特性。
要查看运行时配置,请登录Ceph节点并执行:
ceph daemon {daemon-type}.{id} config show
获取帮助信息
ceph daemon {daemon-type}.{id} help
在运行时获取特定配置设置
ceph daemon {daemon-type}.{id} config get {parameter}
# 例如:
ceph daemon osd.0 config get public_addr
在运行时设置特定配置
设置运行时配置有两种常用方法:
- 使用Ceph mmonitor
ceph tell {daemon-type}.{daemon id or *} injectargs --{name} {value} [--{name}} {value}]
- 例如:
ceph tell osd.0 injectargs '--debug-osd 0/5'
- 使用 administration socket
ceph daemon {daemon-type}.{id} set {name} {type}
- 例如:
ceph osd.0 config set debug_osd 0/5
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2023/09/11-1-ceph-common-cmd/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。