需求
Ceph Luminous已经发布到12.2.4版本,经历了前几个版本的磨炼,Luminous版本也越来越稳定,它的Bluestore属性和CephFS提供的多主MDS一直是我们关注的重点。
参考ceph和ceph-deploy官方文档,本文介绍下使用ceph-deploy部署最新版Ceph Luminous 12.2.4,以及部署中遇到的问题。
软件版本
ceph-deploy版本
1 | # ceph-deploy --version |
ceph-deploy 2.0.0的changelog:
1 | 2.0.0 |
参考:http://docs.ceph.com/ceph-deploy/docs/changelog.html#id1
系统版本
1 | # lsb_release -a |
Ceph版本
yum源配置,选择最新的Luminous版本:
1 | # cat /etc/yum.repos.d/ceph.repo |
ceph安装
1 | # yum install -y ceph ceph-radosgw |
准备工作
使用ceph-deploy开始部署前,有如下几点要提前做好
部署节点安装 ceph-deploy
1
# yum install -y ceph-deploy
部署节点与ceph nodes之间ssh无密码访问
1
2# ssh-keygen
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keysceph nodes的hostname配置
1
# vim /etc/hostname
部署节点/etc/hosts配置 ceph nodes的hostname与ip的对应
1
2
3
4# vim /etc/hosts
100.60.0.20 ceph0
100.60.0.21 ceph1
100.60.0.22 ceph2ceph nodes配置ntp server
1
2# yum install -y ntp ntpdate ntp-doc
# systemctl start ntpdceph nodes安装ssh server
1
# yum install -y openssh-server
ceph nodes关闭或配置防火墙
1
2# systemctl stop firewalld
# systemctl disable firewalld
Ceph Monitor部署
开始部署Ceph Cluster,创建三个monitors:
1 | # ceph-deploy new ceph0 ceph1 ceph2 |
创建ceph keys:
1 | # ceph-deploy gatherkeys ceph0 ceph1 ceph2 |
一定要开启ceph 认证,不然该命令执行失败
与
ceph-deploy mon create
命令执行完要有一定时间间隔,等到monitor集群正常了才能执行
分发ceph配置和admin key到ceph集群节点:
1 | # ceph-deploy admin ceph0 ceph1 ceph2 |
检查当前ceph集群状态:
1 | # ceph -s |
参考:http://docs.ceph.com/ceph-deploy/docs/index.html#creating-a-new-configuration
Ceph manager部署
部署ceph-mgr
组件:
1 | # ceph-deploy mgr create ceph0 ceph1 ceph2 |
参考:http://docs.ceph.com/docs/master/mgr/
Ceph Luminous主推的用于Ceph集群管理的组件,默认在所有部署ceph-mon的节点都启动一个ceph-mgr
Ceph OSD部署
使用ceph-deploy
工具来部署ceph osd:
1 | # ceph-deploy osd create -h |
注:从Ceph Luminous 12.2.2开始, ceph-disk
就被弃用了,开始使用新的工具ceph-volume
。
参考:http://docs.ceph.com/docs/master/ceph-volume/
创建一个bluestore的osd,有以下几种设备选择:
- A block device, a block.wal, and a block.db device
- A block device and a block.wal device
- A block device and a block.db device
- A single block device
参考:http://docs.ceph.com/docs/master/ceph-volume/lvm/prepare/#bluestore
block device也有如下三种选项:
- 整块磁盘
- 磁盘分区
- 逻辑卷(a logical volume of LVM)
配置使用整块磁盘时,ceph-volume会自动创建一个logical volume使用
单独块设备创建OSD
整块磁盘
命令格式:
1 | # ceph-deploy osd create [host] --data [/path/to/device] |
首先销毁磁盘的分区信息:
1 | [root@ceph0 ceph-deploy]# ceph-deploy disk zap ceph0 /dev/sdb |
修改osd.py如下:
1 | [root@ceph0 ceph-deploy]# vim /usr/lib/python2.7/site-packages/ceph_deploy/osd.py |
再尝试disk zap
成功:
1 | [root@ceph0 ceph-deploy]# ceph-deploy disk zap ceph0 /dev/sdb |
从输出看,ceph-deploy调用ceph-volume lvm zap,最后是执行dd命令往disk前10M写入全0数据
创建OSD:
1 | # ceph-deploy osd create ceph0 --data /dev/sdb |
检查OSD:
1 | # df -h |
查看OSD block对应设备:
1 | # lsblk /dev/sdb |
结论:
- Ceph OSD的mount路径对应的是tmpfs,Linux基于内存的文件系统,而并没有单独的块设备与之对应
- 整块磁盘创建一个PV,然后创建VG和一个LV给OSD的
block
使用
没有单独的块设备与tmpfs对应,那上面的数据存在哪里了?
答:存在OSD的metadata里了!
1 | 文件:osd/OSD.cc |
磁盘分区
命令格式:
1 | # ceph-deploy osd create [host] --data [/path/to/device-partition] |
首先创建磁盘分区:
1 | # fdisk -l /dev/sdc |
请使用gpt分区格式,其他的会报错
创建OSD:
1 | # ceph-deploy osd create ceph0 --data /dev/sdc1 |
检查OSD:
1 | # ll /var/lib/ceph/osd/ceph-1/ |
结论:
- 与使用整块磁盘基本一样,不同的只是用磁盘分区创建一个PV
逻辑卷
命令格式:
1 | # ceph-deploy osd create [host] --data [vg/lv] |
首先创建一个逻辑卷:
1 | # pvcreate /dev/sdd |
创建OSD:1
2
3
4
5
6
7
8
9
10
11# ceph-deploy osd create ceph0 --data sddvg/sddlv
...
[ceph0][INFO ] Running command: /usr/sbin/ceph-volume --cluster ceph lvm create --bluestore --data sddvg/sddlv
...
[ceph0][DEBUG ] --> ceph-volume lvm activate successful for osd ID: 2
[ceph0][DEBUG ] --> ceph-volume lvm activate successful for osd ID: None
[ceph0][DEBUG ] --> ceph-volume lvm create successful for: sddvg/sddlv
[ceph0][INFO ] checking OSD status...
[ceph0][DEBUG ] find the location of an executable
[ceph0][INFO ] Running command: /bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host ceph0 is now ready for osd use.
若指定
--data /dev/sddvg/sddlv
,命令会报错,会被认为是block device
检查OSD:
1 | # ll /var/lib/ceph/osd/ceph-2/ |
结论:
- 与前两个一致,区别只是自己收到创建了PV,VG,LV
指定block.wal和block.db设备创建OSD
当指定block.wal
或block.db
时,对应的设备可以为两种:
- 物理磁盘,但必须是一个磁盘分区
- 逻辑卷(a logical volume of LVM)
这里只区分指定的block.wal
或block.db
设备,data设备选择整块磁盘。
bluestore的block.db
和block.wal
大小
默认值如下,db size = 0,wal size = 100663296,都比较小。
1 | # ceph-conf --show-config | grep bluestore_block |
参考:https://marc.info/?l=ceph-devel&m=149978799900866&w=2
对block.db
和block.wal
的大小要求也都比较小,后续测试我们选择block.db
和block.wal
为10G。
磁盘分区
命令格式:
1 | # ceph-deploy osd create [host] --data [/path/to/device] --block-db [/path/to/device-partition] --block-wal [/path/to/device-partition] |
首先创建两个磁盘分区给block.wal和block.db使用:
1 | # parted -s /dev/sdf print |
创建OSD:
1 | # ceph-deploy disk zap ceph0 /dev/sde |
检查OSD:
1 | # df -h |
结论:
- 与使用单块盘基本一样,不同的只是指定了
block.db -> /dev/sdf1
和block.wal -> /dev/sdf2
逻辑卷
命令格式:
1 | # ceph-deploy osd create [host] --data [/path/to/device] --block-db [vg/lv] --block-wal [vg/lv] |
首先创建两个逻辑卷给block.wal和block.db使用:
1 | # pvcreate /dev/sdm |
创建OSD:
1 | # ceph-deploy disk zap ceph0 /dev/sdg |
若指定
--block-db /dev/ssdvg/db-lv-0 --block-wal /dev/ssdvg/wal-lv-0
,命令会报错
检查OSD:
1 | # df -h |
结论:
- 与使用单块盘基本一样,不同的只是指定了
block.db -> /dev/ssdvg/db-lv-0
和block.wal -> /dev/ssdvg/wal-lv-0