• 基本架构和特性
  • 环境准备
  • 下载 Cello 源码
  • 配置 Worker 节点
    • 安装和配置 Docker 服务
    • 下载 Docker 镜像
    • 防火墙配置
  • 配置 Master 节点
    • 下载 Docker 镜像
    • 安装 Cello 服务
    • 管理 Cello 服务
  • 使用 Cello 管理区块链
    • Hosts 页面
    • Active Chains 页面
  • 基于 Cello 进行功能扩展

    ## 使用超级账本 Cello 搭建区块链服务

    从前面的讲解中可以看到,区块链服务平台能够有效加速对区块链技术的应用,解决企业和开发者进行手动运营管理的负担。但是这些方案都是商业用途,并且只能在线使用。

    Cello 典型应用场景

    超级账本的 Cello 项目为本地搭建区块链服务管理平台提供了开源的解决方案,可以实现在多种类型的物理资源上实现区块链网络的生命周期管理。

    正如 Cello 的名字所蕴意,它就像一把精巧的大提琴,以区块链为琴弦,可以奏出更加动人的乐章。

    基本架构和特性

    Cello 项目由笔者领导的 IBM 技术团队于 2017 年 1 月贡献到超级账本社区,主要基于 Python 和 Javascript 语言编写。该项目的定位为区块链管理平台,支持部署、运行时管理和数据分析等功能,可以实现一套完整的 BaaS 系统的快速搭建。其基本架构如下图所示。

    Cello 基本架构

    在实现区块链环境快速部署的同时,Cello 也提供了不少对区块链平台进行运行时管理的特性,这些特性总结如下。

    • 管理区块链的全生命周期,包括创建、配置、使用、健康检查、删除等。
    • 支持多种基础架构作为底层资源池,包括裸机、虚拟机、容器云(Docker、Swarm、Kubernetes)等。
    • 支持多种区块链平台及自定义配置(目前以支持超级账本 Fabric 为主)。
    • 支持监控和分析功能,实现对区块链网络和智能合约的运行状况分析。
    • 提供可插拔的框架设计,包括区块链平台、资源调度、监控、驱动代理等都很容易引入第三方实现。

    下面具体介绍如何以 Docker 主机为资源池,用 Cello 快速搭建一个区块链服务平台。

    环境准备

    Cello 采用了典型的主从(Master-Worker)架构。用户可以自行准备一个 Master 物理节点和若干个 Worker 节点。

    其中,Master 节点负责管理(例如,创建和删除)Worker 节点中的区块链集群,其通过 8080 端口对外提供网页 Dashboard,通过 80 端口对外提供 RESTful API。Worker 节点负责提供区块链集群的物理资源,例如基于 Docker 主机或 Swarm 的方式启动多个集群,作为提供给用户可选的多个区块链网络环境。

    下图中展示了一个典型的 Master-Worker 部署拓扑。每个节点默认为 Linux(如 Ubuntu 16.04)服务器或虚拟机。

    Cello 部署拓扑示例

    为了支持区块链网络,Worker 和 Master 节点需要配备足够的物理资源。例如,如果希望在一个 Worker 节点上能够启动至少 10 个区块链集群,则建议节点配置至少为 8 CPU、16G 内存、100G 硬盘容量。

    下载 Cello 源码

    Cello 代码的官方仓库在社区的 gerrit 上,并实时同步到 Github 仓库中,读者可以从任一仓库中获取代码。例如通过如下命令从官方仓库下载 Cello 源码。

    1. $ git clone http://gerrit.hyperledger.org/r/cello && cd cello

    配置 Worker 节点

    安装和配置 Docker 服务

    首先安装 Docker,推荐使用 1.12 或者更新的版本。可通过如下命令快速安装 Docker。

    1. $ curl -fsSL https://get.docker.com/ | sh

    安装成功后,修改 Docker 服务配置。对于 Ubuntu 16.04,更新 /lib/systemd/system/docker.service 文件如下。

    1. [Service]
    2. DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --api-cors-header='*' --default-ulimit=nofile=8192:16384 --default-ulimit=nproc=8192:16384"
    3. EnvironmentFile=-/etc/default/docker
    4. ExecStart=
    5. ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

    修改后,需要通过如下命令重启 Docker 服务。

    1. $ sudo systemctl daemon-reload
    2. $ sudo systemctl restart docker.service

    下载 Docker 镜像

    对于超级账本 Fabric v1.0 集群所需的镜像,可以使用如下命令进行自动下载。

    1. $ cd scripts/worker_node_setup && bash download_images.sh

    防火墙配置

    为了确保 Worker 上的容器可以正常访问,通过如下命令确保主机开启 IP 转发。

    1. $ sysctl -w net.ipv4.ip_forward=1

    同时检查主机的 iptables 设置,确保必要的端口被打开(如 2375、7050~10000 等)。

    配置 Master 节点

    下载 Docker 镜像

    使用如下命令下载运行服务所必要的 Docker 镜像。

    其中,python:3.5 镜像是运行 Cello 核心组件的基础镜像;mongo:3.2 提供了数据库服务;yeasy/nginx:latest 提供了 Nginx 转发功能;mongo-express:0.30 镜像是为了调试数据库,可以选择性安装。

    1. $ docker pull python:3.5 \
    2. && docker pull mongo:3.2 \
    3. && docker pull yeasy/nginx:latest \
    4. && docker pull mongo-express:0.30

    安装 Cello 服务

    首次运行时,可以通过如下命令对 Master 节点进行快速配置,包括安装 Docker 环境、创建本地数据库目录、安装依赖软件包等。

    1. $ make setup

    如果安装过程没有提示出现问题,则说明当前环境满足了运行条件。如果出现问题,可通过查看日志信息进行定位。

    管理 Cello 服务

    可以通过运行如下命令来快速启动 Cello 相关的组件服务(包括 dashboard、restserver、watchdog、mongo、nginx 等)。

    1. $ make start

    类似地,运行 make stopmake restart 可以停止或重启全部服务。

    若希望重新部署某个特定服务(如 dashboard),可运行如下命令。

    1. $ make redeploy service=dashboard

    运行如下命令可以实时查看所有服务的日志信息。

    1. $ make logs

    若希望查看某个特定服务的日志,可运行如下命令进行过滤,如只查看 watchdog 组件的日志。

    1. $ make log service=watchdog

    使用 Cello 管理区块链

    Cello 服务启动后,管理员可以通过 Cello 的 Dashboard 页面管理区块链。

    默认情况下,可通过 Master 节点的 8080 端口访问 Dashboard。默认的登录用户名和密码为 admin:pass

    Cello Dashboard

    如图,Dashboard 有多个页面,各页面的功能如下。

    页面 功能
    Overview 展示系统整体状态
    System Status 展示一些统计信息
    Hosts 管理所有主机(Worker 节点)
    Active Chains 管理资源池中的所有链
    Inused Chains 管理正在被用户占用的链
    Released History 查看链的释放历史

    Hosts 页面

    在 Hosts 页面,管理员可以管理所有资源池中已存在的主机,或添加新主机。表格中会显示主机的类型、状态、正在运行的区块链数量、区块链数量上限等。所有设定为 non-schedulable (不会自动分配给用户)的主机会用灰色背景标识,如下图所示。

    Hosts 页面

    点击一个主机的 Action 下拉菜单,有如下选项可供操作该主机。

    • Fillup:将主机运行的区块链数添加至上限。
    • Clean:清理主机中所有未被用户占用的链。
    • Config:更改主机配置,如名称和链数量上限。
    • Reset:重置该主机,只有当该主机没有用户占用的链时可以使用。
    • Delete:从资源池中删除该主机。

    点击 Hosts 页面的 Add Host 按钮,可以向资源池中添加主机。需要设定该主机的名称、Daemon URL 地址(例如,Worker 节点的 docker daemon 监听地址和端口)、链数量上限、日志配置、是否启动区块链至数量上限、是否可向用户自动分配,如下图所示。

    添加主机

    Active Chains 页面

    Active Chains 页面会显示所有正在运行的链,包括链的名称、类型、状态、健康状况、规模、所属主机等信息。正在被用户占用的链会用灰色背景标识,如下图所示。

    Active Chains 页面

    点击一条链的 Actions 下拉菜单,有如下选项可供操作该链。

    • Start:如果这条链处于停止状态,则启动。
    • Stop:停止运行中的链。
    • Restart:重新启动这条链。
    • Delete:删除这条链。
    • Release:将占用的链释放,随后会被删除。

    点击 Active Chains 页面的 Add Chain 按钮,可以向资源池中添加更多链(如果还有未被占满的主机),如下图所示。

    添加链

    基于 Cello 进行功能扩展

    Cello 已经提供了完整的区块链管理功能,并提供了图形界面和 API。

    用户可以通过向 Cello 的 Master 节点(默认为 80 端口)发送 RESTful API 来申请、释放区块链,或查看区块链相关信息,如其对外开放的接口,可供用户进行远程交互。RESTful API 的说明可在 Cello 的文档中查阅。

    对于区块链服务提供者,可以利用这些 API 为用户呈现友好的区块链申请和操作界面,在 Cello 的基础之上构建和实现更多功能。