之前一直使用ceph-deploy部署ceph,后来学习了ansible,感觉挺好用的,正好ceph官方有一套ceph-ansible 对ceph 进行 自动化 的安装,所以直接拿来用了:
环境准备
IP | 主机名 | 节点 | 系统 |
---|---|---|---|
172.28.7.238 | cephrepo-001 | ceph-ansible | Centos7.2.1511 |
172.28.7.244 | cephansible-001 | mon、mgr、osd | Centos7.2.1511 |
172.28.7.245 | cephansible-002 | mon、mgr、osd | Centos7.2.1511 |
172.28.7.246 | cephansible-003 | mon、mgr、osd | Centos7.2.1511 |
每个虚拟机分别再挂载两块磁盘:/dev/vdb(500G)、/dev/vdc(8G), 分别用于data和db
说明
- 这里直接使用root用户部署
- 若无特别提醒,都在 172.28.7.238 机器上操作
免密登陆
我们需要ceph-ansible节点对所有的mon、osd、mgr节点进行免密登陆
/etc/hosts 配置
|
|
配置源
所有ceph节点删除默认的源文件,然后配置本地源(172.28.7.238)
yum update
rm -rf /etc/yum.repos.d/CentOS-*
yum clean all
yum makecache
时间同步
把 172.28.7.244作为时钟服务器
所有ceph节点执行:
172.28.7.244执行:
172.28.7.245、172.28.7.246执行:
依赖安装
我们通过lvm来管理, 所以需要在所有osd节点安装lvm
磁盘准备(pv/vg/lv)
mon 节点
如果是生产环境,则会单独准备一块ssd,然后分区挂载到/var/lib/ceph/osd给mon使用,
这里是测试环境,就使用默认的系统文件系统
osd节点
如果是生产环境,综合成本性能考虑,我们会把用作db的ssd磁盘,根据osd个数N,平均分成N个分区。
因为是测试环境,每个节点只有一个osd进程,我们把整块的磁盘给db使用
创建pv
|
|
创建vg
|
|
创建lv
|
|
ansible/ceph-ansible安装
在 172.28.7.238 上安装:
配置ansible
|
|
配置ceph-ansible
我们需要哪一些,就执行:
修改成.yml的格式
site.yml
|
|
group_vars/all.yml
|
|
group_vars/mon.yml
mon没有手动修改项,只需要存在mon.yml文件就可以
group_vars/osd.yml
|
|
group_vars/mgrs.yml
没有改变mgr配置,只需要存在mgrs.yml文件即可
roles/ceph-config/templates/ceph.conf
没有改变ceph.conf,只需要存在ceph.conf文件即可
roles/ceph-defaults/defaults/main.yml
|
|
roles/ceph-common/tasks/main.yml
|
|
安装
在 172.28.7.238 上执行:
问题
安装过程mon如果有问题,需要所有 mon 执行如下:
然后再次执行:
当执行完成后,通过:
可以看到集群已经ok,所有osd也已经up/in
由于我们配置里设置了:osd_crush_update_on_start = False
所以当我们创建pool的时候集群状态会提示:
解决方式:拷贝osd节点的/etc/ceph/ceph.conf 到172.28.7.238上,然后设置该ceph.conf:
osd_crush_update_on_start = True,然后再把该ceph.conf 拷贝到所有osd节点覆盖, 最后重启所有osd.
通过ansible执行:
注意:因为是测试环境,而且是第一次部署,所以可以这么操作。如果是生产环境的情况下,需要考虑集群的稳定性
最后设置ceph.conf 的osd_crush_update_on_start = False , 然后再次覆盖所有osd的ceph.conf,这次不用重启osd服务
最后附动态调参格式: