文章目录

  • 多机部署Fabric2.x(RAFT)版本
    • fabric局域网多机链管理目录
    • 环境
    • 准备工作
    • 配置文件准备
    • 部署fabric网络
    • 创建通道

多机部署Fabric2.x(RAFT)版本

fabric局域网多机链管理目录

  1. 《局域网环境、多机部署Fabric2.x版本(RAFT共识算法)+ 通道创建》

  2. 《fabric2.0局域网多机版链码部署、调用、升级》

  3. 《fabric2.0局域网多机版锚节点更新》

环境

  1. Linux CentOS 7.4

    准备好三台虚拟机,IP地址:

    192.168.1.25   (orderer 排序组织)
    192.168.1.26    (org.peer0)
    192.168.1.27    (org.peer1)
    

    保证其网络正常访问

  2. wget

    确保wget命令正常使用,安装方式如下:

    #yum install wget
    #wget --version
    - GNU Wget 1.14 built on linux-gnu.
    
  3. unzip

    确保unzip命令正常使用,安装方式如下:

    #yum install unzip
    #unzip --version
    
  4. docker

    确保docker已经安装,安装方式如下:

#下载repo文件
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
#把软件仓库地址替换为 TUNA
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
#安装docker
yum -y install docker-ce
docker -v
#-Docker version 19.03.8, build afacb8b
#启动并加入开机启动
systemctl start docker
systemctl enable docker
  • 如有使用本地harbor私服。增加如下配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","insecure-registries": ["ip:port"],"log-opts": {"max-size": "10m"}
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker login `ip:port` -u `admin` -p `pwd`
  1. docker-compose

    确保docker-compose命令正常使用,安装方式如下:

#从国内镜像 get.daocloud.io 快速下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#给执行文件添加执行权限
chmod +x /usr/local/bin/docker-compose
docker-compose --version
#-docker-compose version 1.23.2, build 1110ad01

准备工作

  1. 文件夹创建

    三台主机分别执行:

    mkdir /data/fabric      #fabric文件夹名字需要与后续对应
    cd /data/fabric
    mkdir chaincode         #存放链码文件
    mkdir channel-artifacts #存放区块链配置类文件
    mkdir ledger            #存放账本数据
    
  2. 镜像拉取(使用harbor私服)

  • orderer主机

    docker pull 192.168.1.212:8080/fabric/fabric-orderer:2.0.0
    
  • org主机(peer0和peer1)

    docker pull 192.168.1.212:8080/fabric/fabric-tools:2.0.0
    docker pull 192.168.1.212:8080/fabric/fabric-peer:2.0.0
    docker pull 192.168.1.212:8080/fabric/fabric-ccenv:2.2.0
    docker tag 192.168.1.212:8080/fabric/fabric-ccenv:2.2.0 hyperledger/fabric-ccenv:2.2
    docker pull 192.168.1.212:8080/fabric/fabric-baseos:2.2.0
    docker tag 192.168.1.212:8080/fabric/fabric-baseos:2.2.0 hyperledger/fabric-baseos:2.2#后面两个在链码安装时候需要用的镜像。官方使用的默认的镜像名字,因为本例子使用了私服,故需要改成默认镜像名字。
    
  1. 工具准备

    fabric2.0编译工具hyperledger-fabric-linux-amd64-2.0.0.tar.gz(点击下载)下载后上传至orderer主机(192.168.1.25)

[root@localhost fabric]# tar -zxvf hyperledger-fabric-linux-amd64-2.0.0.tar.gz
bin/
bin/configtxgen
bin/orderer
bin/peer
bin/discover
bin/idemixgen
bin/configtxlator
bin/cryptogen
config/
config/configtx.yaml
config/core.yaml
config/orderer.yaml
[root@localhost fabric]# ls
bin  config  hyperledger-fabric-linux-amd64-2.0.0.tar.gz
[root@localhost fabric]# cp bin/* /usr/bin/

配置文件准备

  1. configtx.yaml(注意格式!!!)
# configtx.yaml
---
Organizations:- &OrdererOrgName: OrdererOrgID: OrdererMSPMSPDir: crypto-config/ordererOrganizations/test.com/mspPolicies:Readers:Type: SignatureRule: "OR('OrdererMSP.member')"Writers:Type: SignatureRule: "OR('OrdererMSP.member')"Admins:Type: SignatureRule: "OR('OrdererMSP.admin')"OrdererEndpoints:- orderer.test.com:7050- &orgName: orgMSPID: orgMSPMSPDir: crypto-config/peerOrganizations/org.test.com/mspPolicies:Readers:Type: SignatureRule: "OR('orgMSP.admin', 'orgMSP.peer', 'orgMSP.client')"Writers:Type: SignatureRule: "OR('orgMSP.admin', 'orgMSP.client')"Admins:Type: SignatureRule: "OR('orgMSP.admin')"Endorsement:Type: SignatureRule: "OR('orgMSP.peer')"AnchorPeers:- Host: peer0.org.test.comPort: 7051
Capabilities:Global: &ChannelCapabilitiesV2_0: trueOrderer: &OrdererCapabilitiesV2_0: trueApplication: &ApplicationCapabilitiesV2_0: true
Application: &ApplicationDefaultsOrganizations:Policies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"LifecycleEndorsement:Type: ImplicitMetaRule: "MAJORITY Endorsement"Endorsement:Type: ImplicitMetaRule: "MAJORITY Endorsement"Capabilities:<<: *ApplicationCapabilities
Orderer: &OrdererDefaultsOrdererType: etcdraftAddresses:- orderer.test.com:7050BatchTimeout: 1sBatchSize:MaxMessageCount: 100AbsoluteMaxBytes: 99 MBPreferredMaxBytes: 512 KBEtcdRaft:  Consenters:- Host: orderer.test.comPort: 7050ClientTLSCert: crypto-config/ordererOrganizations/test.com/orderers/orderer.test.com/tls/server.crtServerTLSCert: crypto-config/ordererOrganizations/test.com/orderers/orderer.test.com/tls/server.crtOptions:TickInterval: 500msElectionTick: 10HeartbeatTick: 1MaxInflightBlocks: 5SnapshotIntervalSize: 20971520Organizations:Policies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"BlockValidation:Type: ImplicitMetaRule: "ANY Writers"
Channel: &ChannelDefaultsPolicies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"Capabilities:<<: *ChannelCapabilities
Profiles:tbsGenesis:<<: *ChannelDefaultsOrderer:<<: *OrdererDefaultsOrganizations:- *OrdererOrgCapabilities:<<: *OrdererCapabilitiesConsortiums:tbsConsortium:Organizations:- *orgchannel-1:         #后续创建通道Consortium: tbsConsortium<<: *ChannelDefaultsApplication:<<: *ApplicationDefaultsOrganizations:- *orgCapabilities:<<: *ApplicationCapabilities   
  1. cryptogen.yaml(注意格式!!!)
OrdererOrgs:
- Name: OrdererDomain: test.comSpecs:- Hostname: orderer
PeerOrgs:
- Name: orgDomain: org.test.comEnableNodeOUs: trueTemplate:Count: 2   #节点个数Users:Count: 2
  1. docker-compose-orderer.yaml(注意格式!!!)
version: '2'
services:orderer.test.com:container_name: orderer.test.comimage: 192.168.1.212:8080/fabric/fabric-orderer:2.0.0environment:- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_default        #fabric_default 中的 fabric 与前文文件夹名字对应- ORDERER_GENERAL_LOGLEVEL=debug- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0- ORDERER_GENERAL_LISTENPORT=7050- ORDERER_GENERAL_GENESISMETHOD=file- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block- ORDERER_GENERAL_LOCALMSPID=OrdererMSP- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp- ORDERER_GENERAL_TLS_ENABLED=true- ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key- ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]- ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt- ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key- ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]working_dir: /opt/gopath/src/github.com/hyperledger/fabriccommand: orderervolumes:- ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block- ./crypto-config/ordererOrganizations/test.com/orderers/orderer.test.com/msp:/var/hyperledger/orderer/msp- ./crypto-config/ordererOrganizations/test.com/orderers/orderer.test.com/tls/:/var/hyperledger/orderer/tlsnetworks:default:aliases:- fabricports:- 7050:7050extra_hosts:- "orderer.test.com:192.168.1.25"
  1. docker-compose-peer.yaml(注意格式!!!)
  • 192.168.1.26 (peer0)
version: '2'
services:peer0.org.test.com:container_name: peer0.org.test.comimage: 192.168.1.212:8080/fabric/fabric-peer:2.0.0environment:- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_default- CORE_LOGGING_LEVEL=INFO- CORE_PEER_GOSSIP_USELEADERELECTION=true- CORE_PEER_GOSSIP_ORGLEADER=false- CORE_PEER_PROFILE_ENABLED=true- CORE_PEER_LOCALMSPID=orgMSP- CORE_PEER_ID=peer0.org.test.com- CORE_PEER_ADDRESS=peer0.org.test.com:7051- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org.test.com:7051- CORE_PEER_CHAINCODEADDRESS=peer0.org.test.com:7052- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org.test.com:7051- CORE_PEER_TLS_ENABLED=true- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crtvolumes:- /var/run/:/host/var/run/- ./crypto-config/peerOrganizations/org.test.com/peers/peer0.org.test.com/msp:/etc/hyperledger/fabric/msp- ./crypto-config/peerOrganizations/org.test.com/peers/peer0.org.test.com/tls:/etc/hyperledger/fabric/tls- ./ledger:/var/hyperledger/productionworking_dir: /opt/gopath/src/github.com/hyperledger/fabric/peercommand: peer node startnetworks:default:aliases:- fabricports:- 7051:7051- 7052:7052- 7053:7053extra_hosts:  # 声明域名和IP的对应关系- "orderer.test.com:192.168.1.25"- "peer0.org.test.com:192.168.1.26"- "peer1.org.test.com:192.168.1.27"cli:container_name: cliimage: 192.168.1.212:8080/fabric/fabric-tools:2.0.0tty: truestdin_open: trueenvironment:- GOPATH=/opt/gopath- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock- CORE_LOGGING_LEVEL=INFO- CORE_PEER_ID=cli- CORE_PEER_ADDRESS=peer0.org.test.com:7051- CORE_PEER_LOCALMSPID=orgMSP- CORE_PEER_TLS_ENABLED=true- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org.test.com/peers/peer0.org.test.com/tls/server.crt- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org.test.com/peers/peer0.org.test.com/tls/server.key- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org.test.com/peers/peer0.org.test.com/tls/ca.crt- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org.test.com/users/Admin@org.test.com/mspworking_dir: /opt/gopath/src/github.com/hyperledger/fabric/peercommand: /bin/bashvolumes:- /var/run/:/host/var/run/- ./chaincode/:/opt/gopath/src/github.com/chaincode- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifactsdepends_on:   # 启动顺序- peer0.org.test.comnetworks:default:aliases:- fabricextra_hosts:- "orderer.test.com:192.168.1.25"- "peer0.org.test.com:192.168.1.26"- "peer1.org.test.com:192.168.1.27"
  • 192.168.1.27 (peer1)
version: '2'
services:peer1.org.test.com:container_name: peer1.org.test.comimage: 192.168.1.212:8080/fabric/fabric-peer:2.0.0environment:- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_default- CORE_LOGGING_LEVEL=INFO- CORE_PEER_GOSSIP_USELEADERELECTION=true- CORE_PEER_GOSSIP_ORGLEADER=false- CORE_PEER_PROFILE_ENABLED=true- CORE_PEER_LOCALMSPID=orgMSP- CORE_PEER_ID=peer1.org.test.com- CORE_PEER_ADDRESS=peer1.org.test.com:7051- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org.test.com:7051- CORE_PEER_CHAINCODEADDRESS=peer1.org.test.com:7052- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org.test.com:7051- CORE_PEER_TLS_ENABLED=true- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crtvolumes:- /var/run/:/host/var/run/- ./crypto-config/peerOrganizations/org.test.com/peers/peer1.org.test.com/msp:/etc/hyperledger/fabric/msp- ./crypto-config/peerOrganizations/org.test.com/peers/peer1.org.test.com/tls:/etc/hyperledger/fabric/tls- ./ledger:/var/hyperledger/productionworking_dir: /opt/gopath/src/github.com/hyperledger/fabric/peercommand: peer node startnetworks:default:aliases:- fabricports:- 7051:7051- 7052:7052- 7053:7053extra_hosts:  # 声明域名和IP的对应关系- "orderer.test.com:192.168.1.25"- "peer0.org.test.com:192.168.1.26"- "peer1.org.test.com:192.168.1.27"cli:container_name: cliimage: 192.168.1.212:8080/fabric/fabric-tools:2.0.0tty: truestdin_open: trueenvironment:- GOPATH=/opt/gopath- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock- CORE_LOGGING_LEVEL=INFO- CORE_PEER_ID=cli- CORE_PEER_ADDRESS=peer1.org.test.com:7051- CORE_PEER_LOCALMSPID=orgMSP- CORE_PEER_TLS_ENABLED=true- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org.test.com/peers/peer1.org.test.com/tls/server.crt- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org.test.com/peers/peer1.org.test.com/tls/server.key- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org.test.com/peers/peer1.org.test.com/tls/ca.crt- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org.test.com/users/Admin@org.test.com/mspworking_dir: /opt/gopath/src/github.com/hyperledger/fabric/peercommand: /bin/bashvolumes:- /var/run/:/host/var/run/- ./chaincode/:/opt/gopath/src/github.com/chaincode- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifactsdepends_on:   # 启动顺序- peer1.org.test.comnetworks:default:aliases:- fabricextra_hosts:- "orderer.test.com:192.168.1.25"- "peer0.org.test.com:192.168.1.26"- "peer1.org.test.com:192.168.1.27"

部署fabric网络

  1. 配置文件上传

    • configtx.yamlcryptogen.yamldocker-compose-orderer.yaml文件上传至 orderer主机(192.168.1.25) /data/fabric/ 目录下
    • docker-compose-peer0.yaml文件上传至 peer0主机(192.168.1.26) /data/fabric/ 目录下
    • docker-compose-peer1.yaml文件上传至 peer1主机(192.168.1.27) /data/fabric/ 目录下
  2. 生成证书:(在orderer主机(192.168.1.25) /data/fabric/ 目录下执行)

    cryptogen generate --config=./cryptogen.yaml --output='crypto-config'
    
  3. 证书文件scp至其他主机。(严格意义上讲,当前主机只允许拥有自身组织节点的私钥。其他组织节点的需要删除)

    scp -r  crypto-config/* root@192.168.1.26:/data/fabric/crypto-config/
    scp -r  crypto-config/* root@192.168.1.27:/data/fabric/crypto-config/
    
  4. 生成创世区块:(或创建系统通道,仅执行一次)

    configtxgen -profile tbsGenesis -outputBlock ./channel-artifacts/genesis.block -channelID tbs-sys-channel
    

    得到genesis.block即可

    [root@localhost fabric]# ls channel-artifacts/
    genesis.block
    
  5. 启动网络

  • orderer主机(192.168.1.25)

      docker-compose -f docker-compose-orderer.yaml up -d[root@localhost fabric]# docker psCONTAINER ID        IMAGE                                            COMMAND             CREATED             STATUS              PORTS                    NAMESca29dbea8ea3        192.168.1.212:8080/fabric/fabric-orderer:2.0.0   "orderer"           3 seconds ago       Up 2 seconds        0.0.0.0:7050->7050/tcp   orderer.test.com
    
  • peer0主机(192.168.1.26)

      docker-compose -f docker-compose-peer0.yaml up -d[root@localhost fabric]# docker psCONTAINER ID        IMAGE                                          COMMAND             CREATED             STATUS              PORTS                              NAMESf805245f7754        192.168.1.212:8080/fabric/fabric-tools:2.0.0   "/bin/bash"         2 seconds ago       Up 2 seconds                                           cliffca760f1e31        192.168.1.212:8080/fabric/fabric-peer:2.0.0    "peer node start"   3 seconds ago       Up 2 seconds        0.0.0.0:7051-7053->7051-7053/tcp   peer0.org.test.com
    
  • peer1主机(192.168.1.27)

      docker-compose -f docker-compose-peer1.yaml up -d[root@localhost fabric]# docker psCONTAINER ID        IMAGE                                          COMMAND             CREATED             STATUS              PORTS                              NAMESf82baca19c0b        192.168.1.212:8080/fabric/fabric-tools:2.0.0   "/bin/bash"         2 seconds ago       Up 1 second                                            clifc931a1463bb        192.168.1.212:8080/fabric/fabric-peer:2.0.0    "peer node start"   3 seconds ago       Up 2 seconds        0.0.0.0:7051-7053->7051-7053/tcp   peer1.org.test.com
    
  • 完成后网络启动成功!

创建通道

  1. 生成通道文件channel-1.tx (或生成业务通道文件。在orderer主机(192.168.1.25) /data/fabric/ 目录下执行)

    configtxgen -profile channel-1 -outputCreateChannelTx ./channel-artifacts/channel-1.tx -channelID channel-1
    注:channel-1 为通道名称 需在configtx.yaml 文件中进行相应配置
    

得到channel-1.tx即可

[root@localhost fabric]# ls channel-artifacts/
channel-1.tx  genesis.block
  1. 创世区块文件scp至组织各节点主机:即:peer0、peer1

    scp ./channel-artifacts/* root@192.168.1.26:/data/fabric/channel-artifacts/
    scp ./channel-artifacts/* root@192.168.1.27:/data/fabric/channel-artifacts/
    
  2. 生成区块文件 (在peer0执行)

[root@localhost fabric]# docker exec cli peer channel create -o orderer.test.com:7050 -c channel-1 -f ./channel-artifacts/channel-1.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/test.com/msp/tlscacerts/tlsca.test.com-cert.pem --outputBlock ./channel-artifacts/channel-1.block
2021-05-13 06:57:48.057 UTC [main] InitCmd -> WARN 001 CORE_LOGGING_LEVEL is no longer supported, please use the FABRIC_LOGGING_SPEC environment variable
2021-05-13 06:57:48.062 UTC [main] SetOrdererEnv -> WARN 002 CORE_LOGGING_LEVEL is no longer supported, please use the FABRIC_LOGGING_SPEC environment variable
2021-05-13 06:57:48.306 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2021-05-13 06:57:48.323 UTC [cli.common] readBlock -> INFO 004 Expect block, but got status: &{NOT_FOUND}
2021-05-13 06:57:48.326 UTC [channelCmd] InitCmdFactory -> INFO 005 Endorser and orderer connections initialized
2021-05-13 06:57:48.527 UTC [cli.common] readBlock -> INFO 006 Expect block, but got status: &{NOT_FOUND}
2021-05-13 06:57:48.532 UTC [channelCmd] InitCmdFactory -> INFO 007 Endorser and orderer connections initialized
2021-05-13 06:57:48.962 UTC [cli.common] readBlock -> INFO 008 Expect block, but got status: &{SERVICE_UNAVAILABLE}
2021-05-13 06:57:48.965 UTC [channelCmd] InitCmdFactory -> INFO 009 Endorser and orderer connections initialized
2021-05-13 06:57:49.167 UTC [cli.common] readBlock -> INFO 00a Expect block, but got status: &{SERVICE_UNAVAILABLE}
2021-05-13 06:57:49.170 UTC [channelCmd] InitCmdFactory -> INFO 00b Endorser and orderer connections initialized
2021-05-13 06:57:49.371 UTC [cli.common] readBlock -> INFO 00c Expect block, but got status: &{SERVICE_UNAVAILABLE}
2021-05-13 06:57:49.374 UTC [channelCmd] InitCmdFactory -> INFO 00d Endorser and orderer connections initialized
2021-05-13 06:57:49.577 UTC [cli.common] readBlock -> INFO 00e Expect block, but got status: &{SERVICE_UNAVAILABLE}
2021-05-13 06:57:49.580 UTC [channelCmd] InitCmdFactory -> INFO 00f Endorser and orderer connections initialized
2021-05-13 06:57:49.781 UTC [cli.common] readBlock -> INFO 010 Expect block, but got status: &{SERVICE_UNAVAILABLE}
2021-05-13 06:57:49.784 UTC [channelCmd] InitCmdFactory -> INFO 011 Endorser and orderer connections initialized
2021-05-13 06:57:49.987 UTC [cli.common] readBlock -> INFO 012 Received block: 0
[root@localhost fabric]# ls channel-artifacts/
channel-1.block  channel-1.tx  genesis.block
  1. 复制区块文件至其他peer节点 (scp至 peer1
 scp ./channel-artifacts/channel-1.block root@192.168.1.27:/data/fabric/channel-artifacts/
  1. 节点加入通道 (peer0peer1加入channel-1,在peer0peer1主机上分别执行)
[root@localhost fabric]#  docker exec cli peer channel join -b ./channel-artifacts/channel-1.block
2021-05-13 07:03:32.807 UTC [main] InitCmd -> WARN 001 CORE_LOGGING_LEVEL is no longer supported, please use the FABRIC_LOGGING_SPEC environment variable
2021-05-13 07:03:32.811 UTC [main] SetOrdererEnv -> WARN 002 CORE_LOGGING_LEVEL is no longer supported, please use the FABRIC_LOGGING_SPEC environment variable
2021-05-13 07:03:32.976 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2021-05-13 07:03:33.268 UTC [channelCmd] executeJoin -> INFO 004 Successfully submitted proposal to join channel
  1. 校验是否成功(在peer0peer1主机上分别执行)
[root@localhost fabric]# docker exec cli peer channel list
2021-05-13 07:04:15.913 UTC [main] InitCmd -> WARN 001 CORE_LOGGING_LEVEL is no longer supported, please use the FABRIC_LOGGING_SPEC environment variable
2021-05-13 07:04:15.917 UTC [main] SetOrdererEnv -> WARN 002 CORE_LOGGING_LEVEL is no longer supported, please use the FABRIC_LOGGING_SPEC environment variable
2021-05-13 07:04:15.921 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
Channels peers has joined:
channel-1
  • 至此网络部署成功、通道创建成功

下一篇:fabric2.0局域网多机版链码部署、调用、升级

局域网环境、多机部署Fabric2.x版本(RAFT共识算法)+ 通道创建相关推荐

  1. fabric2.2版本 单机测试环境搭建

    ​说明: 1. fabric版本:v2.2.3 2. centos版本: v7.9 3. go版本: 1.16.9 4. docker版本: 20.10.10 5. docker-compose版本: ...

  2. Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)...

    Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...

  3. 内网环境部署zabbix5.0版本监控(一)

    内网环境部署zabbix5.0版本 首先需要在有网的环境先做一个yum源本地配置zabbix5.0.mysql5.7.epel源 Zabbix: rpm -Uvh https://repo.zabbi ...

  4. (Fabric 学习三)Fabric2.2 多机部署 使用fabcar链码

    注:参考博客: Hyperledger Fabric多机及explorer搭建_routiao的博客-CSDN博客 一.准备条件 硬件环境:Ubuntu虚拟机两台,一共两台主机:主机1的IP:192. ...

  5. 家用PC机打造VSphere5.1 测试环境:之部署VCenter Server 5.1

    家用PC机打造VSphere5.1 测试环境 前言: 实践出真知,同样学习VMware VSphere 的朋友,也需要不断的测试总结,再测试再总结只有不断的积累才能学好,但是动辄几万的服务器不是所有朋 ...

  6. CentOS7环境部署kubenetes1.12版本五部曲之四:安装dashboard

    本文是<CentOS7环境部署kubenetes1.12版本五部曲>系列的第四篇,前面的实站已经搭建了kubernetes1.12集群,操作都是在控制台用kubectl命令来完成的,今天咱 ...

  7. CentOS7环境部署kubenetes1.12版本五部曲之一:标准化机器

    前提 本次部署实战需要科学上网,才能顺利安装和部署kubernetes用于学习和实践,请确保您已经完成了相关操作: 系列文章简述 本次搭建过程由五部分实战构成: 标准化机器:kubernetes环境中 ...

  8. Checkly如何借助Terraform实现零宕机部署

    Checkly是一款验证API端点正确性和浏览器点击流的监控工具.Checkly创始人Tim Nolet分享了他们在AWS上基于Docker的基础设施中借助Terraform实现零宕机部署的经验. C ...

  9. 明晚8点直播丨 Oracle RMAN 单实例异机迁移恢复(版本:11gR2)

    Oracle RMAN 单实例异机迁移恢复(版本:11GR2)-9月29日20:00 迁移数据库的方法有多种,较为常用的则是使用RMAN.使用RMAN迁移数据库属于数据库的物理备份与恢复范畴,整个过程 ...

最新文章

  1. python下载安装包-python安装包 官方版
  2. Pandas缺失数据最快定位方式(极少代码快速实现,打死不用循环!!!!!)
  3. comsol稀物质传递_什么是质量传递?
  4. 数学--数论--欧拉降幂和广义欧拉降幂(实用好理解)
  5. spring--打印hello--注解component--自动创建对象
  6. 操作系统课设之虚拟内存页面置换算法的模拟与实现
  7. 一只小蜜蜂(HDU-2044)
  8. Spring AOP 的日志管理实现
  9. Windows10中“SQL Server 配置管理器”哪去了?
  10. android textview adapter,Android在FragmentPagerAdapter中的Fragment中设置TextView文本
  11. 新手建网站笔记(四)--快捷键
  12. 在Windows Embedded CE下进行Native C++开发,一次错误使用多线程的经验教训
  13. 用ntsd -c q -p PID 杀进程
  14. linux上压缩pdf文件,如何压缩PDF文件?
  15. 用matlab软件心得体会,MATLAB软件实训报告 - 图文
  16. 瑜伽形体棍出口欧盟CE认证,出口美国CPC认证标准介绍
  17. STM32——FLASH擦除/写入失败的踩坑笔记。(WRPERR)
  18. Retrofit 使用详解
  19. Android之MySql数据库操作
  20. 【语义地图】Ubuntu18.04 Suma++代码配置运行

热门文章

  1. 韩锋:我坚信下一轮牛市将出现在数字私有化风口上 | 《8问》
  2. 海兰一体机电脑U盘重装Win10系统教程图解
  3. 【C】python安装xlrd和xlwt库
  4. 图书信息录入功能c语言,图书信息管理系统C语言
  5. 传奇身上装备升级系列脚本,以及UPGRADEITEMEX 脚本的详细参数解释
  6. 真实盈余管理统计数据(含代码)(2000-2021年)
  7. 学习记录230202
  8. 数据分析汇报PPT的优化建议
  9. Android组件化与插件化的差别在哪里,该怎么选型?
  10. python namespace,python命名空间(namespace)简单介绍