局域网环境、多机部署Fabric2.x版本(RAFT共识算法)+ 通道创建
文章目录
- 多机部署Fabric2.x(RAFT)版本
- fabric局域网多机链管理目录
- 环境
- 准备工作
- 配置文件准备
- 部署fabric网络
- 创建通道
多机部署Fabric2.x(RAFT)版本
fabric局域网多机链管理目录
《局域网环境、多机部署Fabric2.x版本(RAFT共识算法)+ 通道创建》
《fabric2.0局域网多机版链码部署、调用、升级》
《fabric2.0局域网多机版锚节点更新》
环境
Linux CentOS 7.4
准备好三台虚拟机,IP地址:
192.168.1.25 (orderer 排序组织) 192.168.1.26 (org.peer0) 192.168.1.27 (org.peer1)
保证其网络正常访问
wget
确保
wget
命令正常使用,安装方式如下:#yum install wget #wget --version - GNU Wget 1.14 built on linux-gnu.
unzip
确保
unzip
命令正常使用,安装方式如下:#yum install unzip #unzip --version
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`
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
准备工作
文件夹创建
三台主机分别执行:
mkdir /data/fabric #fabric文件夹名字需要与后续对应 cd /data/fabric mkdir chaincode #存放链码文件 mkdir channel-artifacts #存放区块链配置类文件 mkdir ledger #存放账本数据
镜像拉取(使用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#后面两个在链码安装时候需要用的镜像。官方使用的默认的镜像名字,因为本例子使用了私服,故需要改成默认镜像名字。
工具准备
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/
配置文件准备
- 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
- cryptogen.yaml(注意格式!!!)
OrdererOrgs:
- Name: OrdererDomain: test.comSpecs:- Hostname: orderer
PeerOrgs:
- Name: orgDomain: org.test.comEnableNodeOUs: trueTemplate:Count: 2 #节点个数Users:Count: 2
- 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"
- 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网络
配置文件上传
configtx.yaml
、cryptogen.yaml
、docker-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/
目录下
生成证书:(在
orderer
主机(192.168.1.25)/data/fabric/
目录下执行)cryptogen generate --config=./cryptogen.yaml --output='crypto-config'
证书文件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/
生成创世区块:(或创建系统通道,仅执行一次)
configtxgen -profile tbsGenesis -outputBlock ./channel-artifacts/genesis.block -channelID tbs-sys-channel
得到
genesis.block
即可[root@localhost fabric]# ls channel-artifacts/ genesis.block
启动网络
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
完成后网络启动成功!
创建通道
生成通道文件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
创世区块文件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/
生成区块文件 (在
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
- 复制区块文件至其他peer节点 (scp至
peer1
)
scp ./channel-artifacts/channel-1.block root@192.168.1.27:/data/fabric/channel-artifacts/
- 节点加入通道 (
peer0
、peer1
加入channel-1
,在peer0
、peer1
主机上分别执行)
[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
- 校验是否成功(
在peer0
、peer1
主机上分别执行)
[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共识算法)+ 通道创建相关推荐
- fabric2.2版本 单机测试环境搭建
说明: 1. fabric版本:v2.2.3 2. centos版本: v7.9 3. go版本: 1.16.9 4. docker版本: 20.10.10 5. docker-compose版本: ...
- Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)...
Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...
- 内网环境部署zabbix5.0版本监控(一)
内网环境部署zabbix5.0版本 首先需要在有网的环境先做一个yum源本地配置zabbix5.0.mysql5.7.epel源 Zabbix: rpm -Uvh https://repo.zabbi ...
- (Fabric 学习三)Fabric2.2 多机部署 使用fabcar链码
注:参考博客: Hyperledger Fabric多机及explorer搭建_routiao的博客-CSDN博客 一.准备条件 硬件环境:Ubuntu虚拟机两台,一共两台主机:主机1的IP:192. ...
- 家用PC机打造VSphere5.1 测试环境:之部署VCenter Server 5.1
家用PC机打造VSphere5.1 测试环境 前言: 实践出真知,同样学习VMware VSphere 的朋友,也需要不断的测试总结,再测试再总结只有不断的积累才能学好,但是动辄几万的服务器不是所有朋 ...
- CentOS7环境部署kubenetes1.12版本五部曲之四:安装dashboard
本文是<CentOS7环境部署kubenetes1.12版本五部曲>系列的第四篇,前面的实站已经搭建了kubernetes1.12集群,操作都是在控制台用kubectl命令来完成的,今天咱 ...
- CentOS7环境部署kubenetes1.12版本五部曲之一:标准化机器
前提 本次部署实战需要科学上网,才能顺利安装和部署kubernetes用于学习和实践,请确保您已经完成了相关操作: 系列文章简述 本次搭建过程由五部分实战构成: 标准化机器:kubernetes环境中 ...
- Checkly如何借助Terraform实现零宕机部署
Checkly是一款验证API端点正确性和浏览器点击流的监控工具.Checkly创始人Tim Nolet分享了他们在AWS上基于Docker的基础设施中借助Terraform实现零宕机部署的经验. C ...
- 明晚8点直播丨 Oracle RMAN 单实例异机迁移恢复(版本:11gR2)
Oracle RMAN 单实例异机迁移恢复(版本:11GR2)-9月29日20:00 迁移数据库的方法有多种,较为常用的则是使用RMAN.使用RMAN迁移数据库属于数据库的物理备份与恢复范畴,整个过程 ...
最新文章
- python下载安装包-python安装包 官方版
- Pandas缺失数据最快定位方式(极少代码快速实现,打死不用循环!!!!!)
- comsol稀物质传递_什么是质量传递?
- 数学--数论--欧拉降幂和广义欧拉降幂(实用好理解)
- spring--打印hello--注解component--自动创建对象
- 操作系统课设之虚拟内存页面置换算法的模拟与实现
- 一只小蜜蜂(HDU-2044)
- Spring AOP 的日志管理实现
- Windows10中“SQL Server 配置管理器”哪去了?
- android textview adapter,Android在FragmentPagerAdapter中的Fragment中设置TextView文本
- 新手建网站笔记(四)--快捷键
- 在Windows Embedded CE下进行Native C++开发,一次错误使用多线程的经验教训
- 用ntsd -c q -p PID 杀进程
- linux上压缩pdf文件,如何压缩PDF文件?
- 用matlab软件心得体会,MATLAB软件实训报告 - 图文
- 瑜伽形体棍出口欧盟CE认证,出口美国CPC认证标准介绍
- STM32——FLASH擦除/写入失败的踩坑笔记。(WRPERR)
- Retrofit 使用详解
- Android之MySql数据库操作
- 【语义地图】Ubuntu18.04 Suma++代码配置运行