ceph分布式存储-增加/删除 OSD

1. 增加 OSD(手动)

要增加一个 OSD,要依次创建数据目录、把硬盘挂载到数据目录、把 OSD 加入集群、然后把它加入 CRUSH Map。

Tip: Ceph 喜欢统一的硬件,与存储池无关。如果你要新增容量不一的硬盘驱动器,还需调整它们的权重。但是,为实现最佳性能,CRUSH 的分级结构最好按类型、容量来组织。

  1. 创建 OSD。如果未指定 UUID, OSD 启动时会自动生成一个。下列命令会输出 OSD 号,后续步骤你会用到。
ceph osd create [{uuid} [{id}]]

如果指定了可选参数 {id} ,那么它将作为 OSD id 。要注意,如果此数字已使用,此命令会出错。

警告: 一般来说,我们不建议指定 {id} 。因为 ID 是按照数组分配的,跳过一些依然会浪费内存;尤其是跳过太多、或者集群很大时,会更明显。若未指定 {id} ,将用最小可用数字。

  1. 在新 OSD 主机上创建数据目录。
ssh {new-osd-host}
sudo mkdir /var/lib/ceph/osd/ceph-{osd-number}
  1. 如果准备用于 OSD 的是单独的磁盘而非系统盘,先把它挂载到刚创建的目录下:
ssh {new-osd-host}
sudo mkfs -t {fstype} /dev/{drive}
sudo mount -o user_xattr /dev/{hdd} /var/lib/ceph/osd/ceph-{osd-number}
  1. 初始化 OSD 数据目录。
ssh {new-osd-host}
ceph-osd -i {osd-num} --mkfs --mkkey

在启动 ceph-osd 前,数据目录必须是空的。

  1. 注册 OSD 认证密钥, ceph-{osd-num} 路径里的 ceph 值应该是 $cluster-$id ,如果你的集群名字不是 ceph ,那就用自己集群的名字。
ceph auth add osd.{osd-num} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-num}/keyring
  1. 把新 OSD 加入 CRUSH Map 中,以便它可以开始接收数据。用 ceph osd crush add 命令把 OSD 加入 CRUSH 分级结构的合适位置。如果你指定了不止一个 bucket,此命令会把它加入你所指定的 bucket 中最具体的一个,并且把此 bucket 挪到你指定的其它 bucket 之内。
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]

比如:

ceph osd crush add 21 0.08800 pool=ssd_root rack=ssd_rack01 host=ssd_ceph4

你也可以反编译 CRUSH Map、把 OSD 加入设备列表、以 bucket 的形式加入主机(如果它没在 CRUSH Map 里)、以条目形式把设备加入主机、分配权重、重编译并应用它,详情参见本手册第一部分 9. 修改 Crushmap

  1. 启动 OSD。把 OSD 加入 Ceph 后, OSD 就在配置里了。然而它还没运行,它现在的状态为 down & out 。你必须先启动 OSD 它才能收数据。在 Ubuntu 上执行:
sudo start ceph-osd id={osd-num}

一旦你启动了 OSD ,其状态就变成了 up & in

2. 增加 OSD( ceph-deploy )

还可以通过 ceph-deploy 工具很方便的增加 OSD。

  1. 登入 ceph-deploy 工具所在的 Ceph admin 节点,进入工作目录。
ssh {ceph-deploy-node}
cd /path/ceph-deploy-work-path
  1. 列举磁盘。

执行下列命令列举一节点上的磁盘:

ceph-deploy disk list {node-name [node-name]...}
  1. 格式化磁盘。

用下列命令格式化(删除分区表)磁盘,以用于 Ceph :

ceph-deploy disk zap {osd-server-name}:{disk-name}
ceph-deploy disk zap osdserver1:sdb

重要: 这会删除磁盘上的所有数据。

  1. 准备 OSD。
ceph-deploy osd prepare {node-name}:{data-disk}[:{journal-disk}]
ceph-deploy osd prepare osdserver1:sdb:/dev/ssd
ceph-deploy osd prepare osdserver1:sdc:/dev/ssd

prepare 命令只准备 OSD 。在大多数操作系统中,硬盘分区创建后,不用 activate 命令也会自动执行 activate 阶段(通过 Ceph 的 udev 规则)。

前例假定一个硬盘只会用于一个 OSD 守护进程,以及一个到 SSD 日志分区的路径。我们建议把日志存储于另外的驱动器以最优化性能;你也可以指定一单独的驱动器用于日志(也许比较昂贵)、或者把日志放到 OSD 数据盘(不建议,因为它有损性能)。前例中我们把日志存储于分好区的固态硬盘。

注意: 在一个节点运行多个 OSD 守护进程、且多个 OSD 守护进程共享一个日志分区时,你应该考虑整个节点的最小 CRUSH 故障域,因为如果这个 SSD 坏了,所有用其做日志的 OSD 守护进程也会失效。

  1. 准备好 OSD 后,可以用下列命令激活它。
ceph-deploy osd activate {node-name}:{data-disk-partition}[:{journal-disk-partition}]
ceph-deploy osd activate osdserver1:/dev/sdb1:/dev/ssd1
ceph-deploy osd activate osdserver1:/dev/sdc1:/dev/ssd2

activate 命令会让 OSD 进入 upin 状态。该命令使用的分区路径是前面 prepare 命令创建的。

3. 删除 OSD(手动)

要想缩减集群尺寸或替换硬件,可在运行时删除 OSD 。在 Ceph 里,一个 OSD 通常是一台主机上的一个 ceph-osd 守护进程、它运行在一个硬盘之上。如果一台主机上有多个数据盘,你得逐个删除其对应 ceph-osd 。通常,操作前应该检查集群容量,看是否快达到上限了,确保删除 OSD 后不会使集群达到 near full 比率。

警告: 删除 OSD 时不要让集群达到 full ratio 值,删除 OSD 可能导致集群达到或超过 full ratio 值。

1、停止需要剔除的 OSD 进程,让其他的 OSD 知道这个 OSD 不提供服务了。停止 OSD 后,状态变为 down

ssh {osd-host}
sudo stop ceph-osd id={osd-num}
  1. 将 OSD 标记为 out 状态,这个一步是告诉 mon,这个 OSD 已经不能服务了,需要在其他的 OSD 上进行数据的均衡和恢复了。
ceph osd out {osd-num}

执行完这一步后,会触发数据的恢复过程。此时应该等待数据恢复结束,集群恢复到 HEALTH_OK 状态,再进行下一步操作。

  1. 删除 CRUSH Map 中的对应 OSD 条目,它就不再接收数据了。你也可以反编译 CRUSH Map、删除 device 列表条目、删除对应的 host 桶条目或删除 host 桶(如果它在 CRUSH Map 里,而且你想删除主机),重编译 CRUSH Map 并应用它。详情参见本手册第一部分 9. 修改 Crushmap
ceph osd crush remove {name}

该步骤会触发数据的重新分布。等待数据重新分布结束,整个集群会恢复到 HEALTH_OK 状态。

  1. 删除 OSD 认证密钥:
    ceph auth del osd.{osd-num}
  1. 删除 OSD 。
ceph osd rm {osd-num}
#for example
ceph osd rm 1
  1. 卸载 OSD 的挂载点。
sudo umount /var/lib/ceph/osd/$cluster-{osd-num}
  1. 登录到保存 ceph.conf 主拷贝的主机。
    ssh {admin-host}
    cd /etc/ceph
    vim ceph.conf
  1. ceph.conf 配置文件里删除对应条目。
    [osd.1]
            host = {hostname}
  1. 从保存 ceph.conf 主拷贝的主机,把更新过的 ceph.conf 拷贝到集群其他主机的 /etc/ceph 目录下。

如果在 ceph.conf 中没有定义各 OSD 入口,就不必执行第 7 ~ 9 步。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容