Hyperledger Fabric 基于Kafka的多机部署

官方fabric的更新速度还是相对较快的,v1.0跟v1.1还是有一些差异的,由于当前要上生产的时候发现v1.1“更好”一点,所以升级到了v1.1,所以做了相应的改动。

本工程v2版本更新内容如下:

1、增加了couchdb、ca节点;
2、增加数据持久化配置;
3、升级适配fabric1.1
需要先升级fabric环境,重新拉取fabric,拉取相应的docker镜像

一、环境准备

本文实战的前置条件:

    1.安装部署了 fabric ;
    2.成功运行fabric  e2e_cli单机模式;(直接运行example脚本即可)
    3.单机部署,可参考文章:https://www.jianshu.com/p/4ae6d070ddbb

单机部署比较简单,基本就是docker、go安装和镜像拉取、案例拉取,运行脚本即可。

这里简单再讲下安装环境:

1、安装docker、docker-compose、go、gcc、git,这个可参考以上链接
2、创建一个目录:/opt/gopath/src/github.com/hyperledger ,拉取最新的fabric: git clone https://github.com/hyperledger/fabric.git
3、进入fabric,运行scripts/bootstrap.sh 拉取镜像
4、拉取完成后,make release
5、进入examples/e2e_cli  运行./network_setup.sh up 最终看到all good 即可,记得下次运行前,先./network_setup.sh down 
6、大功告成

升级:

尝试过只拉取镜像,fabric不拉取最新的,结果发现有些配置会不一样导致程序报错,所以建议重新拉取一下fabric 然后再拉去下镜像

操作系统:centos7.0;

二、目标

       本案例旨在部署包含3个orderer节点、4个peer节点(两个组织)的farbic基础网络架构;
       排序服务使用多进程的kafka共识:其中包括4个kafka节点和3个zookeeper节点;
       peer节点状态数据库用的是couchdb,所以包括了4个couchdb节点;
       使用ca服务器,每个组织一个ca服务器,所以包括了2个ca节点;
       基础网络稳定后,就不可以全心投入智能合约研发和顶层业务定制,后者才是重点。

部署情况:

10.0.200.111机器:
    |-orderer1.lychee.com
    |-ca0.org1.lychee.com

10.0.200.113机器:
    |-orderer2.lychee.com
    |-peer0.org1.lychee.com
    |-z1   (zookeeper)
    |-k1   (kafka)
    |-couchdb0.org1.lychee.com

10.0.200.114机器:
    |-orderer3.lychee.com
    |-peer1.org1.lychee.com
    |-z2
    |-k2
    |-couchdb1.org1.lychee.com

10.0.200.115机器:
    |-peer0.org2.lychee.com
    |-z3
    |-k3
    |-couchdb0.org2.lychee.com

10.0.200.116机器:
    |-peer1.org2.lychee.com
    |-k4
    |-ca0.org2.lychee.com
    |-couchdb1.org2.lychee.com

三、文件说明

       先睹为快,将工程clone到本地

  git clone https://github.com/skylinelxw/chain-project.git
文件截图.jpg

       部署最终要的是要理解,不然每次遇到问题就会没有头绪。
       文件主要分三类:证书相关、docker容器相关和帮助类脚本;

1、证书相关文件

       区块链中一个比较重要的特性就是安全、防篡改,所以证书就必不可少;比较常见的证书创建工具是openssl,fabric有自己的一个证书生成工具:cryptogen;每个通道的创世区块是需要预先生成的,fabric提供的工具是configtxgen;
       cryptogen 可以指定配置文件:crypto-config-3o4p.yaml,这个文件定义了有多少个orderer和组织,每个组织有多少个peer;
       configtxgen 默认使用:configtx.yaml,这个文件描述了通道有多少个组织加入,以及排序服务属性、区块大小等等;
       我们把这个配置放在了CentOs-111服务器上了,所以要去centos-111/e2e_cli文件夹中查看

2、docker容器相关文件

       docker启动可以使用docker-compose,指定配置文件;配置文件中则包含了容器名称、环境变量、端口映射、文件夹映射、容器启动后的立即运行的命令等等;可参考:https://www.jianshu.com/p/00c5939a64af 查看每个字段的含义;要注意文件映射和cli服务的环境变量!
       docker配置文件又可层层包含,将可共用的部分单独制定一个文件,名称可自定义,但要注意别写错,比如base中的文件;

文件包括:
    docker-compose-orderer.yaml  orderer容器配置文件
        |-base/docker-compose-base.yaml
            |-base/orderer-base.yaml
            |-base/peer-base.yaml

    docker-compose-peer.yaml  peer容器配置文件
        |-base/docker-compose-base.yaml
            |-base/orderer-base.yaml
            |-base/peer-base.yaml

    docker-zk.yaml   zookeeper容器配置文件
        |-base/kafka-base.yaml

    docker-kafka.yaml kafka容器配置文件
        |-base/kafka-base.yaml

    docker-compose-ca.yaml ca配置文件
        主要配置了ca的根证书(记得修改为实际的,否则ca会挂),ca服务器的管理员账户和密码也就是所谓的admin/adminpw,生产的时候改成自己知道的就好

    base/docker-compose-base.yaml  基础配置文件
    base/orderer-base.yaml  基础配置文件
    base/peer-base.yaml  基础配置文件
3、帮助脚本类文件

       此类文件就是IBM写的一些帮助脚本,脚本中包含了证书生成命令、创世区块生成命令、通道创建命令、peer加入通道命令、链码安装、实例化、调用等等脚本;这些命令都是可以单独拆分运行的,所以非常建议细读这些脚本命令!!

    download-dockerimages.sh 这个脚本是拉取docker fabric相关镜像的用的,只是在最初部署的时候会用,这里没有用到;
    generateArtifacts-3o4p.sh 这脚本是创建证书和通道创始区块用的,可携带一个通道名称参数:
    ./generateArtifacts-3o4p.sh yourchannel 其中yourchannel是通道名称;
        |- cryptogen  generate --config=./crypto-config-3o4p.yaml 创建证书命令
        |- configtxgen -profile TwoOrgsOrdererGenesis2 -outputBlock ./channel-artifacts/genesis.block 创建创世区块
        |- configtxgen -profile TwoOrgsChannel2 -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID yourchannel 创建创世区块
        |- configtxgen -profile TwoOrgsChannel2 -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP 创建创世区块
        |- configtxgen -profile TwoOrgsChannel2 -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP 创建创世区块
    
    脚本运行后会生成根证书、msp证书、orderer证书、peer证书、tls证书等等和区块相关文件,即:channel-artifacts和crypto-config文件夹内容,可放在任何一个节点运行,生成后按照需要分发到不同的节点;

    /centos-113/e2e_cli/scripts/script.sh  通道创建命令、peer加入通道命令、链码安装、实例化、调用等等脚本,这个就是具体实践了;基本算是命令的集合,每个命令执行前都要先设置环境变量;看下函数:
        |- createChannel 创建通道
        |- joinChannel 加入通道
        |- updateAnchorPeers 0 更新锚点
        |- installChaincode 2 安装链码
        |- instantiateChaincode 2 实例化链码
        |- chaincodeQuery 0 100 链码查询
        |- chaincodeInvoke 0 链码操作

    每个函数建议都去细看下,理解为主;

四、部署运行

1、先clone到本地,然后修改实际IP地址
git clone https://github.com/skylinelxw/chain-project.git

主要修改docker配置文件中的IP地址信息,其他暂且可以不变。

2、根据自己的需要重新生成证书(可选)

       案例中创建的通道名称是 sunshine,如果重新生成,则需要将生成的证书替换现有的证书;

3、分发文件

       将各个机器的配置文件分发到各个机器上,机器也需要安装一样的环境;

4、按顺序启动 (主要节点部署情况)

   a. zookeeper是一个集群插件,所以可以单独先启动;
    docker-compose -f docker-zk.yaml up -d  其中-d是后台运行的意思,如果要看日志可以加--verbose 参数
    检查:docker ps 每台机器可查看到一个docker的容器:z1
    实在不放心可进入容器看zk状态:
        docker exec -it z1 bash
        ./bin/zkServer.sh status
            ZooKeeper JMX enabled by default
            Using config: /conf/zoo.cfg
            Mode: follower
        
   b. kafka 启动依赖于zk集群;
    docker-compose -f docker-kafka.yaml up -d
    分别在每台机器上启动

   c. orderer 排序服务启动
    docker-compose -f docker-compose-orderer.yaml up -d
    分别在每台机器上启动,可以使用:
    docker logs orderer1.lychee.com 查看日志 

   d. peer 组织节点启动
    docker-compose -f docker-compose-peer.yaml up -d
    分别在每台机器上启动
5、运行测试脚本

       测试脚本的修改目前只修改了org1的peer0节点的脚步,即centos-113上的scripts中的文件;

   进入centos-113节点:
    docker exec -it lycheecli bash 进入lycheecli客户端容器
    ./scripts/script.sh sunshine 运行测试脚本;

出现============ All GOOD, End-2-End execution completed ============ 就大功告成;

五、可能遇到的问题

1、当需要更换证书或通道时,需要stop且rm掉容器,zookeeper可以不动,如果重复使用一个通道名,则需要连同kafka一起干掉;
docker stop orderer2.lychee.com peer0.org1.lychee.com k1
docker rm orderer2.lychee.com peer0.org1.lychee.com k1

2、重复使用同一个通道名称可能造成kafka识别问题,需要连同kafka一起干掉重建

3、注意看运行的日志,如果创建通道就有问题,则可能是hosts配置错误或证书配置问题,干掉重来;

4、如果日志已经创建成功,则看运行到哪一部,解决问题后,手动修改script.sh文件,注释掉已运行成功的函数;

5、如果要修改lychee.com 域,则需要修改证书生成配置文件和各个节点的文件夹映射关系,这个地方需要细心!!

6、运行过程中,尝试看对应节点的日志
docker logs peerx.orgx.lychee.com

7、铲掉重来,报错问题
因为最新的配置增加了数据持久化,所以需要每次

8、 BAD_REQUEST -- error authorizing update: error validating DeltaSet: invalid mod_policy for element [Policy] /Channel/Application/Writers: mod_policy not set
铲掉重来可以解决,非常有可能是第一次搭建没有删除干净
9、ca启动后一会就宕机的原因是docker.yaml中的文件名称配置问题

10、'' has invalid keys: capabilities

11、创世区块通道tx生成时,x509问题,这个是之前旧证书混淆导致,删除历史的即可

还有一些设计或问题详细描述见:
https://www.jianshu.com/p/baaa828577e6

持续整理中……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容