深入理解ceph-disk运行机制
谷忠言
一,背景
目前项目所用的ceph集群内部的一个节点, 一般需要管理大约十块硬盘左右的数据存储空间,外加一到两块ssd组成的journal空间。Ceph要求每个osd对应的数据盘挂载到特定的目录,对应的ssd的journal分区也不能加载错,否则osd 无法启动。
目前对于数据盘的挂载采用的是基于/etc/fstab的方式。
上图是某个节点的/etc/fstab的实例。/dev/slot* 是一个由diskctl_init.sh 脚本产生的从/dev/slot* 到/dev/sdx的映射。如下图所示。
Diskctl_init.sh的原理是生成的slot 与主板物理槽位磁盘接口形成固定映射,这样当盘符漂移的时候,/dev/slot* 始终对应物理槽位的磁盘。只要磁盘不插拔更换物理槽位,osd 就能加载正确的数据盘。
而对于ssd journal分区,则是直接采用的journalà盘符的裸映射。
存在的问题:
1. Ssd journal分区的盘符裸映射, 有时候会导致机器重启,ceph服务起不来。测试发现,正是由于盘符漂移,裸映射成为死链。
2. Diskctl_init.sh 生成的slot 映射, 据同事反映,也可能有潜在的问题。具体细节不详。
二,调研ceph-disk
Ceph-disk 是官方发布的一个用于部署osd 数据及journal分区或目录的工具。基于python.安装ceph rpm包将默认安装此工具,安装目录是/usr/sbin/ceph-disk。由于此工具涉及数据盘及journal盘的分区。需要root权限。
ceph-disk 是如何工作的?
通过ceph-disk 部署osd, 数据分区和journal 分区将自动挂载到正确的目录,机器重启也能保证工作。通过ceph-disk部署osd, 将大大提高ceph部署运维的自动化程度,并降低操作出错几率。
以新创建OSD为例,描述ceph-disk的工作机制。
分为两大步骤:prepare disk 和activate disk
假设/dev/sdg是OSD要使用的数据盘, /dev/sdk 是SSD, OSD要使用的journal分区在这里创建。则创建OSD 并上线的命令如下:
Ceph-disk prepare /dev/sdg /dev/sdk
Ceph-disk activate /dev/sdg1
下面详细深入其过程。
1. 准备journal分区。
Prepare_journal_dev()调用分区工具sgdisk从/dev/sdk上划分一块journal分区。
有以下注意要点:
a. 在调用sgdisk之前,pre