2021-11-14 15:52:46 +08:00

178 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Ceph 笔记"
date: 2019-10-30T11:44:37+08:00
lastmod: 2019-10-30T11:44:37+08:00
tags: ["ceph"]
categories: ["storage"]
---
## 测试环境
操作系统 | 主机名 | IP | OSD 设备 | OSD ID | 容量 | ceph 版本
---- | ---- | ---- | ---- | ---- | ---- | ----
CentOS7 | ceph101 | 192.168.1.101 | /dev/sdb | 0 | 3TB | jewel
CentOS7 | ceph102 | 192.168.1.102 | /dev/sdb | 1 | 3TB | jewel
CentOS7 | ceph103 | 192.168.1.103 | /dev/sdb | 2 | 3TB | jewel
- ceph 部署机
- 操作系统: CentOS7
- 部署用户: cephdeploy
- 操作目录: /home/cephdeploy/ceph-cluster
- IP: 192.168.1.100
## 新增 OSD
- 设置 ceph 三个 noflag禁止 ceph 自动迁移数据
```bash
# 在任一节点上执行下面命令即可
ceph osd set noout
ceph osd set nobackfill
ceph osd set norecover
ceph -s # 此时能看到这三个 flag而且集群处于不健康状态
```
- 关闭这三台 ceph 服务器, 加装新的磁盘,个人认为无需配置多盘 raid
- 启动这三台 ceph 服务器,此时 ceph 自动启动,那三个 noflag 依旧有效
- 此时查看每台服务器的存储,应该能看到新增的一个或多个裸磁盘
```bash
lsblk
```
- 这里假设每台服务器新增两个磁盘(/dev/sdc,/dev/sdd),都配置成 osd
```bash
# 在 ceph 部署机上执行以下命令
su - cephdeploy
cd /home/cephdeploy/ceph-cluster
# 每次创建一个,别浪 ...
ceph-deploy osd create ceph101:/dev/sdc
ceph-deploy osd create ceph101:/dev/sdd
ceph-deploy osd create ceph102:/dev/sdc
ceph-deploy osd create ceph102:/dev/sdd
ceph-deploy osd create ceph103:/dev/sdc
ceph-deploy osd create ceph103:/dev/sdd
```
- osd 增加完成后, 取消之前设置的那三个 noflag
```bash
# 在任一节点上执行下面命令即可
ceph osd unset noout
ceph osd unset nobackfill
ceph osd unset norecover
```
- 此时数据向新增的 osd 上均衡,时间不确定 …… 只能等!
```bash
# 在任一节点上执行下面命令,观察数据迁移
ceph -w
```
- 直至 ceph 恢复健康状态
```bash
# 在任一节点上执行下面命令,查看集群状态
ceph -s
```
## 删除 OSD
- 把指定的 osd 踢出集群
```bash
# 在任一节点上执行下面命令即可
ceph osd out {osd-id}
ceph -s # 此时能看到一个 osd 已经 out
```
- 此时数据在剩下的几个 osd 上均衡,时间不确定 …… 只能等!
```bash
# 在任一节点上执行下面命令,观察数据迁移
ceph -w
```
- 直至 ceph 恢复健康状态
```bash
# 在任一节点上执行下面命令,查看集群状态
ceph -s
```
- 停止该被踢出的 osd
```bash
# 在运行该 osd 的节点上执行下面命令
systemctl stop ceph-osd@{osd-id}
ceph -s # 此时能看到一个 osd 已经 down
```
- 删除该被停止的 osd
```bash
# 在任一节点上执行下面命令即可
# 删除 CRUSH 图对应的 osd 条目
ceph osd crush remove osd.{osd-id}
# 删除 osd 认证密钥
ceph auth del osd.{osd-id}
# 删除 osd
ceph osd rm {osd-num}
# 删除各节点的 ceph.conf 可能存在的 osd.{osd-id} 配置
```
- 设置 ceph 三个 noflag禁止 ceph 自动迁移数据
```bash
# 在任一节点上执行下面命令即可
ceph osd set noout
ceph osd set nobackfill
ceph osd set norecover
ceph -s # 此时能看到这三个 flag而且集群处于不健康状态
```
- 关闭这三台 ceph 服务器,撤掉已被删除 osd 对应的旧磁盘
- 启动这三台 ceph 服务器,此时 ceph 自动启动,三个 noflag 依旧有效;
- 取消之前设置的那三个 noflag
```bash
# 在任一节点上执行下面命令即可
ceph osd unset noout
ceph osd unset nobackfill
ceph osd unset norecover
```
- 直至 ceph 恢复健康状态
```bash
# 在任一节点上执行下面命令,查看集群状态
ceph -s
```
## OSD 动态配置
- 查看 osd 当前配置
```bash
ceph -n osd.0 --show-config
```
- 动态修改 osd 某个参数
```bash
ceph tell osd.* injectargs '--osd_max_backfills 7'
```
## PG 和 PGP
- 少于 5 个 OSD 时可把 pg_num 设置为 128
- OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
- OSD 数量在 10 到 50 个时,可把 pg_num 设置为 1024
- OSD 数量大于 50 时,<osd数量> * 100/副本数量(默认3),该值接近的 2 的 N 次方值
- 存储池的 PG 和 PGP 数量一般相等,都是 2 的 N 次方,只能增加,每次增加为当前的 2 倍
- 查看存储池的 PG 和 PGP 数量
```bash
ceph osd pool get {pool_name} pg_num
ceph osd pool get {pool_name} pgp_num
```
- 增加/设置存储池的 PG 和 PGP 数量
```bash
ceph osd pool set {pool_name} <cur_pg_num>*2
ceph osd pool set {pool_name} <cur_pgp_num>*2
```
- 获取所有卡在某状态的归置组统计信息
```bash
ceph pg dump_stuck inactive|unclean|stale|undersized|degraded
#Inactive (不活跃)归置组不能处理读写,因为它们在等待一个有最新数据的 OSD 复活且进入集群
#Unclean (不干净)归置组含有复制数未达到期望数量的对象,它们应该在恢复中
```
- 获取一个具体归置组的归置组图
```bash
ceph pg map {pg-id}
```
## CEPH 服务器关机维护
- 设置 ceph 节点 down 后不自动迁移或恢复数据
```bash
ceph osd set noout
ceph osd set nobackfill
ceph osd set norecover
```
- 直接关机
- 下次开机
- 设置 ceph 节点开始自动迁移或回复数据
```bash
ceph osd unset noout
ceph osd unset nobackfill
ceph osd unset norecover
```