一、概述
Ceph当前的自动化部署有两个,分别是ceph-deploy和ceph-ansible,语言都是python,对应的github库地址为:
ceph-deploy: https://github.com/ceph/ceph-deploy
ceph-ansible: https://github.com/ceph/ceph-ansible
ceph-deploy在手动部署中用的比较多,要实现自动化部署,必须再写脚本执行;
ceph-ansible基于ansible,可以实现根据配置文件的ceph自动化部署;
我在之前写过一个基于ceph-deploy部署ceph的自动化脚本,用起来比较方便熟练;
所以这里我写的自动化部署是基于自写脚本调用ceph-deploy的自动化部署;
二、脚本
这里有两个文件:
1  | root@ceph0:~/ceph-deploy# ls  | 
- ceph-auto-deploy.py: 执行自动化部署的python脚本
 - deploy.conf:ceph deploy的配置文件,里面包括了ceph cluster的配置信息,ceph集群的参数优化信息等;
 
deploy.conf
该文件里需要用户配置的信息如下:(在文件底部)
1  | ##################  | 
指定Ceph组件部署在哪些Host上:
- mon_hosts = ceph0, ceph1, ceph2
- Ceph Monitors部署ceph0, ceph1, ceph2上
 
 
- osd_hosts = ceph0, ceph1, ceph2
- Ceph OSDs部署ceph0, ceph1上
 
 - rgw_hosts = ceph0
- Ceph RadosGW部署ceph0上(若不配置RadosGW,可注释掉改行)
 
 
指定每个部署OSDs的host上,哪些磁盘来启动osd:(于上述配置osd_hosts对应)
1
osd.ceph0.devs = vdb:vde, vdc:vde, vdd:vde
在ceph0上,启动 vdb, vdc, vde三个osd,vde作为这三个osd的journal盘
1
osd.ceph1.devs = vdb, vdc, vdd
在ceph1上,启动 vdb, vdc, vde三个osd,每个盘会自动格式化一个分区作为journal
注: 在deploy.conf里可配置journal size
ceph-auto-deploy.py
该文件是自动化部署ceph的执行脚本,支持的命令有:
1  | root@ceph0:~/ceph-deploy# python ceph-auto-deploy.py --help  | 
常用的命令有:
python ceph-auto-deploy.py
根据deploy.conf的配置,部署ceph集群python ceph-auto-deploy.py -p
根据deploy.conf的配置,删除旧ceph系统和其中ceph相关数据python ceph-auto-deploy.py -r
根据deploy.conf的配置,执行purge后,重新安装ceph系统相关packages(不会部署ceph集群)
三、依赖
执行上述python自动化部署ceph集群,依赖ceph-deploy,整体架构如下:

其中ceph-deploy所在节点也可以是ceph的node节点。
所以有如下两个依赖:
- admin-node上安装ceph-deploy
 - admin-node到ceph nodes的无密码登陆
 
四、部署步骤
这里以三个虚拟机自动化部署ceph集群为例,说明该自动化脚本的使用:
三个节点分别为:
| node | Hostname | Network | Devices | 
|---|---|---|---|
| node1 | ceph0 | 192.10.4.109 | vdb, vdc, vdd, vde | 
| node2 | ceph1 | 192.10.4.110 | vdb, vdc, vdd, vde | 
| node3 | ceph2 | 192.10.4.111 | vdb, vdc, vdd, vde | 
每个node节点的系统信息为:
1  | root@ceph0:~# lsb_release -a  | 
确定nodes节点角色
首先我们需要确定使用哪个node作为admin-node,然后确定ceph集群nodes节点都部署哪些组件,包括Monitor、OSD、RadosGW、MDS等;
根据ceph集群部署需求,我们可以做如下node节点角色规划:
| node | Hostname | Role | ceph Network | Ceph Component | OSD/Journal Devices | 
|---|---|---|---|---|---|
| node1 | ceph0 | admin-node ceph-node | 192.10.4.109 | Monitor, OSD | OSD: vdb, vdc, vdd Journal: vde | 
| node2 | ceph1 | ceph-node | 192.10.4.110 | Monitor, OSD | OSD: vdb, vdc, vdd Journal为OSD盘的一个分区 | 
| node3 | ceph2 | ceph-node | 192.10.4.111 | Monitor | 不配置OSD | 
注:上述规划与第二章节中的 deploy.conf 配置保持一致
admin-node节点安装ceph-deploy
如前文所述,需要在选择的admin-node上安装自动化部署依赖的ceph-deploy,步骤如下:
1  | root@ceph0:~# apt-get install -y ceph-deploy  | 
获取pkg源的ceph版本信息
我们当前推荐安装Ceph的Jewel版本(10.2.*),在Ubuntu系统上,我们可以通过下面命令获取其对应的Ceph pkgs版本信息:
1  | root@ceph0:~# apt-get update  | 
注:若对应Ceph不是Jewel版本,需要更换pkg源
admin-node节点配置无秘访问ceph nodes
自动化部署脚本会通过ssh自动在ceph nodes节点执行命令,ceph-deploy也依赖ssh的无秘访问nodes节点,所以这里我们要先配置这些:
- /etc/hosts上添加ceph nodes节点的hostname与ip的对应关系
 
1  | vim /etc/hosts  | 
- 生成admin-node节点的ssh key
 
1  | root@ceph0:~# ssh-keygen  | 
- 在其他节点填入ceph0的public key
 
1  | root@ceph0:~# cat ~/.ssh/authorized_keys  | 
注:因为ceph0既是admin-node,也是ceph node,所以也需要配置本身的ssh无秘访问
admin-node节点执行自动化部署
之前的准备工作做完后,就可以通过自动化脚本部署Ceph集群了
- 获取ceph deploy自动化脚本
 
GitLab地址:https://github.com/ictfox/ceph-deploy
1  | root@ceph0:~# cd ceph-deploy  | 
- 根据第二章节介绍,配置 deploy.conf 文件
 
1  | root@ceph0:~/ceph-deploy# vim deploy.conf  | 
- 安装Ceph对应packages
 
1  | root@ceph0:~# python ceph-auto-deploy.py -r  | 
这个会花费些时间,但每个Ceph node上安装ceph相关pkgs是并行的,时间不会太长;
- 执行命令,自动化部署Ceph集群
 
1  | root@ceph0:~# python ceph-auto-deploy.py  | 
这个会花费较长时间,因为ceph-deploy部署osd时是串行的,为了使得每个Host上的osd id是连续的,方便之后ceph集群使用。
中间也可能出错,错误信息会输出到屏幕上,详细错误信息也会输出到同目录下的文件:ceph-deploy-ceph.log 里,方便出错时候查看定位问题。