ceph集群运维

一、ceph守护服务管理

ceph节点可以使用一条命令影响所有服务,也可以更细粒度的去管理单独的守护进程,比如systemctl start ceph.target 指令将停止此节点上所有的ceph相关进程,包括osd、mgr等等,也可以使用systemctl start ceph-osd.target或者systemctl start ceph-osd@{id}来更细粒度的管理某一个服务进程,具体我也没耐心写,如果有需要,还是参考 官方文档吧。

二、监控ceph集群

2.1 查看集群健康状态及其他信息

$ ceph -s  
# 查看集群状态
$ ceph -w
# 动态查看集群状态

2.2 查看存储池资源使用情况

$ ceph df
# 查看存储池使用情况

2.3 查看osd信息

$ ceph osd stat        
# 查看osd状态
$ ceph osd tree         
# 查看osd都运行在哪些节点以及其状态

2.4 查看监控节点信息

$ ceph mon stat      
# 查看监控节点状态
$ ceph mon dump          
# 更直观的查看monitor状态

2.5 查看文件存储详细信息

$ ceph fs dump
# 查看文件存储详细信息

2.6 查看仲裁状态

$ ceph quorum_status
# 查看仲裁状态

三、ceph存储池——pools管理

3.1 查看pools列表

$ ceph osd lspools
# 查看pools列表

3.2 创建pools

在生产中创建pools时,建议参考官方文档去设置pg、pgp和crush的参数,如果未设置,将使用默认值。

# 创建pool的语法如下(官方文档中有具体参数的解释):
ceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated]      [crush-rule-name] [expected-num-objects]

$ ceph osd pool create pool-demo 20 20
# 创建一个pg和pgp都为20、名字为pool-demo的存储池

3.3 查看pool参数

$ ceph osd pool get pool-demo
# 可以执行一条错误的指令,即可输出所有支持查看的参数

$ ceph osd pool get pool-demo size
# 查看指定pool的副本数

$ ceph osd pool get pool-demo pg_num
# 查看指定pool的pg数量

3.4 设置pool参数

基本上支持查看的参数,都可以通过set指令来更改。

$ ceph osd pool set pool-demo size 5
# 设置指定pool的副本数为5

$ ceph osd pool set pool-demo pg_num 32
$ ceph osd pool set pool-demo pgp_num 32
# 设置pool的pg、pgp数量都为32

3.5 关联pool到应用程序

pool在使用前需要与应用程序关联,说白了就是给池分类,ceph提供了三种应用场景:cephfs、rbd和rgw。如果不给pool设置分类,可能会出现告警信息。

# 关于分类相关的操作如下:
$ ceph -h | grep application
osd pool application disable <poolname> <app> {--yes-i-really-mean-  disables use of an application <app> on pool <poolname>
osd pool application enable <poolname> <app> {--yes-i-really-mean-   enable use of an application <app> [cephfs,rbd,rgw] on pool 
osd pool application get {<poolname>} {<app>} {<key>}                get value of key <key> of application <app> on pool <poolname>
osd pool application rm <poolname> <app> <key>                       removes application <app> metadata key <key> on pool <poolname>
osd pool application set <poolname> <app> <key> <value>              sets application <app> metadata key <key> to <value> on pool

$ ceph osd pool application enable pool-demo rbd
# 设置pool类型为rbd

$ ceph osd pool application get pool-demo
{
    "rbd": {}
}
# 查看pool类型

3.6 设置pool的配额

我们可以设置一个pool可以使用的最大字节数或者最大对象数。

$ ceph osd pool set-quota pool-demo max_objects 100
# 设置指定pool最大只能用100个object

$ ceph osd pool get-quota pool-demo
# 查看pool配额
quotas for pool ‘pool-demo‘:
  max objects: 100 objects
  max bytes  : N/A

3.7 重命名pool

$ ceph osd pool rename pool-demo new_pool-demo
# 将 pool-demo 修改为 new_pool-demo

3.8 查看pool利用率、I/O统计信息

$ rados df
# 查看利用率
…………      # 省略部分信息
total_objects    220
total_used       4.0 GiB
total_avail      396 GiB
total_space      400 GiB

$ ceph osd pool stats pool-demo
# 查看指定池或全部的池I/O信息
pool new_pool-demo id 9
  nothing is going on
  
 # 不指定池名字,将输出所有池的I/O信息
 # 上面的输出表示当前池没有任何I/O信息

3.9 删除池

$ ceph osd pool delete new_pool-demo
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool new_pool-demo.  If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.

# 第一次删除报错,那就按照提示信息再删除一次
$ ceph osd pool delete new_pool-demo new_pool-demo --yes-i-really-really-mean-it
pool ‘new_pool-demo‘ removed

四、PG(placement groups)管理

pg主要决定了我们ceph集群中数据的分布情况,pg数量越多,数据也就越分散,PG和PGP数量一定要根据OSD的数量进行调整,计算公式如下,但是最后算出的结果一定要接近或者等于一个2的指数。

Total PGs = (Total_number_of_OSD * 100) / max_replication_count

注意:上面的 * 100并不是固定的,主要取决于你未来的数据是否会增长太多,如果是持续增长的,那么官方建议将这个值设置为200,官方截图如下:

ceph集群运维

例如:有100个osd,3副本,10个pool

Total PGs =100*100/3 = 3333

每个pool的PG=3333/10=333,那么创建pool的时候就指定pg为256或512,一般偏于指定的大一些,也就是512。如下:

$ ceph osd pool create pool_demo2 512
# 创建pool

$ ceph osd pool set ceph-demo pg_num 512
# 若pool已存在,使用以下命令修改pg_num

上面只是一个参考设置方式,官方也提供了一个pg数设置的计算机,官方提供的计算工具,是根据你预估每个pool的数据占比来得出建议的pg数的,下面是openstack的建议配置(当然,你可以适当修改,然后生成新的建议值):

ceph集群运维

五、ceph默认参数配置及调整

5.1 查看ceph的默认参数

$ ceph version    # 确认当前ceph版本
ceph version 14.2.18 (befbc92f3c11eedd8626487211d200c0b44786d9) nautilus (stable)

$ ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-node-11.asok config show | grep "mon_allow_pool_delete"
# 查看默认值
    "mon_allow_pool_delete": "true",
	
$ ceph config help mon_max_osd
# 查看某个配置项的默认值
mon_max_osd - max number of OSDs in a cluster
  (int, advanced)
  Default: 10000
  Can update at runtime: true
  Services: [mon]
  
 # 可以通过  ceph config ls  查看ceph支持的所有配置项

5.2 修改ceph配置参数

# 临时修改(注意各个节点都要修改为一致)
$ ceph --admin-daemon /var/run/ceph/ceph-mon.ceph-node-11.asok config set mon_allow_pool_delete false

# 永久修改
$ vim ceph.conf      # 编辑ceph配置文件后重启相关组件
[mon]
mon allow pool delete = true

# 可以通过ceph-deploy命令分发到其他节点统一修改然后手动重启
$ ceph-deploy --overwrite-conf config push ceph-node-11 ceph-node-12 ceph-node-13

ceph集群运维

上一篇:C++ 面向对象 类和对象-c++对象模型和this指针


下一篇:浅析ADAMoracle多重优势特征