Ceph 12源码编译部署bluestore

楔子:之前写过一份源码部署(QQ群 72651441 里有),但是ceph12版本编译完全变了,并且之前的部署方式也不能适应bluestore。

 

一,源码编译准备工作

1, 下载源码

官网下载地址为:

http://ceph.com/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)