title: Ceph 常用操作
date: 2019-09-03
updated: 2020-03-22
layout: post
comments: true
categories: Ceph
tags: [Linux, Ceph]
keywords: Ceph
description: 本文记录使用 Ceph 过程中常用的命令。
删除 rbd image 时提示有 watcher
查看该 image 信息
1 | root@openstack-compute-02:~# rbd info vm-109-cloudinit --pool cloud-disk |
从 info 中 block_name_prefix: rbd_data.85a71142d8c136 获知 rados 对象名称为 rbd_header.85a71142d8c136 ,然后列出对象所有 watcher:
1 | root@openstack-compute-02:~# rados listwatchers --pool cloud-disk rbd_header.85a71142d8c136 |
或者直接通过 rbd 命令列出 watcher:
1 | root@openstack-compute-02:~# rbd status --pool cloud-disk vm-109-cloudinit |
将 watcher 加入黑名单:
1 | ceph osd blacklist add 192.168.180.116:0/2072981162 |
此时再次查看 image 的 watcher :
1 | root@openstack-compute-02:~# rbd status --pool cloud-disk vm-109-cloudinit |
没有了 watcher 我们就可以继续删除该 image :
1 | rbd rm --pool cloud-disk vm-109-cloudinit |
然后将 watcher 从黑名单剔除或者不手动操作,默认 1 个小时后自动恢复:
1 | root@openstack-compute-02:~# ceph osd blacklist ls |
scrub errors 修复
错误如下:
1 | root@umstor21:~# ceph -s |
查看详细信息:
1 | root@umstor21:~# ceph health detail |
修复 pg
1 | ceph pg repair <pg_id> |
删除 Monitor
更复杂情况参考:https://www.jianshu.com/p/b78cf33e558f
1 | systemctl stop ceph-mon@openstack-compute-02.service |
添加 Monitor
1 | // 预先安装 ceph-common ,再安装 ceph-mon |
ceph-ansible 部署
1 | git clone https://github.com/ceph/ceph-ansible.git |
cd 到 ceph-ansible , 创建 hosts 文件如下:
1 | [CephGroup:children] |
cd 到 group_vars 目录:
1 | cp all.yml.sample all.yml |
回到项目根目录执行安装:
1 | cp site.yml.sample site.yml |
删除集群:
1 | ansible-playbook -i hosts infrastructure-playbooks/purge-cluster.yml |
ceph-ansible 添加 osd
1 | cd /opt/ceph-ansible |
rbd image 使用
1 | // 创建大小为 1G 的 image |
Cinder 创建 Volume 副本并 Boot with it
OpenStack: import existing Ceph volumes in Cinder:https://ceph.com/geen-categorie/openstack-import-existing-ceph-volumes-in-cinder/
查看并修改 crushmap
1 | 1. 获取集群 crushmap |
基本理解:深入理解 ceph crush (1)—- 理解 crush map 文件/Crush 算法:大话 Ceph–CRUSH 那点事儿/Crush 查看:Ceph 实践之 Crushmap 相关。
OSD 过度使用内存
在使用 Bluestore 时,bluestore_cache_autotune 默认已经启用,Bluestore 会将 OSD 堆内存使用量保持在指定的大小之下,通过配置选项 osd_memory_target 来控制,默认为 4G。对于内存较少但 OSD 节点较多的情况,仍然会可能造成内存几乎全部被 OSD 所用,最终致使宿主机死机。可以通过两种方式来缓解这种情况,一种是在启用自动配置时调小 osd_memory_target 值,例如:
1 | [osd] |
另一种是禁用自动配置并手动指定缓存大小:
1 | [osd] |
ceph 查看存储池 IO
1 | ceph osd pool stats |
ceph 总体及各存储池使用量
1 | ceph df detail |
删除存储池
1 | $ ceph tell mon.\* injectargs '--mon-allow-pool-delete=true' |
rados 对象操作
1 | // 上传文件 |
挂载 cephfs 到本地
用户态挂载
1 | yum install ceph-fuse -y |
内核态挂载
1 | mount -t ceph 192.168.0.1:6789,192.168.0.2:6789:/ /mnt/cephfs -o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ== |
写入到 fstab 中,开机自动挂载
1 | 192.168.180.125:6789,192.168.180.115:6789:/ /mnt/cephfs ceph name=admin,secret=AQAoDAZdss8dEhAA1IQSOpkYbJrUN8vTceYKMw==,_netdev,noatime 0 0 |
开启存储池 pg_num 自动调整
1 | // 启用自动调整模块 |
删除 OSD 节点
参考先删后增节点时如何减少数据迁移:https://www.cnblogs.com/schangech/p/8036191.html
1 | // 停止指定 OSD 进程 |
CentOS 安装 ceph-common
1 | rpm -Uvh https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm |
查看使用 ceph-volume 创建的 osd 信息
ceph-volume 使用逻辑卷创建 osd,ceph-disk 使用物理盘创建 osd,物理盘创建的 osd 与 盘符对应关系往往一目了然,逻辑卷创建的 osd 与盘符的对应关系需要执行以下命令查询:
1 | ceph-volume inventory /dev/sda |
/var/lib/ceph/osd/ceph-x 使用内存盘
使用 bluestore 的 OSD,所有需要持久化的数据均存储在 LVM metadata 中,所以 /var/lib/ceph/osd/ceph-x 使用 tmpfs 是预期行为, OSD 启动时会从 metadata 中取出相关数据填充到 tmpfs 文件中。参见:http://lists.ceph.com/pipermail/ceph-users-ceph.com/2019-February/032797.html
osd (near) full 的解决方法
根本解决之道是添加 osd,临时解决方法是删除无用数据,osd full 时所有的读写操作都无法进行,可通过两种方法恢复读写后再执行删除数据的命令:
- 一是调整 full osd 的权重:
ceph osd crush reweight osd.33 0.7
或者ceph osd reweight-by-utilization
- 二是调高 full 的上限:
ceph osd set-full-ratio 0.98
,参见:no-free-drive-space