一、概述
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 里,方便出错时候查看定位问题。