[关闭]
@tony-yin 2017-12-07T14:58:52.000000Z 字数 2641 阅读 1457

Osd创建和删除全过程

Ceph


OSDCeph中最基本也是最常用的功能,所以经常的创建和删除操作少不了,然后这个两个过程并不是一两个命令那么简单,本文就OSD的创建和删除进行内容进行步骤分离和讲解,结尾还有一份一键删除> 制定OSD的脚本

创建过程

创建一个OSD

  1. ceph osd create [uuid] #若没有uuid参数,则该命令自动生成一个uuid。该命令产生一个新的osd-number

为新的OSD创建默认的工作目录

  1. mkdir -p /var/lib/ceph/osd/ceph-{osd-number}

为新的OSD准备一块磁盘

  1. mkfs.xfs -f /dev/vde
  2. mount /dev/vde /var/lib/ceph/osd/ceph-{osd-number}

初始化新的OSD工作目录

  1. ceph-osd -i {osd-number} --mkfs --mkkey

注意:在执行上述命令前要求新的OSD工作目录必须为空

注册新的OSD认证密钥

  1. ceph auth add osd.{osd-number} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-number}/keyring

将新的OSD添加到Crush Map中

  1. ceph osd crush add osd.{osd-number} {weight} [{bucketype}={bucket-name}......}

此步骤也可以添加buckets后再添加osd,即:

  1. ceph osd crush add-bucket node5 host #创建一个名字为node5的bucket
  2. ceph osd crush move node5 root=default #将创建出来的bucket放到root下
  3. ceph osd crush create-or-move osd.{osd-number} 1.0 root=default host=node5 #将新的OSD添加到node5下

将新的OSD信息填写到ceph.conf中

  1. [osd.{osd-number}]
  2. host = {hostname}
  3. devs = /dev/vde

启动新的OSD

  1. /etc/init.d/ceph start osd.{osd-number}

此时通过集群状态查看命令#ceph -s可以看到OSD数量以及up和in的数量都发生了变化,此时再通过命令#ceph -w可以看到ceph经过peering状态后,最终达到active+clean状态

删除过程

将需要删除的OSD在集群中的状态修改为out状态

假定osdid1

  1. ceph osd out osd.1

停止OSD进程

  1. /etc/init.d/ceph stop osd.1

将OSD从crush map中删除

  1. ceph osd crush remove osd.1 #删除指定的OSD
  2. ceph osd crush remove node1 #删除OSD所在的bucket(此步骤可以不做)

清除到OSD的认证密钥

  1. ceph auth del osd.1

在OSD Map中清除OSD

  1. ceph osd rm 1

从ceph.conf中清除OSD

  1. [osd.1]
  2. host = {hostname}
  3. ...

一键创建OSD脚本

  1. #! /bin/bash
  2. start_time=`date +%s`
  3. echo "start time: `date -d @$start_time "+%Y-%m-%d %H:%M:%S"`"
  4. disk=/dev/$1
  5. osd_id=`ceph osd create`
  6. osd_dir=/data/osd.$osd_id
  7. host=10.16.100.99
  8. bucket=default_$host
  9. echo "osd $osd_id is created ..."
  10. mkdir -p $osd_dir
  11. echo "osd directory: /data/osd.$osd_id is created ..."
  12. mkfs -t ext4 -m 0 $disk
  13. echo "disk $disk is built with ext4 file system ..."
  14. mount -o noatime,user_xattr $disk $osd_dir
  15. echo "device: $disk is mounted on directory: $osd_dir ..."
  16. ceph mon getmap -o /tmp/monmap
  17. ceph-osd -i $osd_id --monmap /tmp/monmap --mkfs --mkjournal
  18. echo "osd $osd_id is initialized ..."
  19. osd_uuid=`ceph-osd -i $osd_id --get-osd-fsid`
  20. cat >> /etc/ceph/ceph.conf <<EOF
  21. [osd.$osd_id]
  22. host = $host
  23. public addr = $host
  24. cluster addr = $host
  25. osd uuid = $osd_uuid
  26. post stop command = python /usr/local/bin/syncfs.py -f /data/osd.$osd_id/ceph_fsid && /opt/MegaRAID/MegaCli/MegaCli64 -AdpCacheFlush -Aall
  27. EOF
  28. echo 'ceph config file is configured ...'
  29. mcs3-ha service_ceph start osd.$osd_id
  30. echo "osd $osd_id start ..."
  31. ceph osd crush add $osd_id 0 pool=default host=$bucket
  32. echo "osd $osd_id is added in crush ..."
  33. echo 'all works done ...'
  34. end_time=`date +%s`
  35. echo "end time: `date -d @$end_time "+%Y-%m-%d %H:%M:%S"`"
  36. time_consuming=$(($end_time - $start_time))
  37. echo "The total time consuming is $time_consuming s"

一键删除OSD脚本

  1. #! /bin/bash
  2. osd_id=$1
  3. ceph osd out osd$1
  4. /etc/init.d/ceph stop osd.$1
  5. ceph osd crush remove osd.$1
  6. ceph auth del osd.$1
  7. ceph osd rm $1
  8. #清空 ceph.conf

参考链接:

https://my.oschina.net/linuxhunter/blog/539312

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注