本文总结一些 Ceph 的常用运维命令

#环境说明
操作系统: Ubuntu 18.04 LTS
Ceph 版本: 12.2.12 Luminous (stable)
节点架构: 1 mon(ceph1), 1 mgr(ceph1), 1 mds(ceph1), 3 osd(ceph1, ceph2, ceph3)

#集群操作
(1) 启动集群

# 启动 mon 服务
sudo service ceph-mon@ceph1 start
# 启动 mgr 服务 
sudo service ceph-mgr@ceph1 start
# 启动指定的 OSD 服务
sudo service ceph-osd@0 start 
# 启动所有的 OSD 服务
sudo service ceph-osd@* start
# 启动 MDS 服务
sudo service ceph-mds@ceph1 start

(2) 查看 ceph 的实时运行状态

ceph -w
  cluster:
    id:     0862c251-2970-4329-b171-53a77d52b2d4
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum ceph1
    mgr: ceph1(active)
    osd: 6 osds: 6 up, 6 in

  data:
    pools:   2 pools, 128 pgs
    objects: 5 objects, 198B
    usage:   6.11GiB used, 53.3GiB / 59.4GiB avail
    pgs:     128 active+clean

(3) 查看ceph存储空间

ceph df
GLOBAL:
    SIZE        AVAIL       RAW USED     %RAW USED 
    59.4GiB     53.3GiB      6.11GiB         10.29 
POOLS:
    NAME       ID     USED     %USED     MAX AVAIL     OBJECTS 
    rbd        1      198B         0       25.2GiB           5 
    ecpool     2        0B         0       33.6GiB           0 

(5) 为ceph创建一个 admin 用户并为 admin 用户创建一个密钥,把密钥保存到 /etc/ceph 目录下

ceph auth get-or-create client.admin mds 'allow *' osd 'allow *' mon 'allow *' mgr 'allow *' \
-o /etc/ceph/ceph.client.admin.keyring

(6) 为 osd.0 创建一个用户并创建一个key

ceph auth get-or-create osd.0 mon 'allow profile osd' osd 'allow *' mgr 'allow profile osd' \
        -o /var/lib/ceph/osd/ceph-0/keyring

(7) 为 mds.node1 创建一个用户并创建一个key

ceph auth get-or-create mds.ceph1 mon 'allow profile mds' osd 'allow rwx' mds 'allow *' \
         -o /var/lib/ceph/mds/ceph-node1/keyring

(8) 查看 ceph 集群中的认证用户及相关的 key

ceph auth list

(9) 查看集群的详细配置

ceph daemon mon.ceph1 config show | more

(10) 查看集群健康状态细节

ceph health detail
HEALTH_OK # 如果有故障或者警告的话,这里会输出很多。
#MON 操作
(1) 查看 MON 的状态信息

ceph mon stat
e1: 1 mons at {ceph1=172.31.5.182:6789/0}, election epoch 57, leader 0 ceph1, quorum 0 ceph1

(2) 查看 MON 的选举状态

ceph quorum_status

{"election_epoch":57,"quorum":[0],"quorum_names":["ceph1"],"quorum_leader_name":"ceph1","monmap":{"epoch":1,"fsid":"0862c251-2970-4329-b171-53a77d52b2d4","modified":"2020-05-07 02:16:50.749480","created":"2020-05-07 02:16:50.749480","features":{"persistent":["kraken","luminous"],"optional":[]},"mons":[{"rank":0,"name":"ceph1","addr":"172.31.5.182:6789/0","public_addr":"172.31.5.182:6789/0"}]}}

(3) 查看 MON 的映射信息

ceph mon dump

dumped monmap epoch 1
epoch 1
fsid 0862c251-2970-4329-b171-53a77d52b2d4
last_changed 2020-05-07 02:16:50.749480
created 2020-05-07 02:16:50.749480
0: 172.31.5.182:6789/0 mon.ceph1

(4) 删除一个 MON 节点

ceph mon remove ceph1
# 如果是部署节点,也可以使用 ceph-deploy 删除 
ceph-deploy mon remove ceph1

(5) 获得一个正在运行的 mon map,并保存在指定的文件中

ceph mon getmap -o mon.txt

got monmap epoch 1

(6) 查看上面获得的 map

monmaptool --print mon.txt

monmaptool: monmap file mon.txt
epoch 1
fsid 0862c251-2970-4329-b171-53a77d52b2d4
last_changed 2020-05-07 02:16:50.749480
created 2020-05-07 02:16:50.749480
0: 172.31.5.182:6789/0 mon.ceph1

这其实跟 ceph mon dump 输出的结果是一样的

(7) 把上面的mon map注入新加入的节点

ceph-mon -i ceph1 --inject-monmap mon.txt

(8) 查看 MON 的 amin socket

ceph-conf --name mon.ceph1 --show-config-value admin_socket

/var/run/ceph/ceph-mon.ceph1.asok

(9) 查看 MON 的详细状态

ceph daemon mon.ceph1 mon_status
#OSD 操作
(1) 查看 ceph osd 运行状态

ceph osd stat
6 osds: 6 up, 6 in

(2) 查看 osd 映射信息

ceph osd dump

(3) 查看 osd 的目录树

ceph osd tree

(4) 删除 OSD

# 1. down 掉 OSD
ceph osd down osd.0
# 2. 踢出集群
ceph osd out osd.0
# 3. 移除 OSD 
ceph osd rm osd.0
# 4. 删除授权
ceph auth rm osd.0
# 5. 删除 crush map 
ceph osd crush rm osd.0

(5) 设置 OSD 最大个数

# 获取 OSD 最大个数
ceph osd getmaxosd
# 设置 OSD 最大个数
ceph osd setmaxosd 10 

(6) 设置OSD crush 的权重

ceph osd crush set 3 3.0 host=ceph2

set item id 3 name 'osd.3' weight 3 at location {host=ceph2} to crush map

(7) 查看集群中某个 osd 的配置参数

ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | less
# 另一种方式
ceph -n osd.0 --show-config |grep objectstore

(8) 动态设置集群中 osd 的参数配置

# 设置单个 osd
ceph tell osd.0 injectargs "--osd_recovery_op_priority 63"
# 设置所有的 osd
ceph tell osd.* injectargs "--osd_recovery_op_priority 63"
#MDS 操作
(1) 查看 MDS 状态

ceph mds stat

(2) 查看 MDS 的映射信息

ceph mds dump

(3) 删除 MDS 节点

# 删除第一个 MDS 节点
ceph mds rm 0

mds gid 0 dne

#存储池操作
(1) 查看ceph集群中的pool数量

ceph osd lspools

(2) 创建存储池

ceph osd pool create testpool 128 128 # 128 指 PG 数量

(3) 为一个 ceph pool 配置配额

ceph osd pool set-quota testpool max_objects 10000

(4) 在集群中删除一个 pool

首先要在 ceph.conf 文件中配置允许删除集群:

mon_allow_pool_delete = true

然后重启 MON 进程

sudo service ceph-mon@ceph1 restart

在删除存储池

ceph osd pool delete testpool testpool  --yes-i-really-really-mean-it
#PG 操作
# 查看PG状态
ceph pg stat
# 查看pg组的映射信息
ceph pg dump
# 查看pg中stuck的状态 
ceph pg dump_stuck unclean
ceph pg dump_stuck inactive
ceph pg dump_stuck stale

# 获取 pg_num / pgp_num
ceph osd pool get mytestpool pg_num
ceph osd pool get mytestpool pgp_num

# 设置 pg_num
ceph osd pool set mytestpool pg_num 512
ceph osd pool set mytestpool pgp_num 512

# 恢复一个丢失的pg
ceph pg {pg-id} mark_unfound_lost revert

# 修复 pg 数据 
ceph pg crush repair {pg_id}
ceph pg repair {pg_id}
# 显示非正常状态的pg 
ceph pg dump_stuck inactive|unclean|stale
文档更新时间: 2023-03-09 09:31   作者:admin