Ceph命令总结

环境:Ceph版本J版,操作系统CentOS7.4

1.集群相关

查看集群健康状况

[root@ceph-client ~]# ceph health
HEALTH_OK

查看集群状态

[root@ceph-client ~]# ceph -s
    cluster 9c424511-ade9-45e3-be88-24d72232dd7a
     health HEALTH_OK
     monmap e1: 3 mons at {ceph-node01=11.10.37.85:6789/0,ceph-node02=11.10.37.86:6789/0,ceph-node03=11.10.37.87:6789/0}
            election epoch 6, quorum 0,1,2 ceph-node01,ceph-node02,ceph-node03
     osdmap e53: 6 osds: 6 up, 6 in
            flags sortbitwise,require_jewel_osds
      pgmap v287192: 576 pgs, 5 pools, 104 MB data, 46 objects
            482 MB used, 599 GB / 599 GB avail
                 576 active+clean

查看存储空间使用情况

[root@ceph-client ~]# ceph df
GLOBAL:
    SIZE     AVAIL     RAW USED     %RAW USED 
    599G      599G         482M          0.08 
POOLS:
    NAME               ID     USED       %USED     MAX AVAIL     OBJECTS 
    rbd                0           0         0          284G           0 
    cinder-volumes     1      61534k      0.02          284G          28 
    nova-vms           2      32768k      0.01          284G          11 
    glance-images      3      12976k         0          284G           7 
    cinder-backups     4           0         0          284G           0 

2.monitor相关

查看 mon map

[root@ceph-client ~]# ceph mon stat
e1: 3 mons at {ceph-node01=11.10.37.85:6789/0,ceph-node02=11.10.37.86:6789/0,ceph-node03=11.10.37.87:6789/0}, election epoch 6, quorum 0,1,2 ceph-node01,ceph-node02,ceph-node03

或者:

[root@ceph-client ~]# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 9c424511-ade9-45e3-be88-24d72232dd7a
last_changed 2017-12-27 22:14:53.298144
created 2017-12-27 22:14:53.298144
0: 11.10.37.85:6789/0 mon.ceph-node01
1: 11.10.37.86:6789/0 mon.ceph-node02
2: 11.10.37.87:6789/0 mon.ceph-node03

查看 mon 的法定人数状态

ceph quorum_status -f json-pretty

Ceph 会返回法定人数状态,例如,包含 3 个监视器的 Ceph 集群可能返回下面
的内容:

[root@ceph-client ~]# ceph quorum_status -f json-pretty

{
    "election_epoch": 6,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "ceph-node01",
        "ceph-node02",
        "ceph-node03"
    ],
    "quorum_leader_name": "ceph-node01",
    "monmap": {
        "epoch": 1,
        "fsid": "9c424511-ade9-45e3-be88-24d72232dd7a",
        "modified": "2017-12-27 22:14:53.298144",
        "created": "2017-12-27 22:14:53.298144",
        "mons": [
            {
                "rank": 0,
                "name": "ceph-node01",
                "addr": "11.10.37.85:6789\/0"
            },
            {
                "rank": 1,
                "name": "ceph-node02",
                "addr": "11.10.37.86:6789\/0"
            },
            {
                "rank": 2,
                "name": "ceph-node03",
                "addr": "11.10.37.87:6789\/0"
            }
        ]
    }
}

3.pool相关

列出存储池

[root@ceph-client ~]# ceph osd lspools
0 rbd,1 cinder-volumes,2 nova-vms,3 glance-images,4 cinder-backups,

创建存储池

ceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated] [crush-ruleset-name] [expected-num-objects]
ceph osd pool create {pool-name} {pg-num} {pgp-num} erasure [erasure-code-profile] [crush-ruleset-name] [expected_num_objects]

各参数含义如下:
{pool-name} :存储池名称,必须唯一。
{pg_num} : 存储池的 PG 数目。
{pgp_num} : 存储池的 PGP 数目,此值应该和 PG 数目相等。
{replicated|erasure} :存储池类型,可以是副本池(保存多份对象副本,以便从丢失的 OSD 恢复)或纠删池(获得类似 RAID5 的功能)。多副本存储池需更多原始存储空间,但已实现所有 Ceph 操作;纠删存储池所需原始存储空间较少,但目前仅实现了部分 Ceph 操作。
[crush-ruleset-name] :此存储池所用的 CRUSH 规则集名字。指定的规则集必须存在。对于多副本( replicated )存储池来说,其默认规则集由 osd pool default crush replicated ruleset 配置决定,此规则集必须存在。 对于用 erasure-code 编码的纠删码( erasure )存储池来说,不同的 {pool-name} 所使用的默认( default )纠删码配置是不同的,如果它不存在的话,会显式地创建它。
[erasure-code-profile=profile] :仅用于纠删存储池。指定纠删码配置文件,此配置必须已由 osd erasure-code-profile set 定义。
[expected-num-objects] :为这个存储池预估的对象数。设置此值(要同时把 filestore merge threshold 设置为负数)后,在创建存储池时就会拆分PG 文件夹,以免运行时拆分文件夹导致延时增大。

设置存储池配额

存储池配额可设置最大字节数、和/或每个存储池最大对象数。

ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}]

例如:

ceph osd pool set-quota data max_objects 10000

要取消配额,设置为 0 即可。

查看存储池统计信息

rados df

给存储池做快照

ceph osd pool mksnap {pool-name} {snap-name}

删除存储池的快照

ceph osd pool rmsnap {pool-name} {snap-name}

获取存储池选项值

ceph osd pool get {pool-name} {key}

调整存储池选项值

ceph osd pool set {pool-name} {key} {value}

常用选项介绍:
size :设置存储池中的对象副本数,详情参见设置对象副本数。仅适用于副本存储池。
min_size :设置 I/O 需要的最小副本数,详情参见设置对象副本数。仅适用于副本存储池。
pg_num :计算数据分布时的有效 PG 数。只能大于当前 PG 数。
pgp_num :计算数据分布时使用的有效 PGP 数量。小于等于存储池的 PG数。

设置对象副本数

ceph osd pool set {poolname} size {num-replicas}

例如:

ceph osd pool set cinder-volumes size 3

你可以在每个存储池上执行这个命令。注意,一个处于降级模式的对象,其副本数小于 pool size ,但仍可接受 I/O 请求。为保证 I/O 正常,可用 min_size 选项为其设置个最低副本数。例如:

ceph osd pool set cinder-volumes size min_size 2

这确保 cinder-volumes 存储池里任何副本数小于 min_size 的对象都不会收到 I/O 了。

获取对象副本数

ceph osd dump | grep 'replicated size'

Ceph 会列出存储池,且高亮 replicated size 属性。

4.osd相关

检查 OSD 状态

[root@ceph-client ~]# ceph osd stat
     osdmap e53: 6 osds: 6 up, 6 in
            flags sortbitwise,require_jewel_osds

或者

ceph osd dump

也可以根据 OSD 在 CRUSH MAP 里的位置来查看

ceph osd tree

Ceph 会打印 CRUSH 树,包括 host 的名称、它上面的 OSD 例程、状态及权重:

[root@ceph-client ~]# ceph osd tree
ID WEIGHT  TYPE NAME            UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.58557 root default                                           
-2 0.19519     host ceph-node01                                   
 0 0.09760         osd.0             up  1.00000          1.00000 
 1 0.09760         osd.1             up  1.00000          1.00000 
-3 0.19519     host ceph-node02                                   
 2 0.09760         osd.2             up  1.00000          1.00000 
 3 0.09760         osd.3             up  1.00000          1.00000 
-4 0.19519     host ceph-node03                                   
 4 0.09760         osd.4             up  1.00000          1.00000 
 5 0.09760         osd.5             up  1.00000          1.00000 

5.pg相关

查看所有 PG 状态

[root@ceph-client ~]# ceph pg stat
v470724: 576 pgs: 576 active+clean; 104 MB data, 485 MB used, 599 GB / 599 GB avail

PG ID 由存储池号(不是存储池名字)后面跟一个点( . )再加一个 16 进制数字的num 。
完整的 PG ID 格式如下:

{pool-num}.{pg-num}

典型例子:
1.d8

获取 PG 列表

ceph pg dump

你也可以让它输出到 JSON 格式,并保存到文件

ceph pg dump -o {filename} --format=json

查看指定 PG 的 Acting Set 或 Up Set 中包含的 OSD

ceph pg map {pg-id}

命令的输出会告诉你 osdmap 版本( eNNN )、PG ID( {pg-id} )、Up Set 内
的 OSD ( up[] )、和 Acting Set 内的 OSD ( acting[]

[root@ceph-client ~]# ceph pg map 1.d8
osdmap e58 pg 1.d8 (1.d8) -> up [2,4] acting [2,4]

要查询某个 PG,用下列命令:

ceph pg {pg-id} query
[root@ceph-client ~]# ceph pg 1.d8 query
{
    "state": "active+clean",
    "snap_trimq": "[]",
    "epoch": 58,
    "up": [
        2,
        4
    ],
    "acting": [
        2,
        4
    ],
    "actingbackfill": [
        "2",
        "4"
    ],
    "info": {
        "pgid": "1.d8",
        "last_update": "0'0",
        "last_complete": "0'0",
        "log_tail": "0'0",
......

6.rbd相关

在存储池 rbd 中创建一个image

[root@ceph-client ~]# rbd create rbd/test_image --size 512 --image-format 2

查看创建出的image

[root@ceph-client ~]# rbd ls rbd
test_image

查看image详细信息

[root@ceph-client ~]# rbd info rbd/test_image
rbd image 'test_image':
    size 512 MB in 128 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.1ab382ae8944a
    format: 2
    features: layering
    flags: 

为image创建快照

[root@ceph-client ~]# rbd snap create rbd/test_image@test_image_snap

查看快照

[root@ceph-client ~]# rbd snap list rbd/test_image
SNAPID NAME              SIZE 
     4 test_image_snap 512 MB 

或者

[root@ceph-client ~]# rbd ls rbd -l
NAME                       SIZE PARENT FMT PROT LOCK 
test_image                 512M          2           
test_image@test_image_snap 512M          2  

查看快照详细信息

[root@ceph-client ~]# rbd info rbd/test_image@test_image_snap
rbd image 'test_image':
    size 512 MB in 128 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.1ab382ae8944a
    format: 2
    features: layering
    flags: 
    protected: False

克隆
在克隆前,快照必须处于被保护的状态

[root@ceph-client ~]# rbd snap protect rbd/test_image@test_image_snap
[root@ceph-client ~]# rbd info rbd/test_image@test_image_snap
rbd image 'test_image':
    size 512 MB in 128 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.1ab382ae8944a
    format: 2
    features: layering
    flags: 
    protected: True

克隆快照成一个新的image

[root@ceph-client ~]# rbd clone rbd/test_image@test_image_snap rbd/test_image2

新的image依赖父image

[root@ceph-client ~]# rbd ls rbd -l
NAME                       SIZE PARENT                         FMT PROT LOCK 
test_image                 512M                                  2           
test_image@test_image_snap 512M                                  2 yes       
test_image2                512M rbd/test_image@test_image_snap   2   

查看快照的孩子

[root@ceph-client ~]# rbd children rbd/test_image@test_image_snap
rbd/test_image2

把分层的image变成扁平的没有层级的image

[root@ceph-client ~]# rbd flatten rbd/test_image2
Image flatten: 100% complete...done.

再次查看rbd/test_image2已经没有父了,即断开了依赖关系

[root@ceph-client ~]# rbd ls rbd -l
NAME                       SIZE PARENT FMT PROT LOCK 
test_image                 512M          2           
test_image@test_image_snap 512M          2 yes       
test_image2                512M          2  

导出

[root@ceph-client ~]# rbd export rbd/test_image /tmp/test_image_export
Exporting image: 100% complete...done.
[root@ceph-client ~]# ls /tmp/test_image_export
/tmp/test_image_export

导入

[root@ceph-client ~]# rbd import /tmp/test_image_export rbd/test_image3  --image-format 2
Importing image: 100% complete...done.
[root@ceph-client ~]# rbd ls rbd -l
NAME                       SIZE PARENT FMT PROT LOCK 
test_image                 512M          2           
test_image@test_image_snap 512M          2 yes       
test_image2                512M          2           
test_image3                512M          2 

删除image

[root@ceph-client ~]# rbd rm rbd/test_image3
Removing image: 100% complete...done.

7.rados相关

查看ceph集群中的pool

[root@ceph-client ~]# rados lspools
rbd
cinder-volumes
nova-vms
glance-images
cinder-backups

查看ceph集群中的pool和每个pool容量及利用情况

[root@ceph-client ~]# rados df
pool name                 KB      objects       clones     degraded      unfound           rd        rd KB           wr        wr KB
cinder-backups             0            0            0            0            0            0            0            0            0
cinder-volumes         61535           28            5            0            0       884751       624915          678        62335
glance-images          12977            7            0            0            0          485        39303           48        25957
nova-vms               32769           11            0            0            0         2041        39871          702        66486
rbd                        0            0            0            0            0            0            0            0            0
  total used          494332           46
  total avail      628337828
  total space      628832160

8.用户管理

列出所有用户
ceph auth list

[root@ceph-client ~]# ceph auth list
installed auth entries:

osd.0
    key: AQDarENapJjVLxAAAla0ZqKL5tqevhVXJTEv5g==
    caps: [mon] allow profile osd
    caps: [osd] allow *
......
client.admin
    key: AQDqqkNaJu2sHxAA42E4ITCyZys9P7Fq4amruQ==
    caps: [mds] allow *
    caps: [mon] allow *
    caps: [osd] allow *
......
client.cinder
    key: AQCjhFRaOSXzIRAAhV1SV8FoWjDPgTj5l6HO6Q==
    caps: [mon] allow r
    caps: [osd] allow class-read object_prefix rbd_children, allow rwx pool=cinder-volumes, allow rwx pool=nova-vms ,allow rx pool=glance-images
......

注意 TYPE.ID 这种用户表示方法,比如 osd.0 表示用户类型是 osd 且其 ID是 0 , client.admin表示用户类型是 client 且其 ID 是 admin (即默认的 client.admin 用户)。另外,每个用户条目都有一个 key: 对,一个或多个 caps: 条目。

获取某个用户信息

ceph auth get {TYPE.ID}

ceph auth get client.admin

[root@ceph-client ~]# ceph auth get client.cinder
exported keyring for client.cinder
[client.cinder]
    key = AQCjhFRaOSXzIRAAhV1SV8FoWjDPgTj5l6HO6Q==
    caps mon = "allow r"
    caps osd = "allow class-read object_prefix rbd_children, allow rwx pool=cinder-volumes, allow rwx pool=nova-vms ,allow rx pool=glance-images"

增加用户
增加一个用户就是创建一个用户名(即 TYPE.ID )、一个密钥和任何包含在创建命令中的能力。有以下几种方式可以新增一个用户:
ceph auth add :此命令是最权威的新增用户方式。它回新建一个用户,产生一个 key ,并赋予用户任何给定的能力。
ceph auth get-or-create :这种方式通常是最便捷的一种,因为它的返回值是包含用户名(在方括号内)和密钥的格式。如果用户已经存在,该命令会返回密钥文件格式的用户名和密钥信息。可以使用 -o {filename} 选项把输入保存到一个文件中。
ceph auth get-or-create-key :该命令可以很方便地创建用户,但是只会返回用户的密钥。对于某些只需要密钥的用户(如 libvirt )来说是很有用的。如果用户已经存在,该命令仅仅返回用户的密钥。可以使用 -o {filename} 选项把输入保存到一个文件中。

比如下面命令:

ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=cinder-volumes, allow rwx pool=nova-vms ,allow rx pool=glance-images'

删除用户

ceph auth del {TYPE}.{ID}

其中, {TYPE} 是 client , osd , mon 或 mds 的其中一种。 {ID} 是用户的名字或守护进程的 ID 。

参考文档:
Ceph运维手册 https://github.com/lihaijing/ceph-handbook
Ceph分布式存储实战

你可能感兴趣的:(ceph)