zoukankan      html  css  js  c++  java
  • ceph_OSD的添加删除

    this is my first ‘ceph’  article ,just start .....................! ! !

    一,手动增加OSD

    ceph里,一个OSD一般是一个ceph-osd守护进程,它运行在硬盘之上,当集群容量达到使用上限,或接近near full 比率后,需要增加OSDOSD主机来扩容。

    在一个运行的ceph集群里添加一个osd要依次创建数据目录,把硬盘挂载到数据目录,把OSD加入集群,然后把OSD加入CRUSHMAP, ceph集群尽量使用统一

    硬件,如果新增容量不一的磁盘,创建过程中还需调整它的权重。

    添加OSD前,保证集群环境OK

    当前集群环境三台主机,6OSD

     

    1,创建OSD,如果未指定UUIDOSD启动时会自动生成一个,下列命令会输出OSD号(VDD是新添加的磁盘)

     

    #ceph osd create [ uuid   id ]   (如果指定了ID  那么它将作为OSD id,一般来说不建议指定ID,让ceph按顺序自动分配)

     

    #ceph osd tree

     

    2,在新OSD主机上创建默认目录

    3,格式化磁盘,挂载到刚创建的目录下

     

    # mkfs.xfs /dev/vdd

     

    4,初始化OSD数据目录

    # ceph-osd -i 6 --mkfs --mkkey

     

    正常报错不用担心

    5,注册OSD的认证秘钥,

    # ceph auth add osd.6 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-6/keyring

     

    6,把OSD加入CRUSHMAP 这样新加入的OSD才能开始接受数据,(也可以通过反编译crushmap OSD加入列表设备)

    #ceph osd crush add 6 0.00999 host=ceph3

     

    注意:对在使用中的ceph集群,为降低对用户 I/O 性能的影响,加入 CRUSH 图时应该把 OSD 的初始权重设为 0 ,然后每次增大一点、逐步增大 CRUSH 权重。例如每次增加 0.2

    #ceph osd crush reweight {osd-id} .2

    迁移完成前,可以依次把权重重置为 0.4 0.6 等等,直到达到期望权重

    为降低 OSD 失败的影响,你可以设置:

    #mon osd down out interval = 0

    它防止挂了的 OSD 自动被标记为 out ,然后逐步降低其权重:

    #ceph osd reweight {osd-num} .8

    等着集群完成数据迁移,然后再次调整权重,

     

    注意/var/lib/ceph/osd/ceph-X的权限,应该属主属组都是ceph

     

     

     

     

    以下为通过反编译CRUSHMAP的方式添加OSDCRUSH

    1)利用ceph工具获取当前的crush map

    #ceph osd getcrushmap -o ./mycrushmap

     

    2)反编译crush map       ./mycrushmap 是一个二进制文件,需要通过crushtool反编译成文本文件才能进行编辑

    #crushtool -d ./mycrushmap > ./mycrushmap.txt

     

    3)编辑crush map 文本文件

    [root@ceph3 ~]# vi mycrushmap.txt

    # begin crush map
    tunable choose_local_tries 0
    tunable choose_local_fallback_tries 0
    tunable choose_total_tries 50
    tunable chooseleaf_descend_once 1
    tunable straw_calc_version 1

    # devices
    device 0 osd.0
    device 1 osd.1
    device 2 osd.2
    device 3 osd.3
    device 4 osd.4
    device 5 osd.5
    device 6 osd.6

    # types
    type 0 osd
    type 1 host
    type 2 chassis
    type 3 rack
    type 4 row
    type 5 pdu
    type 6 pod
    type 7 room
    type 8 datacenter
    type 9 region
    type 10 root

    # buckets
    host ceph1 {
            id -2           # do not change unnecessarily
            # weight 0.020
            alg straw
            hash 0  # rjenkins1
    "mycrushmap.txt" 77L, 1279C

    此处不过多介绍,具体添加方式自行了解

    4)编辑完成后,在编译crush map 文本文件为二进制文件

    # crushtool -c ./mycrushmap.txt -o ./newmap

     

    5)把新编译的crush map 应用于集群使之生效

    #ceph osd setcrushmap -i ./newmap

    6)查看CRUSH结构,确认新的CRUSH MAP 已经生效

    #ceph osd tree

     

    启动OSD

    还未把OSD加入到CEPH后,OSD就在集群配置里了,但是它处于运行状态,此时处于down out ,要启动OSD后它才开始接受数据

    #/etc/init.d/ceph start osd.6

    一旦启动了OSD后,其状态变为UPIN

    观察数据迁移,把新的OSD加入集群CRUSH  MAP 后,ceph会重新均衡数据,一些归置组会迁移到新的OSD里,观察集群数据迁移过程

    #ceph -w

    你会看到归置组状态从 active+clean 变为 active, some degraded objects (有降级的对象)、且迁移完成后回到 active+clean 状态

     

     

     

     

    二,OSD的删除

    当磁盘损坏,需要更换磁盘时,需要删除OSD ,通常,操作前应该检查集群容量,看是否快达到上限了,确保删除 OSD 后不会使集群达到 near full 比率。

     

    1,把 OSD 踢出集群

    删除 OSD 前,它通常是 up in 的,要先把它踢出集群,以使 Ceph 启动重新均衡、把数据拷贝到其他 OSD

    #ceph osd out osd.6

     

     

    2,观察数据迁移

    一旦把 OSD 踢出( out )集群, Ceph 就会开始重新均衡集群、把归置组迁出将删除的 OSD

    #ceph -w

    你会看到归置组状态从 active+clean 变为 active, some degraded objects 、迁移完成后最终回到 active+clean 状态

     

    注意:

    有时候,(通常是只有几台主机的集群,比如小型测试集群)拿出( out )某个 OSD 可能会使 CRUSH 进入临界状态,这时某些 PG 一直卡在 active+remapped 状态。

    如果遇到了这种情况,应该先把此 OSD 标记为 in

    #ceph osd in {osd-num}

    等回到最初的状态后,在把它的权重设置为 0 ,而不是标记为 out

    #ceph osd crush reweight osd.{osd-num} 0

    执行后,你可以观察数据迁移过程,应该可以正常结束。把某一 OSD 标记为 out 和权重改为 0 的区别在于,前者,包含此 OSD 的桶、其权重没变;而后一种情况下,

    桶的权重变了(降低了此 OSD 的权重)。某些情况下, reweight 命令更适合集群

     

    3,停止OSD

    OSD 踢出集群后,它可能仍在运行,就是说其状态为 up out 。删除前要先停止 OSD 进程

    #/etc/init.d/ceph stop osd.6                           停止 OSD 后,状态变为 down

     

    4,删除OSD

    1),把OSD移除CRUSHMAP

    #ceph osd crush remove osd.6

     

     

     

    2)删除OSD的认证秘钥

    #ceph auth del osd.6

     

     

    3)删除OSD

    #ceph osd rm osd.6

     

     

    OSD.6 已被完全删除

     

    4)卸载OSD挂载目录,通过mount 查看

     

    # umount /var/lib/ceph/osd/ceph-6/

     

    删除osd.6相关信息

     

     

     

     

    到此OSD的手动添加和删除基本完成,不同系统环境或者不同ceph版本 有些操作命令不近相同,

    ceph H 版本启动命令:#/etc/init.d/ceph start osd.x

                                          #/etc/init.d/ceph start mon

    ceph J 版本启动命令:#systemctl stop ceph-mon@ceph01.servic停止mon 服务

                                         #systemctl stop ceph-osd@12.service 停止各OSD服务

     

    参考文档:ceph 官网, 《ceph分布式存储实战》

     

     

     

     

    三,通过执行puppet 添加OSD

    1,首先我在集群ceph2这台服务器上添加 一块磁盘VDD

     

    2,修改ceph.yaml 文件

    #vi /var/tmp/openstackha/tripleo/hieradata/ceph.yaml

     

     删除原有磁盘信息,从新写入需要添加的磁盘,如下:      如有多块磁盘可依次写入相应信息

     

    保存退出

    3,执行osd.pp 文件

    #puppet apply --modulepath /var/tmp/openstackha/puppet/modules/ /var/tmp/openstackha/tripleo/manifests/osd.pp -d

     4,执行完成查看验证

    #ceph -s

     

    #ceph osd tree

     

     

    注意:添加磁盘时最好在每台主机均匀添加,使每台主机磁盘数量保存一致,这样有利于数据均匀分布

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    一些至理名言
    移除快捷方式上面那个丑陋的小箭头
    一些浏览器插件
    yahoo给出的关于网站优化的建议
    javascript 事件流
    关于mongodb的一些笔记
    WebStorm
    给go添加各种package
    工具类 util.Date 日期类
    几种简单排序算法
  • 原文地址:https://www.cnblogs.com/lxqr/p/8496841.html
Copyright © 2011-2022 走看看