美文网首页
fabric kafka-based instance的迁移

fabric kafka-based instance的迁移

作者: CodingCode | 来源:发表于2020-06-03 02:29 被阅读0次

fabric kafka-based instance的迁移

  1. 说在前面

所谓迁移是指把一个instance迁移到另一个instance上面,两个instance共享一些信息,又有一些信息不同;这不同于recover操作,recover指的是同一个instance坏掉之后恢复正常,recover操作的两个相关instance实际上是同一个instance。

所以这里的迁移着重强调的是两个instance之间fabric ledger数据的迁移,至于instance的配置访问会有不同。

  1. 限制条件
  • 迁移前后的两个instance的mspid是相同的。

  • 迁移前后的两个instance的admin用户是相同的。

  • 迁移前后的两个instance的ca server共用同一套根证书。

  • 迁移前后的两个instance的节点访问地址是不一样的,毕竟是两个instance,否则就叫recover了。

  1. 迁移步骤

3.1 迁移kafka

  • 从源instance导出kafka数据
  • 向目标instance导入kfakfa数据

3.2 迁移ca

  • 从源instance导出ca根证书
  • 向目标instance导入ca根证书,并且启动ca server

3.3 迁移orderer

  • 从目标instance的ca server为order签出msp证书。
  • 从源instance导出系统genesis block,部署到目标instance的orderer node
  • 修改orderer代码,从环境(配置)读取kakfa地址
    orderer正常是从channel的config block里面读取kakfa地址的,在这个场景下channel的config block里面记录的kafka地址是源instance的kafka地址,所以orderer会去访问源instance的kafka,这显然是不符合目标的;在当前版本的fabric中并不支持从外面环境/配置读取kafka地址,所以这里必须非标准的修改orderer的代码使得能够从环境/配置中读取覆盖源config block中的kafka地址。
  • 启动orderer,自动从kakfa同步所有channel数据
  • 对所有的channel,修改配置块信息
    • 修改orderer地址:
      .channel_group.values.OrdererAddresses.value.addresses
    • 修改kafka地址:
      .channel_group.groups.Orderer.values.KafkaBrokers.value.brokers
    • 修改anchor地址(如果是testchainid channel):
      .channel_group.groups.Application.groups.<mspid>.values.AnchorPeers.value.anchor_peers

3.4 迁移peer

  • 从目标instance的ca server为peer签出msp证书。
  • 修改peer的代码,从环境(配置)读取orderer地址
    和修改orderer代码一样,peer正常是从channel的config block里面读取orderer地址的,在这个场景下channel的config block里面记录的orderer地址是源instance的orderer地址,所以peer会去访问源instance的orderer,这显然是不符合目标的;在当前版本的fabric中并不支持从外面环境/配置读取orderer地址,所以这里必须非标准的修改peer的代码使得能够从环境/配置中读取覆盖源config block中的orderer地址。
  • 启动peer
  • 安装chaincode
    把源instance的peer下面的chaincode文件复制到目标instance对于的peer下面。
  • 加入channel
    加入后,peer开始从orderer同步channel数据
  1. 附录

修改orderer代码从环境/配置读取kafka地址,粗暴的做法是把下面函数改掉:

$ cat common/channelconfig/orderer.go
...
func (oc *OrdererConfig) KafkaBrokers() []string {
    return oc.protos.KafkaBrokers.Brokers
}
...

修改peer代码从环境/配置读取orderer地址,粗暴的做法是把下面函数改掉:

$ cat common/channelconfig/channel.go
...
// OrdererAddresses returns the list of valid orderer addresses to connect to to invoke Broadcast/Deliver
func (cc *ChannelConfig) OrdererAddresses() []string {
    return cc.protos.OrdererAddresses.Addresses
}
...

相关文章

网友评论

      本文标题:fabric kafka-based instance的迁移

      本文链接:https://www.haomeiwen.com/subject/nlwmzhtx.html