楔子:之前写过一份源码部署(QQ群 72651441 里有),但是ceph12版本编译完全变了,并且之前的部署方式也不能适应bluestore。
一,源码编译准备工作
1, 下载源码
官网下载地址为:
http://ceph/download/
此次我们用的版本是ceph-12.0.1版本,操作系统为redhat7.1。
这里建议从官方网站上下载源码,而不是在github上git clone源码,经过本人测试git clone下来的源码会造成部分缺失,产生编译错误。
把源码通过ssh把源码上传到linux服务器解压。(注意:一定要上传后解压,而不是windows上解压后上传,不然编译的时候会出现文件权限问题)
2, 安装依赖包
yum install libtool gcc gcc-c++ libuuid-devel keyutils-libs-devel libblkid-devel redhat-lsb libedit-*
yum install libatomic_ops-devel snappy-devel leveldb-devel libudev-devel cryptopp-* fuse-devellibaio-devel xfsprogs-devel automake autoconf boost-devel expat-devel
如果需要分析源码最好把lttng也装一下,lttng需要的包为:
yum install systemd-devel-219-27.fc22.x86_64.rpm userspace-rcu-0.7.16-1.el7.x86_64.rpm userspace-rcu-devel-0.7.16-1.el7.x86_64.rpm lttng-tools-2.4.1-5.el7.x86_64.rpm lttng-ust-2.4.1-4.el7.x86_64.rpm lttng-ust-devel-2.4.1-4.el7.x86_64.rpm lttng-tools-devel-2.4.1-5.el7.x86_64.rpm lttng-ust-debuginfo-2.4.1-4.el7.x86_64.rpm
二,ceph编译
1, 把ceph-12.0.1.tar.gz解压到home目录下
2, 进入ceph源码的目录执行 mkdir build
3, 执行cd build
4, 执行 cmake . –LH 查看下ceph有哪些编译选项,根据自己的需要来选择
5, 这边我执行cmake ..-DWITH_LTTNG=OFF -DWITH_RDMA=OFF -DWITH_FUSE=OFF -DWITH_DPDK=OFF-DCMAKE_INSTALL_PREFIX=/usr 配置我的选项
6, 执行make –j8 编译源码
7, 执行make install 编译安装源码
三,源码的部署前的准备工作
由于老版本的mkcephfs在bluestore上不好用,这次我们选择手动部署,通过手动能了解部署的原理
1, 配置系统属性
关闭防火墙,做互信,做节点名,这些就不说了,老套路了。下面做个三节点三副本的集群,配置如下:
主机名 | IP地址 | 作用 | 备注 |
node01 | 192.168.2.103 | Mon、OSD | 做一个mon, 2个硬盘做2个osd |
node02 | 192.168.2.104 | OSD | 2个硬盘做2个osd |
node03 | 192.168.2.105 | OSD | 2个硬盘做2个osd |
2, 硬盘分区,
每个硬盘分4个区,3个节点上都需要这样分区
#parted -s -a optimal /dev/sdbmkpart osd-device-0-data 0G 10G
#parted -s -a optimal /dev/sdbmkpart osd-device-0-wal 10G 20G
#parted -s -a optimal /dev/sdbmkpart osd-device-0-db 20G 30G
#parted -s -a optimal /dev/sdbmkpart osd-device-0-block 30G 100%
#parted -s -a optimal /dev/sdcmkpart osd-device-0-data 0G 10G
#parted -s -a optimal /dev/sdcmkpart osd-device-0-wal 10G 20G
#parted -s -a optimal /dev/sdcmkpart osd-device-0-db 20G 30G
#parted -s -a optimal /dev/sdcmkpart osd-device-0-block 30G 100%
最后结果如下:
3, ceph.conf配置
[global]
osd crush chooseleaf type =0
[mon]
mon data=/data/$name
[mon.0]
host=node01
mon addr=192.168.2.103:6789
[osd]
osd mkfs type=xfs
osd data = /data/$name
enable_experimental_unrecoverable_data_corrupting_features= bluestore
osd objectstore = bluestore
bluestore = true
bluestore fsck on mount = true
bluestore block create = true
bluestore block db size =67108864
bluestore block db create = true
bluestore block wal size =134217728
bluestore block wal create =true
[osd.0]
host = node01
bluestore block db path =/dev/sdb2
bluestore block wal path =/dev/sdb3
bluestore block path = /dev/sdb4
[osd.1]
host = node01
bluestore block db path =/dev/sdc2
bluestore block wal path =/dev/sdc3
bluestore block path = /dev/sdc4
[osd.2]
host = node02
bluestore block db path =/dev/sdb2
bluestore block wal path =/dev/sdb3
bluestore block path = /dev/sdb4
[osd.3]
host = node02
bluestore block db path =/dev/sdc2
bluestore block wal path =/dev/sdc3
bluestore block path = /dev/sdc4
[osd.4]
host = node03
bluestore block db path =/dev/sdb2
bluestore block wal path =/dev/sdb3
bluestore block path = /dev/sdb4
[osd.5]
host = node03
bluestore block db path =/dev/sdc2
bluestore block wal path =/dev/sdc3
bluestore block path = /dev/sdc4
db path为rocksdb 存放数据的位置
wal path 为rocksdb的原子操作位置
block path 为实际数据存放的位置
而我们留下的第一个分区 /dev/sdb1 、/dev/sdc1 做为osd的元数据存放位
置,里面存放osd的keyingwhoimi 等校验文件
4, 挂在osd的元数据
node01上
#mount /dev/sdb1 /data/osd.0
#mount /dev/sdc1 /data/osd.1
node02上
#mount /dev/sdb1 /data/osd.2
#mount /dev/sdc1 /data/osd.3
node03上
#mount /dev/sdb1 /data/osd.4
#mount /dev/sdc1 /data/osd.5
四,部署
1, 在node01上创建一个mon
#ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -nmon. --cap mon 'allow *'
#ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring--gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *'--cap mds 'allow'
#ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring/etc/ceph/ceph.client.admin.keyring
#monmaptool --create --clobber --add node173 192.168.2.103 --fsid f377e8e6-6710-4395-ae5d-5108208983ce/etc/ceph/monmap
#ceph-mon --mkfs -i node01 --monmap /etc/ceph/monmap --keyring/etc/ceph/ceph.mon.keyring
#ceph-mon -i node01 //启动mon
2, 创建osd
下面列举了osd.0的创建方法,就不一一例举了,其他的都是依样画葫芦。不过要注意的是每个节点上cephosd crush add-bucket nodex host。只能创建一次,如果host在crush里创建过,只要把osd add进host就可以了。
#ceph osd create //去mon里申请一个osd号
#ceph-osd -i 0 --mkfs –mkkey //创建osd的元数据
#ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i/data/osd.0/keyring
//把osd元数据里的keying去mon里校验
#ceph osd crush add-bucket node01 host //在crushmap里创建一个host
#ceph osd crush move node01 root=default //把host加到crushmap跟节点root
#ceph osd crush add osd.0 1.0 host=node01 //把osd加到crushmap的host下面
#ceph-osd -i 0 //启动osd
五,ceph源码的分析方法
1,通过lttng可以查看IO执行的流程,关于lttng的用法以后会有详解
2,通过lttng分析了大概流程后,可以通过gdb,分析具体细节的流程,gdb的bt命令可以很方便的查看调用关系。
3,通过netstat , tcpdump等网络工具可以配合分析网络层的源码
4,打开日志最高权限20,可以通过日志查看ceph逻辑的执行流程
5,通过admin-socket可以查看ceph各模块经过多少IO了,哪些队列有IO滞留,可以分析性能的瓶颈。
谢谢
更多推荐
Ceph 12源码编译部署bluestore
发布评论