美文网首页
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