作为一名运维架构师,我非常关注一个项目如何高效简便地复用、部署和落地,因为,在开发阶段,如果能提供一套与生产环境一样或相近的开发环境,将大大减少开发及测试人员后期排查生产环境问题的工作量。
因此,在按照 FISCO BCOS 技术文档企业级部署章节实践后,我们团队一直在思考,如何让这个部署更高效、更具有弹性?经过一番研究,我们编写了一套 Ansible 脚本来优化其中的实现。
以文档中演示的2群组3机构6节点的场景为例,手工操作整个流程的多个步骤,需要10-20分钟,而且容易因为手工错误的输入,产生错误的结果。而 Ansible 在这方面有天然优势,可以批量自动处理。下面我将分享如何通过 Ansible 实现FISCO BCOS 的企业级部署。
Ansible for FISCO BCOS 的优化思路
首先,我们先来看看FISCO BCOS 技术文档中的企业级部署操作。
可以看到,FISCO BCOS 官方文档操作流程需要不少手动输入命令。面对更大规模的部署场景时,这些操作次数会呈几何级增长,出错的几率也会随之增加,运维人员在项目落地实施中的工作量也将增加。
从提升部署效率、降低出错率出发,我们通过Ansible对目前的部署实现进行了优化,主要的优化思路有以下几点。
通过配置文件,把所有要部署的节点转换成一个列表 node_list
格式是“机构名称:主群组编号:节点IP:P2P端口:Channel端口:RPC端口:额外群组编号('0'表示没有)”。如下图:
通过 Ansible 的 add_hosts 模块,动态把 node_list 分组
分别是节点按所属机构、所属群组(包括 main_group_id 和 extra_group_id)分组,机构按所属群组(包括 main_group_id 和 extra_group_id)分组。这样,每个机构以及节点就可以根据分组,分别走不同的操作流程,生成正确的部署文件。如下图:
根据群组 ID 命名 P2P 连接信息文件
经过分析,我们认为根据群组 ID 命名 P2P 连接信息文件比按机构名称命名更合适。因为它的实际内容就是同组但不同机构的节点列表,所以经过自定义模板文件(例如 peers_1.txt),在联盟初始化阶段,可以实现每个机构同时加入到多个群组中,并且联盟链中可以产生一个仲裁机构,如下图的机构 A 就是仲裁机构。
最终,通过 Ansible 优化后的操作步骤如下图:
Ansible for FISCO BCOS 项目的优势
优化后的操作流程不仅简便,还具备多方面的优势。
实测中,非国密版2群组3机构6节点,24秒就能生成所需的部署文件;国密版3群组5机构50节点,仅需60秒。
轻松易上手。执行一行命令,自动化生成整个企业级部署所需的文件,不懂 Ansible 的用户,也能轻松使用。
可实现对多个机构或节点进行自动化批量操作。优化了 FISCO BCOS 技术文档的单线操作流程,改为多线并发操作流程。
运维工作更清晰。整个集群的架构,预先在一个变量文件里编写好,方便执行前审查确认,执行后核对输出结果。
有效避免因手工操作产生的输入错误、执行顺序错误等问题。优化后的执行过程中设有一系列的前置检查,确保没有冲突的配置项。
支持国密版部署。执行相应命令,可自动判断是否添加国密参数。
支持多套部署环境,统一在 inventories 目录下进行管理。
客户自主掌控服务器。由于FISCO BCOS只在本地生成部署文件,优化后,实施人员可以把部署文件分发给机构客户的运维人员进行部署。
操作演示
接下来,我们将分两部分来演示这套 Ansible脚本。第一部分是初始化联盟链,第二部分是在联盟链初始化并部署后,对已有机构进行扩展节点的操作。
初始化的演示
下面我们以国密版3群组5机构50个节点的部署架构为例,展示 Ansible for FISCO BCOS 的优势。
定义 init.yml 文件
name: (必填)机构名称
create_genesis: 是否生成创世区块,同组必须有且只有1个创世区块机构。(不设置则默认为 false)
nodes: (必填)机构各节点连接信息。格式 <ip>:<节点数>。如果只填写 IP,则默认为1个节点。同 IP 多节点会自动递增对应端口。
main_group_id: (必填)群组编号
extra_group_id: (可选)额外要加入的目标群组编号
其中机构 A 是仲裁机构,它同时加入到3个群组之中。
同时把 fisco_gm_enabled 变量设为 true
执行命令 ansible-playbook fisco_bcos.yml
除去下载 generator 和 fisco-bcos 执行文件的时间,仅需要60秒(不同配置的机器耗时也略有不同,非国密版耗时更短)。
以仲裁机构 A 的节点文件为例,它们同时拥有了3个群组的创世区块。部署到目标服务器启动后,查看日志输出,全部达成共识,正常运行。
以机构 A 的日志为例:
添加节点的演示
一套集群初始化部署后,可能会因为业务的增长,需要扩展节点。假设我们要给机构 E 增加1台机器,部署5个节点。那么先修改 init.yml 文件,nodes 添加一行记录 172.17.8.111:5,如下图:
因为每次 node_list.yml 文件有变动,Ansible 都会自动备份该文件,所以就可以对新旧列表做比对,筛选出新增节点,添加到扩展节点组,走节点扩展流程。
再次执行 ansible-playbook fisco_bcos.yml 命令。你可以看到以下输出内容:
生成的文件如下图所示。我们会给扩展节点目录的命名添加一个哈希值(根据新增节点的列表内容),以确保每当有新增节点时,生成的目录名不会有冲突。
结语
以上就是对 Ansible for FISCO BCOS 项目的简单介绍,很高兴与社区一起分享关于自动化运维方面的知识。
FISCO BCOS 这个开源项目降低了区块链的应用门槛,得益于此,我的领导和同事都大力支持把这个 Ansible for FISCO BCOS 项目开源,回馈社区。我们也期待更多业内同好一起来打造这个项目,让它能更好地解决实际部署中的各个痛点,让 FISCO BCOS 的落地实施变得轻松简单。
如果大家在使用中遇到任何问题或有任何建议,都欢迎在GitHub 上提交 issue,也欢迎大家分享自己的成功实施案例,给我们打气加油哦。
项目源码地址:
https://github.com/newtouch-cloud/ansible-for-fisco-bcos
FISCO BCOS的代码完全开源且免费
下载地址↓↓↓
https://github.com/FISCO-BCOS/FISCO-BCOS