[toc]

一、集群监控管理

集群整体运行状态

  1. [root@cephnode01 ~]# ceph -s
  2. cluster:
  3. id: 8230a918-a0de-4784-9ab8-cd2a2b8671d0
  4. health: HEALTH_WARN
  5. application not enabled on 1 pool(s)
  6. services:
  7. mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 27h)
  8. mgr: cephnode01(active, since 53m), standbys: cephnode03, cephnode02
  9. osd: 4 osds: 4 up (since 27h), 4 in (since 19h)
  10. rgw: 1 daemon active (cephnode01)
  11. data:
  12. pools: 6 pools, 96 pgs
  13. objects: 235 objects, 3.6 KiB
  14. usage: 4.0 GiB used, 56 GiB / 60 GiB avail
  15. pgs: 96 active+clean
  1. id:集群ID
  2. health:集群运行状态,这里有一个警告,说明是有问题,意思是pg数大于pgp数,通常此数值相等。
  3. monMonitors运行状态。
  4. osdOSDs运行状态。
  5. mgrManagers运行状态。
  6. mdsMetadatas运行状态。
  7. pools:存储池与PGs的数量。
  8. objects:存储对象的数量。
  9. usage:存储的理论用量。
  10. pgsPGs的运行状态
  1. ~]$ ceph -w
  2. ~]$ ceph health detail

PG状态

查看pg状态查看通常使用下面两个命令即可,dump可以查看更详细信息,如。

  1. ~]$ ceph pg dump
  2. ~]$ ceph pg stat

Pool状态

  1. ~]$ ceph osd pool stats
  2. ~]$ ceph osd pool stats

OSD状态

  1. ~]$ ceph osd stat
  2. ~]$ ceph osd dump
  3. ~]$ ceph osd tree
  4. ~]$ ceph osd df

Monitor状态和查看仲裁状态

  1. ~]$ ceph mon stat
  2. ~]$ ceph mon dump
  3. ~]$ ceph quorum_status

集群空间用量

  1. ~]$ ceph df
  2. ~]$ ceph df detail

二、集群配置管理(临时和全局,服务平滑重启)

有时候需要更改服务的配置,但不想重启服务,或者是临时修改。这时候就可以使用tell和daemon子命令来完成此需求。

1、查看运行配置

  1. 命令格式:
  2. # ceph daemon {daemon-type}.{id} config show
  3. 命令举例:
  4. # ceph daemon osd.0 config show

2、tell子命令格式

使用 tell 的方式适合对整个集群进行设置,使用 * 号进行匹配,就可以对整个集群的角色进行设置。而出现节点异常无法设置时候,只会在命令行当中进行报错,不太便于查找。

  1. 命令格式:
  2. # ceph tell {daemon-type}.{daemon id or *} injectargs --{name}={value} [--{name}={value}]
  3. 命令举例:
  4. # ceph tell osd.0 injectargs --debug-osd 20 --debug-ms 1
  • daemon-type:为要操作的对象类型如osd、mon、mds等。
  • daemon id:该对象的名称,osd通常为0、1等,mon为ceph -s显示的名称,这里可以输入*表示全部。
  • injectargs:表示参数注入,后面必须跟一个参数,也可以跟多个

3、daemon子命令

使用 daemon 进行设置的方式就是一个个的去设置,这样可以比较好的反馈,此方法是需要在设置的角色所在的主机上进行设置。

  1. 命令格式:
  2. # ceph daemon {daemon-type}.{id} config set {name}={value}
  3. 命令举例:
  4. # ceph daemon mon.ceph-monitor-1 config set mon_allow_pool_delete false

三、集群操作

命令包含start、restart、status

  1. 1、启动所有守护进程
  2. # systemctl start ceph.target
  3. 2、按类型启动守护进程
  4. # systemctl start ceph-mgr.target
  5. # systemctl start ceph-osd@id
  6. # systemctl start ceph-mon.target
  7. # systemctl start ceph-mds.target
  8. # systemctl start ceph-radosgw.target

四、添加和删除OSD

1、添加OSD

  1. 1、格式化磁盘
  2. ceph-volume lvm zap /dev/sd<id>
  3. 2、进入到ceph-deploy执行目录/my-cluster,添加OSD
  4. # ceph-deploy osd create --data /dev/sd<id> $hostname

2、删除OSD

  1. 1、调整osdcrush weight 0
  2. ceph osd crush reweight osd.<ID> 0.0
  3. 2、将osd进程stop
  4. systemctl stop ceph-osd@<ID>
  5. 3、将osd设置out
  6. ceph osd out <ID>
  7. 4、立即执行删除OSD中数据
  8. ceph osd purge osd.<ID> --yes-i-really-mean-it
  9. 5、卸载磁盘
  10. umount /var/lib/ceph/osd/ceph-?

五、扩容PG

  1. ceph osd pool set {pool-name} pg_num 128
  2. ceph osd pool set {pool-name} pgp_num 128

注:
1、扩容大小取跟它接近的2的N次方
2、在更改pool的PG数量时,需同时更改PGP的数量。PGP是为了管理placement而存在的专门的PG,它和PG的数量应该保持一致。如果你增加pool的pg_num,就需要同时增加pgp_num,保持它们大小一致,这样集群才能正常rebalancing。

六、Pool操作

列出存储池

  1. ceph osd lspools

创建存储池

  1. 命令格式:
  2. # ceph osd pool create {pool-name} {pg-num} [{pgp-num}]
  3. 命令举例:
  4. # ceph osd pool create rbd 32 32

设置存储池配额

  1. 命令格式:
  2. # ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}]
  3. 命令举例:
  4. # ceph osd pool set-quota rbd max_objects 10000

删除存储池

  1. ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]

重命名存储池

  1. ceph osd pool rename {current-pool-name} {new-pool-name}

查看存储池统计信息

  1. rados df

给存储池做快照

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

删除存储池的快照

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

获取存储池选项值

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

调整存储池选项值

  1. ceph osd pool set {pool-name} {key} {value}
  2. size:设置存储池中的对象副本数,详情参见设置对象副本数。仅适用于副本存储池。
  3. min_size:设置 I/O 需要的最小副本数,详情参见设置对象副本数。仅适用于副本存储池。
  4. pg_num:计算数据分布时的有效 PG 数。只能大于当前 PG 数。
  5. pgp_num:计算数据分布时使用的有效 PGP 数量。小于等于存储池的 PG 数。
  6. hashpspool:给指定存储池设置/取消 HASHPSPOOL 标志。
  7. target_max_bytes:达到 max_bytes 阀值时会触发 Ceph 冲洗或驱逐对象。
  8. target_max_objects:达到 max_objects 阀值时会触发 Ceph 冲洗或驱逐对象。
  9. scrub_min_interval:在负载低时,洗刷存储池的最小间隔秒数。如果是 0 ,就按照配置文件里的 osd_scrub_min_interval
  10. scrub_max_interval:不管集群负载如何,都要洗刷存储池的最大间隔秒数。如果是 0 ,就按照配置文件里的 osd_scrub_max_interval
  11. deep_scrub_interval:“深度”洗刷存储池的间隔秒数。如果是 0 ,就按照配置文件里的 osd_deep_scrub_interval

获取对象副本数

  1. ceph osd dump | grep 'replicated size'

七、用户管理

Ceph 把数据以对象的形式存于各存储池中。Ceph 用户必须具有访问存储池的权限才能够读写数据。另外,Ceph 用户必须具有执行权限才能够使用 Ceph 的管理命令。

1、查看用户信息

  1. 查看所有用户信息
  2. # ceph auth list
  3. 获取所有用户的key与权限相关信息
  4. # ceph auth get client.admin
  5. 如果只需要某个用户的key信息,可以使用pring-key子命令
  6. # ceph auth print-key client.admin

2、添加用户

  1. # ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'
  2. # ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'
  3. # ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
  4. # ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key

3、修改用户权限

  1. # ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool'
  2. # ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool'
  3. # ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'
  4. # ceph auth caps client.ringo mon ' ' osd ' '

4、删除用户

  1. # ceph auth del {TYPE}.{ID}
  2. 其中, {TYPE} clientosdmon mds 的其中一种。{ID} 是用户的名字或守护进程的 ID

八、增加和删除Monitor

一个集群可以只有一个 monitor,推荐生产环境至少部署 3 个。 Ceph 使用 Paxos 算法的一个变种对各种 map 、以及其它对集群来说至关重要的信息达成共识。建议(但不是强制)部署奇数个 monitor 。Ceph 需要 mon 中的大多数在运行并能够互相通信,比如单个 mon,或 2 个中的 2 个,3 个中的 2 个,4 个中的 3 个等。初始部署时,建议部署 3 个 monitor。后续如果要增加,请一次增加 2 个。

1、新增一个monitor

  1. # ceph-deploy mon create $hostname
  2. 注意:执行ceph-deploy之前要进入之前安装时候配置的目录。/my-cluster

2、删除Monitor

  1. # ceph-deploy mon destroy $hostname
  2. 注意: 确保你删除某个 Mon 后,其余 Mon 仍能达成一致。如果不可能,删除它之前可能需要先增加一个。