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
,官方截图如下:
例如:有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默认参数配置及调整
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