通常开源软件都会提供两种安装方式:tar包安装和RPM包安装,具体到Ceph,还提供了ceph-deploy的交互式安装方式,大大简化了Ceph的安装复杂度。在生产环境下,当然是建议使用ceph-deploy。然而对于软件开发人员来说,掌握一款开源软件最好的方式就是直接调试代码,下文告诉你如何在CentOS 7 安装Ceph调试环境。
首先从ceph官方下载源码包,我这里下载的是firefly 0.80.7
#> wget http://ceph.com/download/ceph-0.80.7.tar.gz
#> yum install -y make automake autoconf boost-devel fuse-devel gcc-c++ libtool libuuid-devel libblkid-devel keyutils-libs-devel cryptopp-devel fcgi-devel libcurl-devel expat-devel gperftools-devel libedit-devel libatomic_ops-devel snappy-devel leveldb-devel libaio-devel xfsprogs-devel git libudev-devel libcrypto++-dev libcrypto++-utils
Ceph的安装很简单,只要下面几步就好:
#> tar -zxvf ceph-0.80.7.tar.gz && cd ceph-0.80.7
#> ./autogen.sh
#> ./configure --prefix=/usr/local CFLAGS=-g
#> make -j8
#> make install
注意:
1. configure 命令后添加了CFLAGS=-g选项,这样用gdb或者cgdb调试的时候,才能找到符号
2. make 命令使用了多线程模式,以加快构建速度,通常线程个数设置为cpu核心数
安装完Ceph软件包后,下面就是配置Ceph了,首先将sample.ceph.conf和sample.fetch.conf文件拷贝到/etc/ceph/目录下,并分别重命名为ceph.conf和fetch.conf,命令如下:
#> mkdir -p /etc/ceph
#> cp /ceph-0.80.7/src/sample.ceph.conf /etc/ceph/ceph.conf
#> cp /ceph-0.80.7/src/sample.fetch.conf /etc/ceph/fetch.conf
修改后的fetch.conf 文件内容如下:
#> cat fetch.conf
## from a locally accessible file
cp /usr/local/etc/ceph/ceph.conf $conf
其中路径/usr/local是./configure 配置命令中指定的安装前缀
修改后的ceph.conf文件内容如下:
#> cat ceph.conf
【global】
log file = /var/log/ceph/$cluster-$name.log
##################################################################
【mon】
mon data = /data/mon$id
【mon.0】
host = ceph-test
mon addr = 192.168.20.159:6789
###################################################################
【osd】
osd data = /data/osd$id //osd的数据目录,需要先挂载
osd mkfs type = xfs //使用xfs文件系统
osd mkfs options xfs = -f
osd mount options xfs = rw, noatime
osd journal = /var/lib/ceph/osd/$name/journal
【osd.0】
host = ceph-test
devs = /dev/sdb1 //需要先格式化,并挂载到对应的 “osd data”目录
【osd.1】
host = ceph-test
devs = /dev/sdc1
【osd.2】
host = ceph-test
devs = /dev/sdd1
#> mkcephfs -a -c /user/local/etc/ceph/ceph.conf --mkfs
#> /usr/local/bin/ceph osd create //ceph.conf中配置了几个OSD,该命令就需要执行几次,本文中是3次
到这里一个简单的ceph调试集群就安装完成了,使用下面的命令启动集群:
#> /etc/init.d/cpeh -a start
Q: umount: /data/osd0 : not mounted
这是osd数据目录没有挂载导致,根据错误提示和ceph.conf配置挂载数据目录就好,如: mkfs.xfs -f /dev/sdb1 && mount -t xfs /dev/sdb1 /data/osd0
Q: usr/local/bin/ceph-osd:error while loading shared libraries: libtcmalloc.so.4: cannot open shared object file: No such file or directory
找不到tcmalloc库文件,可能是没有安装,也可能是路径不对;如果是第一种情况,安装就是;对于第二种情况,需要将tcmalloc库路径添加到ldconfig中,如下:
#> echo /usr/local/lib > /etc/ld.so.conf.d/libtcmalloc.conf
#> ldconfig
Q: /etc/init.d/ceph : no such file
#> cp ceph-0.80.7/src/init-ceph /etc/init.d/ceph
Q: /lib/lsb/init-functions : no such file or directory
#> yum install redhat-lsb
Q: ImportError: No module named rados
#> cp -rfdp /usr/local/lib/python2.7/site-packages/* /usr/lib64/python2.7/
Q: Error ENOENT: osd.0 does not exist. create it before updating the crush map
同“umount: /data/osd0 : not mounted”