点击上方“中兴开发者社区”,关注我们
每天读一篇一线开发者原创好文
▍作者简介
作者纪伯年16年毕业于哈工大,目前是中兴通讯的后端开发,专注于云计算与存储技术。平时喜欢学习一些相关领域的架构知识,并热衷于钻研精妙的算法与逻辑。
▍背景介绍
当前项目中Ceph部署采用利用Ansible调用部署脚本的方式,Ceph部署部分文本分为两部分:Ceph配置部署脚本,Ansible执行脚本。本文以当前项目版本的Ceph配置部署文件为例,对Ceph自动化部署中的命令进行解释与分析,旨在提供一份基于实例的实用性文档,方便他人日后对文件的解读与修改,或是对当前实例的部分或完整复现。
▍文件结构解析
Ceph部署部分代码包含9个文件,其中ceph-pkgs.tar.gz为Ceph安装包文件,script.tar.gz为Ceph部署脚本压缩包文件,其余为Ansible执行文件。
Ansible执行文件中,deploy.yml为Ansible入口文件,vars.yml为变量文件,其余为执行任务文件。将script.tar.gz解压后可以看到Ceph配置执行文件的内容,其中install-package.sh为Ceph安装脚本,其余均为Ceph配置部署脚本。代码执行的流程如下图所示:
▍Ansible执行代码解析
1. 基础介绍
Ansible的脚本叫做Playbook,用YAML格式编写。最基本的Playbook包含三个部分:主机与用户、执行任务、响应事件。任务的执行会调用Ansible的各种模块。下面将结合具体实例逐条语句分析,更多Playbook语法请参见Ansible书籍或官方文档
2. 代码解析
按照代码执行顺序,首先进入deploy.yml文件。以下为文件源码及解析:
而后在任务列表中,进入unarchive.yml文件。以下为文件源码及解析:
随后执行install-package.yml。以下为文件源码及解析:
接下来执行deploy_task.yml。以下为文件源码及解析:
经过Ceph配置部署脚本的运行后,Ceph部署成功,然后运行osd_task.yml和rest_api.yml。以下为文件源码及解析:
Vars.yml为变量文件,格式较为规矩,在此不做赘述。
以上即为Ansible执行脚本的简要解析,其中出现的模块、方法有限,故介绍不够全面,如需更丰富的配置和操作请参阅书籍或手册。
▍Ceph配置部署脚本解析
1.基础介绍
所有Ceph的部署都始于存储集群。Ceph存储集群有两类守护进程:对象存储守护进程OSD(Object Storage Device Daemon Progress)和监听器MON(Monitor)。若要运行Ceph文件系统(CephFS)则还需要一个元数据服务器MDS(Metadata Server)。本例为搭建3节点的Ceph集群并使用CephFS,需要1个MON,三个OSD,两个MDS。
2.代码解析
当Ansible运行到install-package.yml最后一句时运行install-package.sh脚本文件。以下为文件源码及解析:
而后,Ansible继续运行到deploy_task.yml中,调用deployInterface.sh脚本文件并输入参数。以下为文件源码及解析:
随后进入ceph-deploy.sh开始执行Ceph集群配置及部署。以下为文件源码及解析(本节代码较长,格式多样,故源码和解析并非完全左右分布,且照源码有些许不同,但我相信你们看得懂):
部署节点2、3时调用了ceph-rest-api.sh脚本,用以启动restful api。以下为文件源码及解析:
此脚本在节点2、3上均执行一次,随后在Ansible执行最后一个文件rest_api.yml时再在本节点执行一次。
依次退出ceph-deploy-.sh、deployInterface.sh、deploy_task.yml后,Ansible进入osd_task.yml调用deploy-osd.sh脚本。以下为文件源码及解析:
最后,Ansible进入rest_api.yml,调用ceph-rest-api.sh脚本。自此,Ceph配置、部署的工作全部完成。
▍总结
本文以Ceph部署部分源码为例,对基于Ansible的Ceph配置部署文件进行了逐条解析。尽管抱着既详尽又清爽的初衷,但Ceph本身的结构、细节的配置并不易理解与掌握,加之官方文档遭烂的结构体系和不完整的关键词解释(英文文档稍好,也没好多少),使得在赶工下完成的本文既不详尽又不清爽。还望和大家共同探讨并给与指正。