本文发布于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中的位置查看OSD
  • ceph 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

进程的运行时配置

在进程的运行当中,设定osdmonmgr等工作特性。

要查看运行时配置,请登录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 国际」 许可协议进行许可。