ceph维护命令手册

2017-06-01 17:09:48

本文操作都是centos7环境

crush map 管理方法
1
2
3
4
5
6
7
8
9
10
11
#获得默认 crushmap (加密)
ceph osd getcrushmap -o crushmap.dump

#转换 crushmap 格式 (加密 -> 明文格式)
crushtool -d crushmap.dump -o crushmap.txt

#转换 crushmap 格式(明文 -> 加密格式)
crushtool -c crushmap.txt -o crushmap.done

#重新使用新 crushmap
ceph osd setcrushmap -i crushmap.done

这里要说下,对crush map进行定义:
1 物理主机划分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
root default {
id -1 # do not change unnecessarily
# weight 264.000
alg straw
hash 0 # rjenkins1
item 240.30.128.33 weight 12.000
item 240.30.128.32 weight 12.000
item 240.30.128.215 weight 12.000
item 240.30.128.209 weight 12.000
item 240.30.128.213 weight 12.000
item 240.30.128.214 weight 12.000
item 240.30.128.212 weight 12.000
item 240.30.128.211 weight 12.000
item 240.30.128.210 weight 12.000
item 240.30.128.208 weight 12.000
item 240.30.128.207 weight 12.000
item 240.30.128.63 weight 12.000
item 240.30.128.34 weight 12.000
item 240.30.128.35 weight 12.000
item 240.30.128.36 weight 12.000
item 240.30.128.37 weight 12.000
item 240.30.128.39 weight 12.000
item 240.30.128.38 weight 12.000
item 240.30.128.58 weight 12.000
item 240.30.128.59 weight 12.000
item 240.30.128.60 weight 12.000
item 240.30.128.29 weight 12.000
}

root registry {
id -26
# weight 36.000
alg straw
item 240.30.128.206 weight 12.000
item 240.30.128.40 weight 12.000
item 240.30.128.30 weight 12.000
}

说明:上面划分了两个物理区域

  • root 区域, 包含了 264TB 空间
  • registry 区域, 包含了 36TB 空间
    需要注意的问题:
    建议在存放数据前就对物理池进行规划, 否则会出现大量数据迁移现象, 或者会出现 osd full 现象

2.规则划分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
rule replicated_ruleset {
ruleset 0
type replicated
min_size 1
max_size 10
step take default
step chooseleaf firstn 0 type host
step emit
}

rule registry_ruleset {
ruleset 1
type replicated
min_size 2
max_size 3
step take registry
step chooseleaf firstn 0 type host
step emit
}

pool 创建, 删除方法
1
2
3
4
5
6
7
8
9
#创建
ceph osd pool create volumes 10240 10240
ceph osd pool create paas 2048 2048
#删除
ceph osd pool delete paas paas --yes-i-really-really-mean-it
#查询
[root@node1 ~]# ceph osd dump | grep replica
#指定
ceph osd pool set paas crush_ruleset 1
OSD机器重启

1.设置noout 避免在异常情况下触发集群数据重新平衡

1
ceph osd set noout

2.关闭OSD机器上所有OSD进程

1
2
ceph osd down x    #把这个机器上的OSD都设置为down状态
systemctl stop ceph-osd@* #用systemctl重启OSD进程

3.重启OSD机器
4.恢复noout 设置

1
ceph osd unset noout

扩容
  • PB级的集群的容量超过50%,就要考虑扩容了。 假如OSD主机的磁盘容量为48TB(12 4TB),则需要backfill的数据为24TB(48TB 50%) ,假设网卡为10Gb,则新加一个OSD时,集群大约需要19200s(24TB/(10Gb/8)) 约3小时完成backfill,而backfill后台数据填充将会涉及大量的IO读和网络传输,必将影响生产业务运行。 如果集群容量到80%再扩容会导致更长的backfill时间,近8个小时。
  • OSD对应的磁盘利用率如果超过50%,也需要尽快扩容。
    在业务闲时,向集群中增加OSD主机。
升级Ceph软件版本

1.在MON和OSD机器上升级安装指定的ceph版本的软件包
2.逐个重启MON进程
3.设置noout 避免在异常情况下触发集群数据重新平衡

1
ceph osd set noout

4.逐个重启OSD进程

1
2
ceph osd down x        #提前mark down, 减少slow request
systemctl restart ceph-osd@x #用systemctl重启OSD进程

5.恢复noout 设置

1
ceph osd unset noout

ceph的启动和停止
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 列出节点上所有的units
sudo systemctl status ceph\*.service ceph\*.target
# 启动所有的守护进程
sudo systemctl start ceph.target
# 停止所有守护进程
sudo systemctl stop ceph\*.service ceph\*.target

# 按类型启动所有守护进程
sudo systemctl start ceph-osd.target
sudo systemctl start ceph-mon.target
sudo systemctl start ceph-mds.target

# 停止ceph节点上某一类守护进程
sudo systemctl stop ceph-mon\*.service ceph-mon.target
sudo systemctl stop ceph-osd\*.service ceph-osd.target
sudo systemctl stop ceph-mds\*.service ceph-mds.target

# 启动某节点上一个特定的守护进程例程
sudo systemctl start ceph-osd@{id}
sudo systemctl start ceph-mon@{hostname}
sudo systemctl start ceph-mds@{hostname}

# 停止某节点上一个特定的守护进程例程
sudo systemctl stop ceph-osd@{id}
sudo systemctl stop ceph-mon@{hostname}
sudo systemctl stop ceph-mds@{hostname}

ref
维护操作
故障定位和处理
ceph - crush map 与 pool


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。