Hyperledger Fabric 2.0 官方文档中文版 第7章 部署生产网络


总目录

第1章 引言
第2章 Hyperledger Fabric v2.0的新增功能
第3章 关键概念
第4章 入门
第5章 开发应用程序
第6章 教程(上)
第6章 教程(下)
第7章 部署生产网络
第8章 操作指南
第9章 升级到最新版本


7.部署生产网络

本部署指南是对设置生产Fabric网络组件的正确顺序的高级概述,此外还有最佳实践和部署时要记住的许多注意事项。请注意,本主题将从单个个体的角度讨论“建立网络”作为一个整体过程。更有可能的是,现实世界中的生产网络不是由一个人建立的,而是由多个个人指导的协作工作(例如,一个银行集合,每个银行都建立自己的组件)。

部署Fabric网络的过程很复杂,需要了解公钥基础设施和管理分布式系统。如果您是一个智能合约或应用程序开发人员,那么在部署生产级结构网络时,您不需要这种级别的专业知识。但是,您可能需要了解如何部署网络,以便开发有效的智能合约和应用程序。

如果您只需要一个开发环境来测试链码、智能合约和应用程序,请使用Fabric test network进行检查。拥有一个节点组织,每个组织拥有一个单独的排序节点。这个测试网络并不是要为部署生产组件提供蓝图,也不应该这样使用,因为它会做出生产部署不会做出的假设和决策


第一步:决定你的网络配置

区块链网络的结构必须由用例决定。这些基本的业务决策将根据您的用例而有所不同,但是让我们考虑一些场景。

与开发环境或概念验证相比,在生产环境中运行时,安全性、资源管理和高可用性成为一个优先事项。您需要多少个节点来满足高可用性,您希望将它们部署在哪些数据中心以满足灾难恢复和数据驻留的需要?你将如何确保你的私钥和信任的根基是安全的?

除上述内容外,以下是部署组件之前需要做出的决策示例:

  • 证书颁发机构配置。作为总体决策的一部分,您必须对节点(每个通道上有多少个节点,等等)和排序服务(有多少个节点,谁将拥有这些节点)做出决定,您还必须决定如何为您的组织部署CA。生产网络应该使用传输层安全(TLS),这将需要设置TLS CA并使用它来生成TLS证书。此TLS CA需要在注册CA之前部署。我们将在第三步:设置CA中详细讨论。
  • 是否使用组织单位?:一些组织可能会发现有必要建立组织单位,以便在特定身份和由单个CA创建的MSP之间创建隔离。
  • 数据库类型。网络中的某些通道可能需要以状态数据库可以理解的CouchDB方式对所有数据进行建模,而其他网络则会根据速度的优先级决定所有节点都使用LevelDB。注意,通道上不应该有同时使用CouchDB和LevelDB的节点,因为这两种数据库类型对数据的建模略有不同。
  • 通道和私人数据。一些网络可能会认为通道是确保某些交易的隐私和隔离的最佳方式。其他人可能会认为,一个单一的通道,加上私人数据,可以更好地满足他们对隐私的需求。
  • 容器业务流程。不同的用户也可能对其容器编排做出不同的决定,为其节点进程创建单独的容器,为节点进程记录日志、CouchDB、gRPC通信和链码,而其他用户可能决定组合其中一些过程。
  • 链码部署方法。用户现在可以选择使用内置的构建和运行支持、使用外部构建器和启动器定制的构建和运行,或者使用链码作为外部服务来部署链码。
  • 使用防火墙。在生产部署中,属于一个组织的组件可能需要访问其他组织的组件,这就需要使用防火墙和高级网络配置。例如,使用Fabric SDK的应用程序需要访问所有组织的所有背书以及所有通道的排序服务。类似地,节点需要访问从其接收新块的通道上的排序服务。

然而,无论您的组件部署在何处,您都需要在您所选择的管理系统(如Kubernetes)方面具有高度的专业知识,以便有效地操作您的网络。同样,网络结构的设计必须符合业务用例和网络将要运行的行业的任何相关法律法规。

这个部署指南不会贯穿每一次迭代和潜在的网络配置,但会给出共同的指导方针和规则来考虑。


第二步:为你的资源建立一个集群

一般来说,Fabric对用于部署和管理它的方法是不可知的。例如,可以从笔记本电脑部署和管理节点。出于许多原因,这可能是不明智的,但在Fabric中没有任何东西禁止它。

只要您能够部署容器,无论是在本地(或在防火墙后面),还是在云中,都应该可以建立组件并将它们彼此连接起来。然而,Kubernetes拥有许多有用的工具,这些工具使它成为部署和管理Fabric网络的流行容器管理平台。有关Kubernetes的更多信息,请查看Kubernetes文档。本主题主要将其范围限制为二进制文件,并提供在使用Docker部署或Kubernetes时可以应用的说明。

然而,无论您选择在何处部署组件,您都需要确保有足够的资源使组件有效运行。您需要的大小在很大程度上取决于您的用例。如果您计划将一个节点连接到多个高容量通道,则它将需要比用户计划加入单个通道的节点更多的CPU和内存。粗略估计,当您计划分配给单个排序节点时,计划将大约三倍的资源分配给节点(如下所示,建议在排序服务中部署至少三个节点,最好是部署五个节点)。类似地,对于CA,您应该需要大约十分之一的资源来作为节点资源。您还需要将存储添加到您的集群(一些云提供商可能提供存储),因为您无法配置持久卷和持久卷声明,而不首先使用云提供商设置存储。

通过部署概念验证网络并在负载下对其进行测试,您将更好地了解所需的资源。

管理您的基础设施

您用来管理后端的确切方法和工具将取决于您选择的后端。然而,这里有一些值得注意的因素。

  • 使用秘密对象在集群中安全地存储重要的配置文件。有关库伯内特斯秘密的信息,请查看Kubernetes密码。您还可以选择使用强化的安全模块(hsm)或加密的持久卷(pv)。类似地,在部署Fabric组件之后,您可能希望连接到自己后端的容器,例如使用Docker Hub之类的服务中的私有repo。在这种情况下,您需要以Kubernetes密码的形式对登录信息进行编码,并在部署组件时将其包含在YAML文件中。
  • 集群注意事项和节点大小。在上面的第2步中,我们讨论了如何考虑节点大小的概要。您的用例,以及一个健壮的开发周期,是您真正了解节点、排序节点和CA需要多大的唯一途径。
  • 如何选择装载卷。最佳做法是将与节点相关的卷装载到部署节点的位置之外。这将允许您以后引用这些卷(例如,重新启动已崩溃的节点或容器),而无需重新部署或重新生成加密材料。
  • 你将如何监控你的资源。建立一种策略和方法来监视单个节点使用的资源以及通常部署到集群的资源,这一点非常重要。当你加入到更多的通道中时,你可能需要增加它的CPU和内存分配。同样,你需要确保你有足够的存储空间来存放你的状态数据库和区块链。

第三步:设置CA

Fabric网络中必须部署的第一个组件是CA。这是因为在部署节点本身之前,必须先创建与节点关联的证书(不仅是节点本身,还包括标识谁可以管理该节点的证书)。虽然不需要使用结构CA来创建这些证书,但是Fabric CA还创建了正确定义组件和组织所需的MSP结构。如果用户选择使用结构CA以外的CA,则必须自己创建MSP文件夹。

  • 一个CA(或多个,如果您正在使用中间CA,请参阅下面的中间CA)用于生成(通过称为“注册”的过程)组织的管理员、该组织的MSP以及该组织拥有的任何节点的证书。此CA还将为任何其他用户生成证书。由于其在“注册”身份中的作用,此CA有时被称为“注册CA”或“ecert CA”。
  • 另一个CA生成用于在传输层安全性(TLS)上保护通信的证书。因此,此CA通常称为“TLS CA”。这些TLS证书附加到操作中,以防止“中间人”攻击。请注意,TLS CA仅用于为节点颁发证书,并且可以在该活动完成时关闭。用户可以选择使用单向(仅限客户端)TLS和双向(服务器和客户端)TLS,后者也称为“相互TLS”。因为指定您的网络将使用TLS(这是推荐的)应该在部署“enrollment”CA(指定此CA配置的YAML文件有一个用于启用TLS的字段)之前决定,应首先部署TLS CA,并在引导注册CA时使用其根证书。连接到注册CA以注册用户和节点的标识时,fabric-ca client也将使用此TLS证书。

虽然与组织相关联的所有非TLS证书都可以由单个“根”CA(即,作为其自身信任根的CA)创建,但为了增加安全性,组织可以决定使用“中间”CA,其证书由根CA(或最终返回根CA的另一个中间CA)创建。因为根CA中的妥协会导致其整个信任域(管理员、节点和它为其生成证书的任何CA的证书)崩溃,因此中间CA是限制根CA暴露的一种有用方法。是否选择使用中间CA将取决于用例的需要。它们不是强制性的。请注意,还可以配置一个轻量级目录访问协议(LDAP)来管理结构网络上的身份,这些企业已经有了这种实现,并且不想在现有基础设施中添加身份管理层。LDAP有效地预注册了目录的所有成员,并允许他们根据给定的条件进行注册。

**在生产网络中,建议每个组织至少部署一个CA用于注册,另一个用于TLS。**例如,如果部署与一个组织关联的三个节点和与排序组织关联的排序节点,则至少需要四个CA。其中两个CA将用于节点组织(为节点组织、管理员、通信和代表组织的MSP的文件夹结构生成注册和TLS证书),另两个将用于排序方组织。请注意,用户通常只向注册CA注册和注册,而节点将注册并注册到注册CA(在这里节点将获得其签名证书,当它尝试对其操作进行签名时识别它)和TLS CA(在这里它将获得用于验证其通信的TLS证书)。

有关如何设置组织CA和TLS CA并注册其管理员身份的示例,请参阅Fabric CA Deployment Guide。部署指南使用结构CA客户端注册和注册设置CA时所需的标识。


第四步:使用CA创建身份和MSP

创建CA后,可以使用它们为与组织(由MSP表示)相关的标识和组件创建证书。对于每个组织,您至少需要:

  • 注册并注册管理员身份并创建MSP。创建将与组织关联的CA后,可以使用它先注册标识,然后再注册它。在第一步中,身份的用户名和密码由CA的管理员分配。属性和从属关系也可以赋予标识(例如,组织管理员所必需的管理员角色)。注册身份后,可以使用用户名和密码注册。CA将为这个身份生成两个证书-一个是网络中其他成员已知的公共证书(也称为signcert),另一个是用于对身份所采取的操作进行签名的私钥(存储在keystore文件夹中)。CA还将生成一个MSP文件,其中包含颁发证书的CA的公共证书和CA的信任根(这可能是同一个CA,也可能不是同一个CA)。这个MSP可以被认为是定义与管理员身份相关联的组织。有关此进程的示例,请查看此管理员如何注册的示例。如果组织的管理员也是一个节点的管理员(这是典型的),您必须在创建节点的本地MSP之前创建组织管理员标识,因为创建本地MSP时必须使用节点管理员的证书。
  • 注册并登记节点标识。正如注册和登记组织管理员标识一样,节点的标识必须同时向注册CA和TLS CA注册和登记。因此,注册CA和TLS共享一个数据库(这允许节点标识只注册一次并由每个CA服务器分别注册),尽管这是一个可选的配置选项。在向注册CA注册节点时,不要赋予节点管理员用户角色,而是赋予它节点排序者角色。和管理员一样,这个身份的属性和从属关系也可以被分配。节点的MSP结构称为“本地MSP”,因为分配给标识的权限仅与本地(节点)级别相关。此MSP在创建节点标识时创建,并在引导节点时使用。当您将组织加入通道时(必须将此证书添加到注册管理员时创建的org MSP)以及使用节点二进制文件作为CLI客户端调用其他节点(如peer chaincode invoke)或排序节点(如peer channel fetch)时,将使用TLS CA注册时生成的TLS根证书不是orderer CLI。不需要将TLS根证书添加到节点的本地MSP,因为这些证书包含在通道配置中。

有关基于Fabric的区块链网络中身份和权限的更多概念性信息,请参阅身份成员资格服务提供商(MSP)

要了解如何使用CA生成管理员身份和MSP,请查看注册Org1的admin

要了解如何使用注册CA To和TLS CA为节点生成证书,请查看设置Org1的节点


第五步:部署节点

一旦收集了所需的所有证书和MSPs,就可以创建节点了。如上所述,有许多有效的方法来部署节点。

创建节点

在创建节点之前,需要自定义节点的配置文件。在Fabric中,这个文件称为core.yaml。您可以在Hyperledger Fabric的sample config目录中找到一个示例core.yaml配置文件。

正如您在文件中看到的,您可以选择设置许多参数,或者需要设置这些参数才能使节点正常工作。通常,如果不需要更改调整值,请不要更改它。但是,您可能需要调整各种地址,指定要使用的数据库类型,以及指定节点的MSP所在的位置。

您有两个主要选项可用于优化配置。

  • 编辑与二进制文件绑定的YAML文件。
  • 部署时使用环境变量重写。
  • 指定CLI命令上的标志。

选项1的优点是,无论何时关闭或重新启动节点,都可以持久化所做的更改。缺点是,当升级到新的二进制版本时,您必须将定制的选项移植到新的YAML(升级到新版本时,您应该使用最新的YAML)。

不管怎样,以下是core.yaml中的一些值,您必须查看。

  • peer.localMspID:这是节点组织的本地MSP的名称。此MSP将列出节点组织的管理员以及节点组织的根CA和TLS CA证书。
  • peer.mspConfigPath:节点的本地MSP所在的位置。请注意,最好将此卷安装到容器外部。这可以确保即使容器停止(例如,在维护周期中),MSPs也不会丢失,并且必须重新创建。
  • peer.address:表示同一组织中其他节点的端点,这是在组织内建立流言通信时的一个重要考虑因素。
  • peer.tls:当您将enabled值设置为true时(在生产网络中应该这样做),您必须指定相关TLS证书的位置。请注意,网络中的所有节点(普通节点和排序节点)都必须启用或未启用TLS。对于生产网络,强烈建议启用TLS。与您的MSP一样,最好将此卷安装到容器外部。
  • ledger:用户有许多关于他们的账本的决定,包括状态数据库类型(例如LevelDB或CouchDB)及其位置(在fileSystemPath中指定)。注意,对于CouchDB,最好在节点外部操作状态数据库(例如,在单独的容器中),因为这样可以更好地为数据库分配特定的资源。出于延迟和安全原因,最好将CouchDB容器与节点服务器放在同一个服务器上。对CouchDB容器的访问应该仅限于节点容器。
  • gossip:在设置gossip数据分发协议时,需要考虑许多配置选项,包括externalEndpoint(它使其他组织拥有的节点可以发现节点)以及bootstrap地址(用于标识节点自身组织中的节点)。
  • chaincode.externalBuilders:将链码用作外部服务时,必须设置此字段。

当您对节点的配置方式、卷的装载方式和后端配置感到满意时,可以运行命令来启动节点(此命令将取决于您的后端配置)。

创建排序节点

与创建普通节点不同,您需要创建创世区块(或引用已经创建的块,如果向现有排序服务添加排序节点),并在启动排序节点之前指定指向该块的路径。

在Fabric中,用于排序节点的配置文件称为orderer.yaml。您可以在Hyperledger Fabric的sample config目录中找到一个示例orderer.yaml配置文件。注意orderer.yaml不同于排序服务的“创世区块”。此块(包括orderer系统通道的初始配置)必须在创建ordering节点之前创建,因为它用于引导节点。

与节点一样,您将看到有相当多的参数可以选择设置,或者需要设置以使节点正常工作。通常,如果不需要更改调整值,请不要更改它。

您有两个主要选项可用于优化配置。

  • 编辑与二进制文件绑定的YAML文件。
  • 部署时使用环境变量重写。
  • 指定CLI命令上的标志。

选项1的优点是,无论何时关闭或重新启动节点,都可以持久化所做的更改。缺点是,当升级到新的二进制版本时,您必须将定制的选项移植到新的YAML(升级到新版本时,您应该使用最新的YAML)。

不管怎样,以下是orderer.yaml中的一些值,您必须查看。您会注意到,其中一些字段与core.yaml中的字段相同,只是名称不同。

  • General.LocalMSPID:这是由您的CA生成的排序节点组织的本地MSP的名称。
  • General.LocalMSPDir:排序节点的本地MSP所在的位置。请注意,最好将此卷安装到容器外部。
  • General.ListenAddress以及General.ListenPort:表示指向同一组织中其他排序节点的终结点。
  • FileLedger:尽管排序节点没有状态数据库,但它们仍然携带区块链的副本,因为这允许它们使用最新的配置块验证权限。因此,应使用正确的文件路径自定义账本字段。
  • Cluster:这些值对于排序与其他排序节点通信的服务节点非常重要,例如在基于Raft的排序服务中。
  • General.BootstrapFile:这是用于引导排序节点的配置块的名称。如果该节点是排序服务中生成的第一个节点,则必须生成该文件,该文件称为“创世区块”。
  • General.BootstrapMethod:给出引导块的方法。目前,这只能是文件,其中指定了BootstrapFile中的文件。从2.0开始,可以指定none来简单地启动order而不进行引导。
  • Consensus:确定共识插件(支持和推荐Raft排序服务)允许的预写日志(WALDir)和快照(SnapDir)的键/值对。

当您对排序节点的配置方式、卷的装载方式和后端配置感到满意时,可以运行命令来启动排序节点(此命令将取决于您的后端配置)。

下一步

区块链网络都是关于连接的,所以一旦你部署了节点,你显然会想把它们连接到其他节点!如果您有一个节点组织和一个节点,那么您将希望将您的组织加入到一个联盟中或加入通道。如果您有一个排序节点,您将希望将排序组织添加到您的联盟中。您还需要学习如何开发链码,可以在场景和chaincode4noah主题中学习。

连接节点和创建通道的过程的一部分将涉及修改策略以适应业务网络的用例。有关策略的详细信息,请查看策略

Fabric中的常见任务之一是编辑现有通道。有关该过程的教程,请查看更新通道配置。一个流行的通道更新是在现有通道中添加一个组织。有关这个特定过程的教程,请查看向通道添加组织。有关部署节点后升级节点的信息,请查看升级组件

部署生产CA

参考自官方文档
如有侵权,请联系作者删除,谢谢!
If there is infringement, please contact the author to delete, thank you!

猜你喜欢

转载自blog.csdn.net/bean_business/article/details/108662820