如何升级版本
Fabric 保持了较好的向后兼容性,从 v1.0.0 版本开始支持手动升级到更高版本。
网络升级主要包括对如下资源进行升级:
- 核心组件:包括 Peer、Orderer、CA 等核心程序;
- 能力配置:更新通道配置中支持的能力集合版本号,以启动新的特性;
- 第三方资源:包括依赖的 CouchDB、Kafka 等第三方组件。
能力类型
为了避免网络多个节点运行不同版本组件时出现分叉风险,自 1.1.0 版本起在通道配置中引入了能力(Capabilities),标记节点应当支持和启用的特性。如果某节点程序版本低于能力要求则无法加入或自动退出;同时通道内高版本的节点程序在提交校验时只启用指定的特性集合检查(可参考 core/handlers/validation/builtin)。
目前能力分为三种类型,分别管理不同范围,如下表所示。
类型 | 功能 | 配置路径 |
---|---|---|
通道(Channel)能力 | 通道整体相关能力,排序和 Peer 节点都得满足 | /Channel/Capabilities |
排序(Orderer)能力 | 排序服务能力,只与排序节点有关 | /Channel/Orderer/Capabilities |
应用(Application)能力 | 应用相关能力,只与 Peer 节点有关 | /Channel/Application/Capabilities |
如果要启用相应的能力,需要修改通道配置内对应配置。例如,用户可以指定通道能力为 v1.1.0,排序能力为 v1.1.0 模式下,而应用能力为 v1.3.0。此时,只有不低于 v1.1.0 版本(满足通道和排序能力的较大者)的排序节点,以及不低于 v1.3.0 版本(满足通道和应用能力的较大者)的 Peer 节点可以支持该通道。同时,即使排序节点和 Peer 节点程序版本更新(如 v2.x),仍然只会启用指定的能力集合。
需要注意能力配置只能调整到更新版本而不应回退,例如可以将能力模式 v1.3.0 更新为更高版本的 v1.4.0,反之无意义。这是因为旧版本的节点即便加入到通道内,仍然无法正常处理其中新版本启用阶段的交易。
其中,各能力集合的版本和内容(可参考 common/capabilities)如下表所示,注意并不与程序版本一致。
能力版本 | 起始程序版本 | 类型 | 能力内容 |
---|---|---|---|
ChannelV1_1 | v1.1.0 | 通道 | 仅供标记,程序版本为 1.1.0+ |
ChannelV1_3 | v1.3.0 | 通道 | 支持 idemix |
OrdererV1_1 | v1.1.0 | 排序 | 重新提交和身份超时检查 |
OrdererV2_0 | v2.0.0 | 排序 | 排序服务支持从 Kafka 切换到 Raft |
ApplicationV1_1 | v1.1.0 | 应用 | 禁止区块内重复交易Id |
ApplicationV1_2 | v1.2.0 | 应用 | 正式支持私有数据,支持升级私有数据成员组配置,细粒度的通道资源访问控制(ACL) |
ApplicationV1_3 | v1.3.0 | 应用 | 支持基于键值的背书 |
ApplicationV2_0 | v2.0.0 | 应用 | 新的链码生命周期管理 |
ApplicationV2_0 | v2.0.0 | 应用 | 支持 FabToken |
ApplicationV2_0 | v2.0.0 | 应用 | 支持链码操作 |
推荐升级步骤
升级排序服务
对于不改变排序模式的情况下,升级较为简单。
逐个停止排序节点,并备份本地数据,包括身份文件、账本数据、配置文件等。
升级排序服务程序。重新启动并检查是否工作正常,如获取区块、发送交易等。
如果需要改变排序模式(Kafka 变为 Raft)的情况,TBD。
升级 Peer 节点
逐个停止 Peer 节点,并备份本地数据,包括身份文件、账本数据、链码包、配置文件等。
升级 Peer 程序。重新启动并检查是否工作正常,如查询信息、发送交易提案等。
链码包如果之前有引入旧的第三方库或者 Shim 包,或者需要启用新的 API,则还要执行链码升级操作。
升级 CA 服务
停止 Fabric-CA 服务,备份数据库。
升级 fabric-ca 程序,重新启动并检查是否工作正常,如获取根证书。
$ fabric-ca-client getcacert -u https://<fabric-ca-server>:7054 --tls.certfiles tls-cert.pem
升级通道配置
按照新的格式发送通道更新请求,特别是修改对应能力域值为新的版本。
首先升级系统通道,更新通道和排序能力值,之后升级应用通道,更新应用相关能力
更新后测试网络功能,如获取新的区块正常。
升级第三方组件
包括 CouchDB、Kafka 等第三方组件,升级之前最好备份数据文件。
CouchDB 版本自 1.x 版本可以很容易升级到高版本,具体操作可以参考项目文档:http://docs.couchdb.org/en/stable/install/upgrading.html。
如果仍然使用 Kafka 模式的排序服务,则还可以升级 Kafka。
Kafka 自 0.10.0.x 版本开始保持了较好的兼容性,可以较为容易升级到更高版本。之前版本也可执行滚动升级,可参考项目文档:http://docs.couchdb.org/en/stable/install/upgrading.html。
Kafka 版本更新后需要更新 orderer.yaml 中的 Kafka.Version 域并重启 Orderer。