用 Puppet 部署 CEPH

#+SETUPFILE: ~/Dropbox/Doc/Org_Templates/level-1.org

相比其他分布式系统(e.g. glusterfs), Ceph 的复杂毋庸置疑, 甚至在部署上也稍显 麻烦, 目前主流的部署方式主要有以下几种:

  • ceph-deploy: 取代之前的 mkcephfs, 不推荐在生产环节使用
  • chef: 官方推荐的部署工具
  • puppet: 大家部署这些服务最喜欢的方式
  • XXX: 自己从底层定制, 比如我这里写的 ceph-aio

本文主要介绍用 puppet 部署 ceph.

基本配置

三台机器, 每台机器都分别作为 monitor 和 osd, 并且每台机器都有两个磁盘, 把第二个磁盘(/dev/vdb)作为 osd. 我这里使用 这个 puppet 模块, 但是这个模块 官方没有对同时把一台节点变为 monitor 和 osd的测试, 我这里测试中也出了一点问题, 我用了一些 work around 的方法, 需要注意, 下面的 Troubleshoot 中会提到.

我部署的基本环境如下:

Hostname Ip Address Roles osd
ceph1.test 192.168.176.30 master + mon + osd /dev/vdb
ceph2.test 192.168.176.31 agent + mon + osd /dev/vdb
ceph3.test 192.168.176.32 agent + mon + osd /dev/vdb

修改每台节点的 hosts 文件, 使得可以互相用主机名 ping 通

# cat /etc/hosts
... ...
192.168.176.30  ceph1.test
192.168.176.31  ceph2.test
192.168.176.32  ceph3.test

puppet master 配置

1 安装 puppet 软件包

# apt-get install -y ruby1.8 puppetmaster sqlite3 libsqlite3-ruby \
  libactiverecord-ruby git augeas-tools puppet ruby1.8-dev libruby1.8
# update-alternatives --set ruby /usr/bin/ruby1.8

2 配置 puppet

修改 /etc/puppet/puppet.conf 的相应配置项为:

[master]
storeconfigs = true
dbadapter = sqlite3

[agent]
pluginsync = true
server = ceph1.test

设置我们的节点不需要认证:

# echo "*.test" > /etc/puppet/autosign.conf

3 puppet 的模块设置

安装需要的 puppet 模块:

# puppet module install ripienaar/concat
# puppet module install puppetlabs/apt

安装 puppet 的 ceph 模块:

# cd /etc/puppet/modules
# git clone git://github.com/enovance/puppet-ceph.git ceph

4 配置 site.pp 文件

我照着文档写了对应上面三个节点的 site.pp 文件, 可以从发 这里 下载, 然后拷贝到 /etc/puppet/manifests 目录下

5 重启 puppetmaster

# service puppetmaster restart

puppet agent 配置

注意: 此操作要在三个节点上同时执行.

1 安装 puppet 软件包

# apt-get -y install puppet

2 修改 /etc/puppet/puppet.conf 的相应配置项为:

[agent]
pluginsync = true
server = ceph1.test

3 大功告成, 开始利用 puppet 部署 ceph

# puppet agent --enable
# export AGENT_OPTIONS="--onetime --verbose --ignorecache --no-daemonize --no-usecacheonfailure --no-splay --show_diff --debug"
# puppet agent $AGENT_OPTIONS # 运行五步这步操作, 分别可以获取 keyring, 配置磁盘等等

4 依次登陆每个节点同步 ceph 的配置文件

# ssh cephx.test
# puppet agent -vt

Troubleshoot

在配置 osd 的时候会发现初始化 osd 的时候失败, 官方对同时把节点当做 monitor 和 osd 没有进行详细的测试, 我这里手动初始化 osd 来 work around 这个问题, 我这里 以 ceph1.test, 也就是 osd.0 为例来说明

# rm -rf /var/lib/ceph/osd/ceph-0/* # 先清空之前初始化失败的数据
# ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-0/keyring # 初始化 osd 的目录
# service ceph start osd.0 # 启动 osd 服务

可以看到现在 osd 正常了

# ceph osd tree
# id    weight  type name   up/down reweight
-1  0.04999 root default
-2  0.04999     host ceph1
0   0.04999         osd.0   up  1

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦