翻译:https://hyperledger-fabric.readthedocs.io/en/latest/deployment_guide_overview.html
本部署指南以较高的层次介绍了构建Fabric网络的正确顺序,还有最佳实践和一些注意事项。注意本话题以单独个体的角度讨论“建立网络”。更有可能的是,在真实世界中生产网络是由多个个体合作搭建(如多个银行)。
部署Fabric网络是复杂的,需要理解公钥系统和管理分布式系统。如果你是一个智能合约开发者或者一个app开发者,不必知道部署生产级网络的知识。但是你可以了解网络是怎样部署的,以便开发出更好的智能合约和app。
如果你的需求只是用来测试链码和app,查阅Using the Fabric test network即可。这里包含了两个组织,每个有一个peer,和一个排序服务组织(在一个单独的order节点上)。test-network并不是一个生产网络的部署蓝图,因为它包含了生产环境不会做的假设。
下面列出部署生产网络的步骤:
区块链网络的结构必须由用例决定。基础的逻辑由你的业务决定,但这里我们准备了一些方案。
与开发环境或者概念证明不同,在生产环境中安全性,资源管理,高可用性都是需要优先考虑的。需要多少节点才能保证可用性,在哪些数据中心中部署才能满足容灾和存储。怎样保证私钥和信任的根持续安全。
除此之外,这里还有一些问题需要在部署之前考虑:
无论组件部署在哪里,你都需要在管理系统(如Kubernetes)有很高的知识,以便于管理网络。类似的,网络结构必须设计的符合你的场景,符合法律和政府规定。
本文不会给出所有的网络配置,但会给出一些通用的指导和规则。
一般来说,Fabric与部署和使用方式无关。举例来说,甚至可以在笔记本上部署和管理。因很多原因,不建议这样做,但Fabric并没有限制。
一旦你有能力部署容器,无论是本地还是云端,都是可以建立组件并把他们连接起来。Kubernetes有很多有用的工具,这都使它成为有管理和部署Fabric的流行工具。更多Kubernetes细节,查看the Kubernetes documentation。本文将话题限制在可执行文件以及使用Docker部署或使用Kubernetes时可使用的命令。
无论何时何地,部署组件时,首先需要确保有足够的资源来运行组件。大小取决与业务场景。如果需要将一个peer加入到几个数据很多的channel中,它会需要更多的CPU和内存。粗略估算,peer节点比order节点计划将多三倍的资源(建议至少3个,最佳5个order节点)。CA大概需要peer十分之一的资源来。需要在集群上安装存储,否则将不能配置持久卷和持久卷声明。
通过部署概念测试网络并在负载下对其进行测试,您将更好地了解所需的资源。
管理基础架构
后端的选择决定了对后端管理工具的选择。然而,也有一些值得注意的事项。
Fabric网络中第一个安装的组件是CA。因为节点的证书(不仅是节点自身还有节点的管理员)要创建在节点部署之前。并不一定用Fabric CA来创建这些证书,Fabric CA也可以创建正确定义组件和组织的MSP结构。如果用户自己选择创建CA而不是用Fabric CA,那么还需要自己创建MSP文件夹。
而由与组织相关的所有非TLS证书都能被根CA创建(也就是说,CA是它自己的信任根),安全的增加组织可以使用中间CA.因为一个根CA的妥协可能会导致整个信任域的崩塌,中间CA是防止根CA暴漏的有效办法。是否选择中间CA取决于你的用例。这不是强制的。还可以配置使用了LDAP来管理那些已经实现了此功能且不想在现有基础结构中添加身份管理层的企业。LDAP有效的提前注册了目录的所有成员且根据统一的标准来管理登陆。
在生产网络中,建议组织至少部署一个CA用于登陆注册,另一个用于TLS.例如,如果部署了三个peer属于一个组织,一个排序节点属于排序组织,那你至少需要四个CA。每个peer有至少两个CA(登陆和TLS,admin,通信,代表组织的目录)还有两个是为排序节点。注意用于一般只用注册登陆CA来登陆,而节点会注册登陆都使用登陆CA(节点会得到签名证书并且为它的动作签名)使用TLS CA通信。
查看怎样安装组织CA和TLS CA和登陆admin的例子,查看 Fabric CA Deployment Guide。部署指导使用Fabric CA客户端来注册登陆CA认证。
一旦你创建了CA,你可以创建组织中的证书和组件。对每一个组织,你至少需要:
更多概念信息,关于身份和权限的查看Identity 和 Membership Service Provider (MSP).
查看怎样使用CA来生成管理员身份和MSP,查看 Enroll Org1’s Admin.
查看怎样使用 enrollment CA 和TLS CA 来为节点生成证书,查看Setup Org1’s Peers.
一旦你收集了所需的所有的证书和MSP,你也可以准备创建节点。综上所述,有很多有效的方法来部署节点。
创建peer
在创建peer之前,你需要设置peer的配置文件。在Fabric中,这个文件叫core.yaml,这里有一个示例 in the sampleconfig directory of Hyperledger Fabric.
在文件中可以看到,有很多参数你要么可以设置,要么需要设置才能是节点正常工作。普遍来讲,如果不需要调整值,就不要管。然而,你可能需要调整下地址,数据库的类型,MSP文件夹地址。
有三个主要选项可用于调整。
1.编辑与二级制文件绑定的YAML。
2.部署时使用环境变量重写。
3.指定CLI命令的flag
方式1的优点是节点启动与关闭改变的配置都会存在。缺点是当执行文件版本升级时需要更新新的YAML文件(新版本要用新的YAML文件)。
不管怎样,core.yaml中以下的值你必须看一下。
externalEndpoint
(使peer可以被其它组织的peer发现)也包括bootstrap
地址(标明peer在组织内)当你熟悉了怎样配置peer,怎样挂载磁盘,后台设置,你就可以运行peer了(这个命令取决于你的后台设置)。
创建order节点
和创建peer不同,你需要先创建一个创始区块(或者指定一个已经存在的区块,在将一个order节点增加到已经存在order服务的时候)并且在启动order节点之前指明它的目录。
在Fabric,这个配置文件叫做orderer.yaml.在 in the sampleconfig directory of Hyperledger Fabric中有个示例。注意orderer.yaml不同于组织的创始区块。创始区块包含了初始化的配置和orderer系统的通道,必须在创建排序节点之前创建因为它用来引导节点。
和peer一样,有很多参数需要设置。普遍来说,如果你不需要调整值,就不要管它。
有三种方式调整配置
1.编辑和可执行文件绑定的YAML文件。
2.当部署时通过环境变量改变。
3.CLI命令中指定参数
方式1可以保证改变的配置一直存在无论是否启动或关闭了节点。缺点是当升级二级制执行文件时,需要使用新的YAML文件。
不管怎么样,orderer.yaml中的一些设置项必须要看。它们中一些和core.yaml中的参数很像只是名字不同。
General.ListenAddress
和 General.ListenPort:代表了终端地址
当你熟悉了order节点怎么配置,怎样挂在磁盘,设置后台,就可以运行命令来启动order(启动命令是由backend配置决定的)
区块链网络都是关于链接的,所以一旦部署节点,显然需要将各个节点链接起来。如果你有组织和peer,你希望加入到某个联盟里面且加入到某个通道里面。如果你有一个排序节点,你希望peer加入到你的联盟中,你也需要学习怎样开发链码,查看 The scenario。
链接节点和创建通道的过程的一部分涉及修改策略以适应业务网络的用例。策略的更多信息,查看 Policies
Fabric的一个常见任务是编辑已存在的通道。这部分目录是 Updating a channel configuration。常见的通道升级是新增一个组织到通道,查看Adding an Org to a Channel。部署节点的更多信息 Upgrading your components