美文网首页
超级账本02--Fabric网络启动

超级账本02--Fabric网络启动

作者: Li_MAX | 来源:发表于2018-07-12 10:20 被阅读138次

    一、自动启动网络

    进入对应目录

    $ cd fabric-samples/first-network
    

    在first-network目录下有两个自动化脚本byfn.sh和eyfn.sh, 这两个脚本的启动顺序是先执行byfn.sh再执行eyfn.sh(eyfn.sh不是必须的,eyfn.sh的作用稍后介绍)

    查看帮助信息:

    $ ./byfn.sh --help
    
    up:启动
    down:清除网络
    restart:重新启动
    generate:生成证书及创世块
    upgrade:将网络从1.0升级到1.1
    
    -c:用于指定channelName,默认值"mychannel"
    -t:CLI timeout时间,默认值10
    -d:延迟启动,默认值3
    -f:使用指定的网络拓扑结构文件,默认使用docker-compose-cli.yaml
    -s:指定使用的数据库,可选 goleveldb或couchdb
    -l:指定chaincode使用的语言,可选golang 或node
    -i:指定镜像tag,默认 "latest"
    详细参数可通过./byfn.sh help查看
    

    生成证书和密钥

    为各种网络实体生成所有证书和密钥,用于引导订购服务以及配置通道所需的一系列配置事务

    $ sudo ./byfn.sh -m generate
    

    启动网络

    $ sudo ./byfn.sh -m up
    

    如果启动发生错误,则执行关闭命令后再次执行启动命令

    最后输出如下内容代表启动且测试成功

    ============== Query on peer1.org2 on channel 'mychannel' is successful ================ 
    
    ========= All GOOD, BYFN execution completed =========== 
    

    或者通过Node.js启动网络./byfn.sh -m up -l node

    first-network会生成1个orderer+4个peer+1个CLI的网络结构,整个网络包括2个org

    关闭网络

    $ sudo ./byfn.sh -m down
    

    关闭网络之后, 可以一步一步地探索网络设置. 将杀死容器, 删除加密文件, 并从Docker Registry中删除链码图像

    若在启动网络时遇到如下错误

    OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"scripts/script.sh\": stat scripts/script.sh: no such file or directory": unknown
    

    或者

    ERROR: Encountered errors while bringing up the project.
    
    ERROR !!!! Unable to start network
    

    则执行./byfn.sh down 清除网络后再启动


    二、启动网络手动实现

    实现步骤

    生成组织关系和身份证书

    确定是在 fabric-samples/first-network 路径下

    $ cd hyfa/fabric-samples/first-network/
    

    为fabric网络生成指定拓扑结构的组织关系和身份证书

    $ sudo ../bin/cryptogen generate --config=./crypto-config.yaml
    

    此命令依赖 crypto-config.yaml 配置文件

    会有如下输出:

    org1.example.com
    org2.example.com
    

    证书和密钥(即MSP材料)将被输出到目录 first-network/crypto-config 的目录中

    ordererOrganizations子目录下包括构成Orderer组织(1个Orderer节点)的身份信息

    peerOrganizations子目录下为所有的Peer节点组织(2个组织, 4个节点)的相关身份信息. 其中最关键的是MSP目录, 代表了实体的身份信息

    crypto-config文件目录结构如下

    目录结构
    

    Cryptogen 按照配置文件中指定的结构生成了对应的组织和密钥、证书文件

    其中最关键的是各个资源下的msp 目录内容,存储了生成的代表MSP 身份的各种证书文件,一般包括:

    • admincerts :管理员的身份证书文件

    • cacerts :信任的根证书文件

    • key store :节点的签名私钥文件

    • signcerts :节点的签名身份证书文件

    • tlscacerts: TLS 连接用的证书

    • intermediatecerts (可选):信任的中间证书

    • crls (可选):证书撤销列表

    • config.yaml (可选):记录OrganizationalUnitldentifiers 信息,包括根证书位置和ID信息

    这些身份文件随后可以分发到对应的Orderer 节点和Peer 节点上,并放到对应的MSP路径下,用于签名使用

    配置环境变量

    告诉configtxgen工具在哪里寻找configtx.yaml 文件

    $ export FABRIC_CFG_PATH=$PWD
    

    创建Ordering服务启动初始区块

    指定使用 configtx.yaml 文件中定义的 TwoOrgsOrdererGenesis 模板, 生成Ordering服务系统通道的初始区块文件

    $ sudo ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
    

    命令执行后输出如下:

    10:49:21.181 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
    10:49:21.207 CST [msp] getMspConfig -> INFO 002 Loading NodeOUs
    10:49:21.208 CST [msp] getMspConfig -> INFO 003 Loading NodeOUs
    10:49:21.210 CST [common/tools/configtxgen] doOutputBlock -> INFO 004 Generating genesis block
    10:49:21.211 CST [common/tools/configtxgen] doOutputBlock -> INFO 005 Writing genesis block
    

    创建一个应用通道的配置交易

    务必替换$CHANNEL_NAME或设置CHANNEL_NAME为可在整个说明中使用的环境变量

    $ export CHANNEL_NAME=mychannel
    

    指定使用 configtx.yaml 配置文件中的 TwoOrgsChannel 模板, 来生成新建通道的配置交易文件, TwoOrgsChannel 模板指定了Org1和Org2都属于后面新建的应用通道

    $ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
    

    输出如下

    11:13:24.984 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration
    11:13:24.992 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
    11:13:24.993 CST [msp] getMspConfig -> INFO 003 Loading NodeOUs
    11:13:24.994 CST [msp] getMspConfig -> INFO 004 Loading NodeOUs
    11:13:25.016 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 005 Writing new channel tx
    

    生成锚节点配置更新文件

    锚节点配置更新文件用来对组织的锚节点进行配置

    同样基于 configtx.yaml 配置文件生成新建通道文件, 每个组织都需要分别生成且注意指定对应的组织名称

    $ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
    ​
    $ sudo ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
    

    启动网络

    `$ sudo docker-compose -f docker-compose-cli.yaml up -d`
    

    -f: 指定docker-compose文件

    注:

    如果想查看网络的实时日志,则不需要提供 -d 参数

    CLI容器将闲置1000秒。如果在需要时它消失了,可以用一个简单的命令重新启动它:

    ​ $ sudo docker start cli

    网络启动顺序: 首先启动Orderer节点, 然后启动Peer节点, 日志输出如下:

    ......
    orderer.example.com       | 02:48:25.080 UTC [orderer/common/server] initializeServerConfig -> INFO 002 Starting orderer with TLS enabled
    orderer.example.com       | 02:48:25.101 UTC [fsblkstorage] newBlockfileMgr -> INFO 003 Getting block information from block storage
    orderer.example.com       | 02:48:25.138 UTC [orderer/commmon/multichannel] NewRegistrar -> INFO 004 Starting system channel 'testchainid' with genesis block hash 67662e918ab76b4a8863cc625d67fcc31e9cb3a7c3c4f9f707af1c05ba5be686 and orderer type solo
    orderer.example.com       | 02:48:25.138 UTC [orderer/common/server] Start -> INFO 005 Starting orderer:
    ......
    

    Peer节点启动后, 默认情况下没有加入网络中的任何应用通道, 也不会与Orderer服务建立连接.需要通过客户端对其进行操作, 让它加入网络和指定的应用通道中

    进入Docker容器

    执行如下命令进入到CLI容器中(后继操作都在容器中执行)

    $ sudo docker exec -it cli bash
    

    如果成功, 命令提示符会变为如下内容:

    root@b240e1643244:/opt/gopath/src/github.com/hyperledger/fabric/peer#

    创建通道

    检查环境变量是否正确设置

    echo $CHANNEL_NAME
    

    设置环境变量

    export CHANNEL_NAME=mychannel
    

    创建通道

    peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    

    该命令自动在本地生成与该应用通道同名的初始区块 mychannel.block, 只有拥有该文件才可以加入创建的应用通道中

    参数说明:

    -o: 指定Orderer服务的地址

    -c: 指定创建的通道的名称

    -f: 指定通道配置交易文件所在路径

    --tls: 指定是否开启TLS

    --cafile: 指定MSP CA证书路径

    查看:

    root@086adb802655:/opt/gopath/src/github.com/hyperledger/fabric/peer# ll
    total 36
    drwxr-xr-x 5 root root  4096 Apr 29 03:34 ./
    drwxr-xr-x 3 root root  4096 Apr 29 02:48 ../
    drwxr-xr-x 2 root root  4096 Apr 29 02:47 channel-artifacts/
    drwxr-xr-x 4 root root  4096 Apr 29 02:35 crypto/
    -rw-r--r-- 1 root root 15660 Apr 29 03:34 mychannel.block
    drwxr-xr-x 2 root root  4096 Apr 29 02:13 scripts/
    

    加入通道

    应用通道所包含组织的成员节点可以加入通道中

    peer channel join -b mychannel.block
    

    join命令: 将本Peer节点加入到某个应用通道中

    参数含义

    -b: 初始区块文件的路径信息

    执行成功后, Peer连接到该应用通道的Ordering服务上, 开始接收区块信息

    更新锚点

    使用Org1的管理员身份更新锚节点配置

    peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    

    使用Org2的管理员身份更新锚节点配置

    CORE_PEER_LOCALMSPID="Org2MSP"
    CORE_PEER_ADDRESS=peer0.org2.example.com:7051 
    CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
    CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 
    ​
    peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    

    手动配置网络完成, 下篇讲解Chaincode测试

    相关文章

      网友评论

          本文标题:超级账本02--Fabric网络启动

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