Skip to content

newtouch-cloud/ansible-for-fisco-bcos

Repository files navigation

一键生成 FISCO-BCOS 企业级架构部署

本项目为区块链开源项目 FISCO-BCOS 提供了自动化生成企业级配置文件的 ansible playbook。2 群组 3 机构 6 节点的环境,可以在 30 秒内(不包括下载时间)生成配置,极大简化了部署难度,避免了手工配置容易发生的错误。

注:30 秒时间是在以下机器配置中录得

  • CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz * 2

  • RAM: DDR3(1333MHz)8GB * 12

  • HD: WD 4TB 7200rpm

  • OS: Manjaro Linux(Kernel 5.10.2)

项目仍在重度开发中,如果你在使用时遇到问题,请先 git pull 更新再试。如果问题依然存在,请提交 issue 以便及时得到解决。非常感谢你的使用。

重要提醒:已上线的联盟链,请务必备份并保管好 deploy 目录!

已实现的功能

  1. 多群组多机构多节点的联盟链初始化配置。目前测试生成 3 群组 5 机构 50 节点的部署文件是没问题的。
  2. 可在已初始化的机构里新增节点。
  3. 可指定 generator,ficso-bcos 和 console 的版本。
  4. 可定义是否启用 console,sdk,国密。
  5. 可生成部署架构图,方便部署前后的核对。

计划实现的功能

  1. 支持对节点配置文件 config.ini 的定制。
  2. 支持使用机构私有证书来签发链证书。
  3. 支持在已初始化的联盟链中增加机构。

设计思路

  1. 参考官方文档,示例架构 2 群组 3 机构 6 节点。
  2. 所有文件在本地目录生成。方便分发给不同的真实机构,由机构的运维人员自行部署启动。
  3. 更详细的内容请看《Ansible for FISCO BCOS,企业级部署的速度与激情》

相关版本信息

验证环境(基于 Docker 容器)

系统 版本
CentOS 8
Ubuntu 16.04, 18.04, 20.04

安装 python 模块(建议使用 python3 环境)

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
pip3 install --user -U -r requirements.txt

如果已经安装了 ansible,但版本低于 2.10 的,请运行 pip3 install --user -U ansible 升级到最新版。目前确认 2.9 或以下版本,不兼容部分语法。

联盟链初始化

复制一份 inventory 配置。假设新环境是 'my_inventory'。

cp -R inventories/sample inventories/my_inventory

编辑 init.yml 配置文件

nano inventories/my_inventory/group_vars/init.yml

例如

# 变量注释
# name:           (必填)机构名称
# create_genesis: 是否生成创世区块,同组(根据 main_group_id 判断)必须有且只有 1 个创世区块机构。(不设置则默认为 false)
# nodes:          (必填)机构各节点连接信息。格式 <ip>:<节点数>。如果只填写 IP,则默认为 1 个节点。同 IP 多节点会自动递增对应端口。
# main_group_id:  (必填)群组编号
# extra_group_id: (可选)额外要加入的目标群组编号

agencies:
 - name: A
   create_genesis: true
   nodes:
     - 172.17.8.101:5
     - 172.17.8.102:5
   main_group_id: 1
   extra_group_id:
     - 2
 - name: B
   nodes:
     - 172.17.8.103:5
     - 172.17.8.104:5
   main_group_id: 1
 - name: C
   create_genesis: true
   nodes:
     - 172.17.8.105:5
     - 172.17.8.106:5
   main_group_id: 2

# true 表示使用国密模式
fisco_gm_enabled: true

请根据文件头部的变量注释,编排好目标配置的信息。更多变量设置请查看 roles/fisco_bcos/defaults/main.yml 文件。

TIPS: 你可以先执行以下命令,生成架构图,来确认配置是否有问题。

ansible-playbook -i inventories/my_inventory/hosts.ini fisco_bcos.yml -t archimate

TIPS: 如果执行时无法显示中文,或 python 报错 UnicodeEncodeError: 'ascii' codec can't encode characters,请执行 export LC_ALL=C.UTF-8 后再试。

TIPS: 由于精力有限,无法覆盖多个 Linux 发行版。如果生成的图片不能正确显示中文,请根据你的 Linux 发行版,查找 Java 显示中文的解决方法。欢迎提交你的解决方案到我们的 issue 列表里。

图片路径在输出结果中,类似于:

TASK [fisco_bcos : 生成图片文件] ***********************************************************************************************
Monday 07 December 2020  22:17:04 +0800 (0:00:00.855)       0:00:05.108 *******
ok: [localhost] => (item=/home/haibin/Workspaces/ansible-for-fisco-bcos/inventories/v2.7.0/deploy/archimate/agency_C_topo.png)
ok: [localhost] => (item=/home/haibin/Workspaces/ansible-for-fisco-bcos/inventories/v2.7.0/deploy/archimate/agency_B_topo.png)
ok: [localhost] => (item=/home/haibin/Workspaces/ansible-for-fisco-bcos/inventories/v2.7.0/deploy/archimate/agency_A_topo.png)
ok: [localhost] => (item=/home/haibin/Workspaces/ansible-for-fisco-bcos/inventories/v2.7.0/deploy/archimate/chain_topo.png)

查看图片,确认没问题后,可以开始生成部署文件。

ansible-playbook -i inventories/my_inventory/hosts.ini fisco_bcos.yml

执行过程中出现的 [WARNING] 信息可以忽略。

如无意外,你会在 inventories/my_inventory/deploy 目录下找到相关的配置内容。例如:

find inventories/my_inventory/deploy/agency_*/fisco* -type d -name "node_*" | sort -n

inventories/my_inventory/deploy/agency_A/fisco_deploy_agency_A/node_172.17.8.101_30300
inventories/my_inventory/deploy/agency_A/fisco_deploy_agency_A/node_172.17.8.102_30300
inventories/my_inventory/deploy/agency_B/fisco_deploy_agency_B/node_172.17.8.103_30300
inventories/my_inventory/deploy/agency_B/fisco_deploy_agency_B/node_172.17.8.104_30300
inventories/my_inventory/deploy/agency_C/fisco_deploy_agency_C/node_172.17.8.105_30300
inventories/my_inventory/deploy/agency_C/fisco_deploy_agency_C/node_172.17.8.106_30300

查看 inventories/my_inventory/deploy/node_list.yml 文件,内容类似于:

# 机构名称:群组编号:节点IP:P2P端口:Channel端口:RPC端口:额外目标群组编号(没有则为 0)

node_list:
  - A:1:172.17.8.101:30300:20200:8545:[2]
  - A:1:172.17.8.102:30300:20200:8545:[2]
  - B:1:172.17.8.103:30300:20200:8545:[0]
  - B:1:172.17.8.104:30300:20200:8545:[0]
  - C:2:172.17.8.105:30300:20200:8545:[0]
  - C:2:172.17.8.106:30300:20200:8545:[0]
  - C:2:172.17.8.107:30300:20200:8545:[0]

确保相关的 IP 和端口能访问即可

把相关文件夹上传到对应的服务器上,执行启动命令即可。

已有机构扩展节点

目前仅支持在 init.yml 配置中,给已有的机构增加节点,不支持 agencies 里增加机构。

假设第一次初始化的配置是

	agencies:
	 - name: A
	   create_genesis: true
	   nodes:
	     - 172.17.8.101
	     - 172.17.8.102
	   main_group_id: 1
	   extra_group_id:
	     - 2
	 - name: B
	   nodes:
	     - 172.17.8.103
	     - 172.17.8.104
	   main_group_id: 1
	 - name: C
	   create_genesis: true
	   nodes:
	     - 172.17.8.105
	     - 172.17.8.106
	   main_group_id: 2

假设要给机构 A 的 172.17.8.101 和 172.17.8.102 服务器,分别增加至 5 个节点,就把 172.17.8.101 改成 172.17.8.101:5172.17.8.102 改成 172.17.8.102:5。也可以增加 IP 和节点,例如 172.17.8.110:5

	agencies:
	 - name: A
	   create_genesis: true
	   nodes:
	     - 172.17.8.101:5
	     - 172.17.8.102:5
	     - 172.17.8.110:5
	   main_group_id: 1
	   extra_group_id:
	     - 2

然后再次执行

ansible-playbook -i inventories/my_inventory/hosts.ini fisco_bcos.yml

执行完成后,在对应的机构目录下,你可以看到类似 fisco_deploy_agency_A_expand_1917645e6744e1360fba72fa4cf8cc47 这样的目录,就是新增的节点配置了。

把相关节点文件夹传送到对应 IP 的服务器上,通过 控制台SDKWeBase 管理平台 进行管理。

如何参与?

我们欢迎大家在遵循 Apache-2.0 的前提下,一起来完善代码。请 fork 本项目,提交你的 pull request。 同时,我们需要定义一些代码规范。

  1. 请复制一份 inventory/sample,重命名在同级目录中。避免 sample 目录文件冲突。
  2. 每个 task 必须有 name,用中文注释。
  3. 尽可能的使用 ansible 模块,不鼓励直接使用 shell 命令。

贡献者

本项目由 FISCO BCOS 自动化工具兴趣小组 成员共同编写。