ceph 运维操作-OSD
时间:2022-07-22
本文章向大家介绍ceph 运维操作-OSD,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.说明
1.1介绍
OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。
2. 常用操作
2.1 查看osd状态
$ ceph osd stat
5 osds: 5 up, 5 in
状态说明:
- 集群内(in)
- 集群外(out)
- 活着且在运行(up)
- 挂了且不再运行(down)
说明:
- 如果OSD活着,它也可以是 in或者 out 集群。如果它以前是 in 但最近 out 了, Ceph 会把其归置组迁移到其他OSD 。
- 如果OSD out 了, CRUSH 就不会再分配归置组给它。如果它挂了( down )其状态也应该是 out 。
- 如果OSD 状态为 down 且 in ,必定有问题,而且集群处于非健康状态。
2.2 查看osd映射信息
$ ceph osd dump
epoch 4971
fsid 97219550-d917-4154-b745-32bac14f99f2
created 2017-08-31 16:14:26.155920
modified 2017-11-15 13:48:39.834169
flags sortbitwise,recovery_deletes
crush_version 113
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
require_min_compat_client jewel
min_compat_client jewel
require_osd_release luminous
pool 1 'rbd' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 2048 pgp_num 2048 last_change 3845 lfor 0/187 flags hashpspool stripe_width 0 application rbd
removed_snaps [1~3,7~8,11~5,17~4,1c~4,21~1]
pool 2 'test_data' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 512 pgp_num 512 last_change 1575 lfor 0/227 flags hashpspool stripe_width 0 application cephfs
removed_snaps [1~3,5~4]
osd.0 up in weight 1 up_from 4959 up_thru 4966 down_at 4789 last_clean_interval [4551,4788) 10.1.1.34:6817/477028 10.1.1.34:6818/477028 10.1.1.34:6819/477028 10.1.1.34:6820/477028 exists,up 1c43b2d1-fc59-4e55-8511-2480964fef41
osd.1 up in weight 1 up_from 4577 up_thru 4966 down_at 4575 last_clean_interval [4521,4574) 10.1.1.34:6825/338609 10.1.1.34:6827/338609 10.1.1.34:6841/338609 10.1.1.34:6844/338609 exists,up 68630ac4-09a4-4b50-9dba-4bbe161bc6b3
osd.2 up in weight 1 up_from 4568 up_thru 4966 down_at 4566 last_clean_interval [4533,4565) 10.1.1.34:6805/337916 10.1.1.34:6806/337916 10.1.1.34:6807/337916 10.1.1.34:6808/337916 exists,up 752ffd2c-6cdc-4377-bbde-b89a5a46f449
osd.3 up in weight 1 up_from 4572 up_thru 4966 down_at 4570 last_clean_interval [4529,4569) 10.1.1.34:6801/338244 10.1.1.34:6802/338244 10.1.1.34:6803/338244 10.1.1.34:6804/338244 exists,up c59c5ef7-6f55-4fe5-9952-4f4c602b4c1a
osd.4 up in weight 1 up_from 4564 up_thru 4966 down_at 4562 last_clean_interval [4537,4561) 10.1.1.34:6809/337796 10.1.1.34:6810/337796 10.1.1.34:6811/337796 10.1.1.34:6812/337796 exists,up d264e02b-3f93-4125-a40b-8e1515158b3c
2.3 查看osd目录树
$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 200.12276 root default
-3 40.02455 host ceph-xx-osd00
0 hdd 3.63860 osd.0 up 1.00000 1.00000
1 hdd 3.63860 osd.1 up 1.00000 1.00000
2 hdd 3.63860 osd.2 up 1.00000 1.00000
3 hdd 3.63860 osd.3 up 1.00000 1.00000
4 hdd 3.63860 osd.4 up 1.00000 1.00000
2.4 下线osd
#让编号为0的osd down 掉,此时该 osd 不接受读写请求,但 osd 还是存活的
$ ceph osd down 0
marked down osd.0.
$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 200.12276 root default
-3 40.02455 host ceph-xx-osd00
0 hdd 3.63860 osd.0 down 1.00000 1.00000
1 hdd 3.63860 osd.1 up 1.00000 1.00000
2 hdd 3.63860 osd.2 up 1.00000 1.00000
3 hdd 3.63860 osd.3 up 1.00000 1.00000
4 hdd 3.63860 osd.4 up 1.00000 1.00000
2.5 拉起osd
#让编号为0的osd up 掉,此时该 osd 接受读写请求
$ ceph osd up 0
marked up osd.0.
$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 200.12276 root default
-3 40.02455 host ceph-bench-osd00
0 hdd 3.63860 osd.0 up 1.00000 1.00000
1 hdd 3.63860 osd.1 up 1.00000 1.00000
2 hdd 3.63860 osd.2 up 1.00000 1.00000
3 hdd 3.63860 osd.3 up 1.00000 1.00000
4 hdd 3.63860 osd.4 up 1.00000 1.00000
2.6 osd逐出集群
#将一个 osd 逐出集群,即下线一个 osd,此时可以对该 osd 进行维护
$ ceph osd out 0
2.7 osd加入集群
#把一个 osd 加入集群,即上线一个 osd
$ ceph osd in 0
2.8 删除osd
#在集群中删除一个 osd,可能需要先 stop 该 osd,即 stop osd.0
$ ceph osd rm 0
2.9 从crush map中删除osd
#从 crush map 中删除一个 osd
$ ceph osd crush rm osd.0
2.10 删除host节点
#在集群中删除一个host节点
$ ceph osd crush rm node1
2.11 查看最大osd个数
#查看最大osd的个数,默认最大是4个osd节点
$ ceph osd getmaxosd
2.12 设置最大osd个数
#设置最大osd的个数,当扩大osd节点的时候必须扣大这个值
$ ceph osd setmaxosd 60
2.13 设置最大osd个数
#设置最大osd的个数,当扩大osd节点的时候必须扣大这个值
$ ceph osd setmaxosd 60
2.14 设置osd的crush权重
#ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]]
$ ceph osd crush set 3 3.0 host=node4
#或者
$ ceph osd crush reweight osd.3 1.0
2.15 设置osd的权重
#ceph osd reweight {id} {weight}
$ ceph osd reweight 3 0.5
2.16 暂停osd
#暂停后整个集群不再接收数据
$ ceph osd pause
2.17 开启osd
#开启后再次接收数据
$ ceph osd unpause
2.18 查看osd参数配置
#查看某个osd的配置参数
$ ceph --admin-daemon /var/run/ceph/ceph-osd.2.asok config show | less
2.19 osd打摆子
#我们建议同时部署公网(前端)和集群网(后端),这样能更好地满足对象复制的容量需求。
#然而,如果集群网(后端)失败、或出现了明显的延时,同时公网(前端)却运行良好, OSD 现在不能很好地处理这种情况。
#这时 OSD 们会向监视器报告邻居 down 了、同时报告自己是 up 的,我们把这种情形称为打摆子( flapping )。
#如果有东西导致 OSD 打摆子(反复地被标记为 down ,然后又 up ),你可以强制监视器停止。 主要用于osd抖动的时候
$ ceph osd set noup # prevent OSDs from getting marked up
$ ceph osd set nodown # prevent OSDs from getting marked down
#这些标记记录在 osdmap 数据结构里:
ceph osd dump | grep flags
flags no-up,no-down
#下列命令可清除标记:
ceph osd unset noup
ceph osd unset nodown
2.20 osd动态修改参数
#修改所有osd参数,重启失效,需要写到配置文件中持久化
$ ceph tell osd.* injectargs "--rbd_default_format 2 "
2.21 查看延迟情况
#主要解决单块磁盘问题,如果有问题应及时剔除osd。统计的是平均值
#fs_commit_latency 表示从接收请求到设置 commit 状态的时间间隔
#通过 fs_apply_latency 表示从接受请求到设置为 apply 状态的时间间隔
$ ceph osd perf
osd commit_latency(ms) apply_latency(ms)
0 0 0
1 37 37
2 0 0
2.22 主亲和性
#Ceph 客户端读写数据时,总是连接 acting set 里的主 OSD (如 [2, 3, 4] 中, osd.2 是主的)。
#有时候某个 OSD 与其它的相比并不适合做主 OSD (比如其硬盘慢、或控制器慢),最大化硬件利用率时为防止性能瓶颈(特别是读操作),
#你可以调整 OSD 的主亲和性,这样 CRUSH 就尽量不把它用作 acting set 里的主 OSD 了。
#ceph osd primary-affinity <osd-id> <weight>
$ ceph osd primary-affinity 2 1.0#主亲和性默认为 1 (就是说此 OSD 可作为主 OSD )。此值合法范围为 0-1 ,其中 0 意为此 OSD 不能用作主的,#1 意为 OSD 可用作主的;此权重小于 1 时, CRUSH 选择主 OSD 时选中它的可能性低
2.23 提取crush图
#提取最新crush图
#ceph osd getcrushmap -o {compiled-crushmap-filename}
$ ceph osd getcrushmap -o /tmp/crush
#反编译crush图
# crushtool -d {compiled-crushmap-filename} -o {decompiled-crushmap-filename}
$ crushtool -d /tmp/crush -o /tmp/decompiled_crush
2.24 注入crush图
#编译crush图
#crushtool -c {decompiled-crush-map-filename} -o {compiled-crush-map-filename}
$ crushtool -c /tmp/decompiled_crush -o /tmp/crush_new
#注入crush图
# ceph osd setcrushmap -i {compiled-crushmap-filename}
$ ceph osd setcrushmap -i /tmp/crush_new
2.25 停止自动重均衡
#你得周期性地维护集群的子系统、或解决某个失败域的问题(如一机架)。如果你不想在停机维护 OSD 时让 CRUSH 自动重均衡,提前设置 noout
$ ceph osd set noout
2.26 取消停止自动均衡
#跟ceph osd set noout相反的操作
$ ceph osd unset noout
2.27 查看分区情况
ceph-disk list
- CentOS6.5菜鸟之旅:关于搜索的shell命令
- 协议森林12 天下为公 (TCP堵塞控制)
- .Net魔法堂:AssemblyInfo.cs文件详解
- 本地php环境不支持curl_exec的解决办法
- JAVA魔法堂:读取.properties配置文件
- Python深入04 闭包
- PHP获取时间戳的毫秒
- Python深入03 对象的属性
- CSS魔法堂:Position定位详解
- EMLOG无插件实现网站源码压缩
- CSS魔法堂:盒子模型简介
- 协议森林06 瑞士军刀 (ICMP协议)
- Emlog博客系统IIS 7/8伪静态
- Weblogic魔法堂:AdminServer.lok被锁导致启动、关闭域失败
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- nmap 详解版-指令使用方法大全【含安装】
- 常见6种WAF绕过和防护原理
- 2020-mac 安装jdk1.8
- AWVS acunetix_WVS13的基础使用
- 为啥PHP in_array(0,['a', 'b', 'c']) 返回为true?
- docker安装伏羲扫描器fuxi-scanner
- 基于深度学习的文本分类应用!
- 表驱动法
- mysql将表结构导出excel
- 为什么会是Docker?
- 浅析http报文
- MySQL explain 中的 rows 究竟是如何计算的?
- SwiftUI: 使用 Touch ID 和 Face I
- Linux 系统中查找正在运行的进程的完整命令、当前工作目录等信息的方法
- Go by Example 中文:通道方向