1. 操控集群
1.1 UPSTART
Ubuntu系统下,基于ceph-deploy部署集群后,可以用这种方法来操控集群。
列出节点上所有Ceph进程:
start ceph-all
启动节点上特定类型的Ceph进程:
sudo start ceph-osd id={id}
sudo start ceph-mon id={hostname}
sudo start ceph-mds id={hostname}
停止特定类型的Ceph进程的某个实例:
1.2 SYSVINIT
在 CentOS 、 Redhat 、 Fedora 和 SLES 发行版上可以通过传统的 sysvinit 运行 Ceph , Debian/Ubuntu 的较老的版本也可以用此方法。
命令格式:
2. 监控集群
2.1 检查集群状态
执行 ceph status或则 ceph **-**s可以查看集群的状态:
-
active+clean:说明集群健康运行
-
undersized+degraded:如果有OSD节点宕机,可能进入此状态。降级后还是可以正常读写数据
-
undersized+degraded+peered:如果超过min size要求的OSD宕机,则不可读写,显示为此状态。min size默认2,副本份数默认3。执行下面的命令可以修改min size:
2.2 检查存储用量
执行命令 ceph df可以查看集群的数据用量及其在存储池内的分布情况:
2.3 检查MON状态
2.4 检查MDS状态
2.5 检查OSD状态
通过PG这个中间层,Ceph确保了数据不会被绑死在某个特定的OSD。要追踪错误根源,你需要检查归置组、以及底层的OSD。
执行下面的命令,获取最简短的OSD状态:
osd.0 up out weight 0 up_from 70 up_thru 172 down_at 65 last_clean_interval [51,60) 10.5.39.13:6800/48 10.5.39.13:6801/48 10.5.39.13:6802/48 10.5.39.13:6803/48 exists,up 354a6547-3437-46d6-a928-f5633eb7f059
osd.1 up in weight 1 up_from 74 up_thru 327 down_at 63 last_clean_interval [55,60) 10.5.39.42:6800/48 10.5.39.42:6801/48 10.5.39.42:6802/48 10.5.39.42:6803/48 exists,up 0fb4bb77-7c84-45ac-919a-2cc350fc62b9
执行 ceph osd tree可以在OSD树中打印各OSD的位置、状态、权重。如果OSD的in数量大于up数量,可以通过此命令快速定位:
2.6 检查PG状态
执行命令 ceph pg stat可以查看全局性的PG统计信息。
可以获取PG列表:
# PG ID 格式为 存储池号.归置组ID,归置组ID为一个十六进制数字
ceph pg map 1.13d
# 输出
osdmap e790 pg 1.13d (1.13d) -> up [4,6,5] acting [4,6,5]
执行 ceph status也可以看到PG的统计性信息。
执行 ceph pg 1.13d query可以查看某个PG的非常细节的信息。
3. 操控MON
3.1 增加
3.2 删除
3.3 monmap
导出monmap:
monmaptool --print monmap
从monmap中删除一个MON:
monmaptool monmap --add Xenon 10.0.5.1:6789
导入monmap到MON节点:
4. 操控OSD
4.1 增加
4.2 查询
4.3 启动
一旦启动了 OSD ,其状态就变成了 up+in ,此时可以通过ceph -w来观察数据迁移。归置组状态会变为active, some degraded objects,最终变回active+clean
4.4 删除
删除OSD之前,应该评估集群容量,保证操作之后,集群不会到达 near full 比率
4.5 标记为宕机
4.6 标记为踢出
踢出OSD后,Ceph会进行数据迁移,达到再平衡。归置组状态会变为active, some degraded objects,最终变回active+clean。
# 把被踢出的集群重新加进来
ceph osd in {osd-num}
# 将其权重标记为0,而非踢出
ceph osd crush reweight osd.{osd-num} 0
等待数据迁移完毕后,再将OSD踢出。
4.7 标记为进入
你可能需要更新CRUSH map才能让新进入的OSD接受数据:
4.8 标记为丢失
标记OSD为lost,可能导致数据丢失,谨慎:
4.9 设置权重
4.10 清理OSD
4.11 深度清理OSD
4.12 修复OSD
4.13 测试OSD性能
4.14 空间不足处理
Ceph不允许向满的 OSD 写入数据,以免丢失数据。在运营着的集群中,你应该能收到集群空间将满的警告。mon osd full ratio 默认为 0.95 ,也就是说达到 95% 时它将阻止客户端写入数据; mon osd backfillfull ratio 默认为 0.90 ,也就是说达到容量的 90% 时它会阻塞,防止回填启动; OSD 将满比率默认为 0.85 ,也就是说达到容量的 85% 时它会产生健康警告。
使用下面的命令临时修改设置,否则你可能没有机会清理不需要的RBD以腾出空间:
5. 操控MDS
5.1 增加
首先,在/var/lib/ceph/mds/mds.N创建一个数据挂载点。N是MDS的ID,通常就是主机名。
然后,修改Ceph配置,添加一个mds段。修改完毕后进行配置分发:
sudo ceph auth get-or-create mds.N mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > \
/var/lib/ceph/mds/ceph-N/keyring
5.2 移除
执行下面的命令将目标mds标记为宕机:
systemctl stop ceph-mds@Neon.service
systemctl disable ceph-mds@Neon.service
rm -rf /var/lib/ceph/mds/ceph-Neon
如果服务是通过/etc/init.d/ceph加载的,则:
5.3 状态
查看守护进程的简短状态:
5.4 启动
5.5 引用守护进程
你可以使用多种方式来引用一个MDS守护进程:
5.6 管理故障转移
和MDS进程的Standby行为相关的配置项包括:
# a、b两个MDS互备,负责Rank 0
[mds.a]
mds standby replay = true
mds standby for rank = 0
[mds.b]
mds standby replay = true
mds standby for rank = 0
5.7 修改配置
5.8 启用诊断信息
5.9 手工故障转移
标记当前活动MDS为失败,触发故障转移:
6. 操控CephFS
6.1 创建
要创建一个文件系统,你至少需要两个存储池,一个存放数据,另外一个存放元数据。注意:
- 元数据池的副本份数要设置的高,因为任何元数据的丢失都会导致整个文件系统不可用
- 元数据池应该使用高速存储,例如SSD,因为这对客户端操作的延迟有直接影响
示例:
mds: cephfs-1/1/1 up {0=Carbon=up:active}
6.2 列出
6.3 状态
查看CephFS的详细状态,包括MDS列表、Rank列表等:
6.4 删除
6.5 关闭
6.6 查看选项
要获取某个文件系统的信息,可以:
6.7 设置选项
6.8 增减数据池
6.9 设为默认
如果集群中有多个文件系统,而客户端在挂载时没有明确指定使用哪个,则使用默认文件系统:
6.10 使用EC池
EC池可以作为Ceph的数据池,但是需要启用overwirte:
6.11 配额
CephFS支持对任何一个子目录进行配额。但是,需要注意以下限制:
- 需要客户端协作,因此被篡改过的客户端可以突破配额
- 配额不是非常精确的
- 内核客户端,仅仅在4.17+才支持配额。用户空间客户端fuse、libcephfs都支持配额
设置配额(设置为0则移除配额):
getfattr -n ceph.quota.max_bytes /some/dir
getfattr -n ceph.quota.max_files /some/dir
7. 挂载CephFS
7.1 内核驱动
你可以直接使用Linux内核提供的驱动来挂载CephFS:
mount -t ceph 10.0.1.1:6789:/ /mnt/cephfs -o name=admin,secret=AQDRNBZbCp3WMBAAynSCCFPtILwHeI3RLDADKA==
# 或者指定包含密钥的文件
mount -t ceph 10.0.1.1:6789:/ /mnt/cephfs -o name=admin,secretfile=/etc/ceph/admin.secret
如果报can’t read superblock,说明客户端内核不支持。
要实现自动挂载,你需要修改fstab:
7.2 FUSE
要在用户空间挂载CephFS,你需要:
-
将Ceph配置文件拷贝到客户端,命名为/etc/ceph/ceph.conf
-
将Keyring拷贝到客户端,命名为/etc/ceph/ceph.keyring:
sudo ceph-fuse -m 10.0.1.1:6789 /mnt/cephfs
# ceph-fuse[847]: starting ceph client
# 2018-06-07 19:18:25.503086 7fa5c44e1000 -1 init, newargv = 0x7fa5cd643b40 newargc=9
# ceph-fuse[847]: starting fuse
如果有多个CephFS,你可以为ceph-fuse指定命令行选项–client_mds_namespace,或者在客户端的ceph.conf中添加client_mds_namespace配置。
要实现自动挂载,你需要修改fstab:
8. 操控存储池
8.1 设置默认参数
8.2 运行时修改参数
8.3 创建存储池
8.4 初始化存储池
创建存储池之后,在管理节点上,使用rbd工具来初始化池:
8.5 读写存储池配置
8.6 列出存储池
8.7 列出存储池中的对象
8.8 存储池用量
8.9 存储池配额
8.10 存储池快照
8.11 删除存储池
8.12 清空缓存池
9. 操控镜像
镜像就是块设备,所谓块是一系列连续的字节序列(例如512KB)。基于块的存储接口,是磁盘、CD、软盘、甚至磁带都使用的,是存储对象最广泛使用的方式。
Ceph的块设备具有以下特点:thin-provisioned(精简配备)、可改变大小、跨越多OSD存储。
9.1 列出镜像
rbd trash ls {poolname}
9.2 查看镜像磁盘占用
rbd diff k8s/kubernetes-dynamic-pvc | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
9.3 查看镜像信息
9.4 查看镜像状态
可以看到什么客户端在使用(watch)镜像:
9.5 创建镜像
9.6 修改镜像大小
9.7 映射为块设备
9.8 删除镜像
9.9 延迟删除
9.10 快照管理
9.11 镜像克隆
10. 镜像镜像
从Jewel开始,RBD镜像可以异步的跨越两个集群进行镜像(Mirroring)。通过配置,你可以镜像池中的所有、或者一部分镜像。
10.1 启用镜像复制
10.2 禁用镜像复制
11. 操控对象
11.1 创建对象
11.2 查看对象
12. 操控CRUSH
13. 操控PG
13.1 镜像和PG对应关系
13.2 Dump出PG统计信息
Dump出所有PG:
# threshold默认30秒
ceph pg dump_stuck inactive|unclean|stale|undersized|degraded [--format {format}] [-t|--threshold {seconds}]
13.3 修复PG
13.4 优先回填或修复
14. 调整PG数量
14.1 计算PG合理值
参考官网的算法进行计算。
14.2 确保集群健康
执行调整之前,必须保证集群处于健康状态。
14.3 调整数据同步参数
为避免调整PG数量导致业务性能受到严重影响,应该调整一些参数:
osd_backfill_scan_min = 4
osd_backfill_scan_max = 32
osd recovery threads = 1
osd recovery op priority = 1
14.4 调整PG数量
14.5 调整PGP数量
15. 操控RGW
15.1 手工安装
15.2 修改端口
systemctl restart ceph-radosgw.service
15.3 启用ssl
15.4 配置桶分片
RGW在index_pool池中存放桶(Bucket)索引数据,此池默认名为.rgw.buckets.index。
从0.94版本开始,支持对桶索引进行分片,避免单个桶中对象数量过多时出现性能瓶颈:
15.5 启用用户
要使用RGW的RESTful接口,你需要:
- 创建初始的S3接口的用户
- 创建Swift接口的子用户
- 验证用户可以访问网关
要创建S3接口用户,需要在网关机上执行:
{
"user_id": "rgw",
"display_name": "rgw",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "rgw",
"access_key": "IN01UCU1M1996LK6OM88",
"secret_key": "AuuAbroSUlWLykbQHCbFLVO6RU2ozUEjIFkYeoqc"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw"
}
要创建Swift子用户,需要在网关机上执行:
radosgw-admin key create --subuser=alex:swift --key-type=swift --gen-secret
现在,你可以用自己熟悉的语言的S3、Swift客户端来验证用户是否可用。
15.6 操控桶
# 添加配置
# access_key secret_key
mc config host add rgw https://rgw.gmem.cc:7480 IN01UCU1M1996LK6OM88 AuuAbroSUlWLykbQHCbFLVO6RU2ozUEjIFkYeoqc
# 创建桶
mc mb rgw/test
现在通过Rgw命令行可以看到这个桶:
16. 管理身份验证
Ceph默认开启了cephx协议,加密认证需要消耗少量的资源。
启用cephx后,Cephe会自动在包括/etc/ceph/ceph.$name.keyring在内的位置寻找钥匙串,你可以指定keyring选项来修改默认路径,但是不推荐
16.1 手工启用
在禁用了cephx的集群上,启用它的步骤为:
- 创建 client.admin 密钥:
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
- 将上述钥匙串复制到所有mon的mon data目录,例如:
ceph auth get-or-create osd.{$id} mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-{$id}/keyring
- 为每个 MDS 生成密钥:
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
- 启动或重启Ceph集群:
16.2 禁用认证
修改配置文件global段:
16.3 身份验证命令
17. 管理CRUSH map
17.1 手工管理
任何时后你都可以Dump、反编译、修改、编译、注入CURSH map。如果要完全基于手工方式管理,不使用自动生成的CRUSH map,可以设置:
17.2 查看Dump
执行命令 ceph osd crush dump,可以将整个CRUSH导出为可读形式:
17.3 编辑Dump
执行下面的命令,导出当前Map:
crushtool -d curshmap -o curshmap.src
源文件内容示例:
sed -i 's/straw2/straw/g' curshmap.src
修改源文件完毕后,执行下面的命令编译:
ceph osd setcrushmap -i curshmap
# 会输出修订版号
17.4 修改设备类型
默认情况下,Ceph自动根据硬件类型,设置OSD的设备类型为hdd, ssd或nvme。你可以手工进行设置:
17.5 查看规则
列出集群中的CRUSH rule:
ceph osd crush rule dump
17.6 删除规则
17.7 创建规则
创建一个规则,仅仅使用指定类型的设备:
17.8 应用规则
为存储池指定所使用的规则:
17.9 编辑规则
CRUSH rule的语法如下:
rule ssd-primary-affinity {
ruleset 0
type replicated
min_size 2
max_size 3
# 选择名为SSD的桶
step take ssd
# 在上述桶中的host类型的子树中选择叶子节点,存储1个副本(第一个)
step chooseleaf firstn 1 type host
# 执行
step emit
# 选择名为HDD的桶
step take hdd
# 在上述桶中的host类型的子树中选择叶子节点,存储N-1个副本(所有其它副本)
step chooseleaf firstn -1 type host
step emit
}
示例二,在第一个机架上存储两个副本,第二个机架上存储一个副本:
17.10 增加OSD
如果要添加OSD到CRUSH map中,执行:
17.11 调整OSD权重
17.12 移除OSD
17.13 增加Bucket
17.14 移动Bucket
17.15 移除Bucket
17.16 调整Tunable
17.17 避免作为主OSD
17.18 分配Pool到特定OSD
使用CRUSH rule,可以限定某个Pool仅仅使用一部分OSD:
18. 修改日志尺寸
前提条件:
- 集群处于OK状态
- 所有PG处于active+clean状态
步骤,针对每个需要改变尺寸的OSD,一个个的处理:
-
修改Cephe配置,设置 osd_journal_size = NEWSIZE
-
禁止数据迁移(防止OSD进入out状态): ceph osd set noout
-
停止目标OSD实例
-
刷出缓存: ceph-osd **-**i OSDID **–flush-**journal
-
删除日志:
# Helm安装的情况下,需要在OSD容器中执行
ceph --admin-daemon /var/run/ceph/ceph-osd.OSDID.asok config get osd_journal_size
-
确保集群处于OK状态,所有PG处于active+clean状态
19. 性能测试
19.1 rbd bench
20. 运行时修改参数
要动态、临时(重启后消失)的修改组件的参数,可以使用tell命令。
20.1 控制恢复进程
21. 管理Watcher
21.1 加入黑名单
可以将RBD上的Watcher加入黑名单,这样可以解除RBD的Watcher,再其它机器上挂载RBD:
21.2 显示黑名单
21.3 移除黑名单
21.4 清空黑名单
22. RADOS管理
22.1 管理池
22.2 管理快照
22.3 读写对象
22.4 读写对象属性
22.5 列出不一致PG
22.6 列出不一致对象
22.7 列出不一致快照
23. 配置仪表盘
23.1 启用仪表盘
23.2 SSL支持配置
23.3 设置用户
23.4 管理RGW
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)