小编给大家分享一下hyperledger v1.0.5区块链运维的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
由于区块链是区中心化,与传统运维不同,所以之前你积累的经验,不一定适用于区块链。要想运维好区块链项目,就必须理解去中心化这个概念。
首先谈谈传统运维,总结为三个字“中心化”,当然有人反对并抛出“分布式”感念,传统运维的分布式仍然建立在中心化的基础之上。
我们来看看传统应用模式,决多数应用都可以概括为:
用户 -> WEB -> Application -> Cache -> Database
可以在这个体系下面做灵活变化,例如加入所有引擎、分布式文件系统,大数据等等应用,但都离不开这个模式。
区块链完全不同,如果举一个最接近的例子,我想可能与多数据中心远程异地灾备比较接近。
什么是区块链呢? 区块链实际上就是数据库,一个只能插入和查询的数据库,数据不能被修改和删除,并且这个数据库没有DBA管理员角色。这么一说你应该明白了把,实际上运维区块链就是在维护一个分布式数据库。
网上的绝大多数安装例子中,均采用 docker 部署方案,但无一例外的是,全部安装在一个物理机上。如果是生产环境,我们必须分开不是,首先要做的工作是化整为零,拆解应用,搞明白每个容器的功能和作用。然后我们将应用拆分,独立部署到物理节点上去。
+---------------------------------+
| SDK |
+---------------------------------+
| golang | nodejs | python | java |
+---------------------------------+
|
V
+---------------------------------+
| fabric-ca |
+---------------------------------+
| |
+-------------------+ +-------------------+
| Peer | | Peer |
+-------------------+ +-------------------+
| |
V V
+-------------------+ +-------------------+
| Orderer | | Orderer |
+-------------------+ +-------------------+
| |
+-------------------+
| Couchdb |
+-------------------+
接下来我们要做的工作是将上面拓扑图种的技术点分分击破。
由于 Hyperledger Fabric 是建立在 Docker 基础之上的。所以不建议你去除 Docker 转而使用传统的本地编译安装方式。我们仍然保持使用 Docker 在每个物理节点上,这回省去软件的编译和安装环节。
需要注意的是于其他传统系统一样,Hyperledger Fabric 的启动也是有顺序的,这是因为他们之间存在着依赖关系。
这里我们需要几个命令(configtxgen configtxlator cryptogen),官方的安装方式:
curl -sSL https://goo.gl/byy2Qj | bash -s 1.0.5
无论如何我都安装不成功,可能是(https://goo.gl/byy2Qj)被天朝给墙了。不过我发现 fabric-tools 里面有这个工具。
[root@localhost ~]# mkdir netkiller
[root@localhost ~]# cd netkiller/
[root@localhost netkiller]# mkdir -p {chaincode,crypto-config,config,artifacts}
创建证书
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
PeerOrgs:
- Name: Org1
Domain: org1.example.com
Template:
Count: 1
Users:
Count: 1
如果有多个Peer节点参考下面配置。
[root@localhost netkiller]# vim crypto-config.yaml
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
PeerOrgs:
- Name: Org1
Domain: org1.example.com
Template:
Count: 2
Users:
Count: 1
- Name: Org2
Domain: org2.example.com
Template:
Count: 2
Users:
Count: 1
---
Profiles:
OneOrgOrdererGenesis:
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
Consortiums:
SampleConsortium:
Organizations:
- *Org1
OneOrgChannel:
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
Organizations:
- &OrdererOrg
Name: OrdererOrg
ID: OrdererMSP
MSPDir: crypto-config/ordererOrganizations/example.com/msp
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051
Orderer: &OrdererDefaults
OrdererType: solo
Addresses:
- orderer.example.com:7050
BatchTimeout: 2s
BatchSize:
MaxMessageCount: 10
AbsoluteMaxBytes: 99 MB
PreferredMaxBytes: 512 KB
Kafka:
Brokers:
- 127.0.0.1:9092
Organizations:
Application: &ApplicationDefaults
Organizations:
创建文件 docker-compose-fabric-tools.yml
version: '2'
networks:
basic:
services:
tools:
container_name: tools
image: hyperledger/fabric-tools
tty: true
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_LOGGING_LEVEL=DEBUG
- CORE_PEER_ID=cli
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
- CORE_CHAINCODE_KEEPALIVE=10
# working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
working_dir: /root/netkiller
command: /bin/bash
volumes:
- /var/run/:/host/var/run/
- ~/netkiller:/root/netkiller
- ./chaincode/:/opt/gopath/src/github.com/
- ./crypto:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
networks:
- basic
启动 Docker 容器
[root@localhost netkiller]# docker-compose -f docker-compose-fabric-tools.yml up -d
Creating tools
进入容器
[root@localhost netkiller]# docker-compose -f docker-compose-fabric-tools.yml exec tools bash
root@88e9040d2d2a:/opt/gopath/src/github.com/hyperledger/fabric/peer#
命令
cryptogen generate --config=./crypto-config.yaml
演示
root@8f467a88de99:~/netkiller# cryptogen generate --config=./crypto-config.yaml
org1.example.com
org2.example.com
root@8f467a88de99:~/netkiller# ls -1 crypto-config
ordererOrganizations
peerOrganizations
root@8f467a88de99:~/netkiller# configtxgen -profile OneOrgOrdererGenesis -outputBlock ./config/genesis.block
2018-02-08 08:35:30.121 UTC [common/configtx/tool] main -> INFO 001 Loading configuration
2018-02-08 08:35:30.236 UTC [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2018-02-08 08:35:30.238 UTC [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block
命令
CHANNEL_NAME=mychannel
configtxgen -profile OneOrgChannel -outputCreateChannelTx ./config/channel.tx -channelID $CHANNEL_NAME
操作演示
root@8f467a88de99:~/netkiller# CHANNEL_NAME=mychannel
root@8f467a88de99:~/netkiller# configtxgen -profile OneOrgChannel -outputCreateChannelTx ./config/channel.tx -channelID $CHANNEL_NAME
2018-02-08 08:41:08.010 UTC [common/configtx/tool] main -> INFO 001 Loading configuration
2018-02-08 08:41:08.020 UTC [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-02-08 08:41:08.020 UTC [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx
命令
CHANNEL_NAME=mychannel
configtxgen -profile OneOrgChannel -outputAnchorPeersUpdate ./config/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
操作演示
root@8f467a88de99:~/netkiller# CHANNEL_NAME=mychannel
root@8f467a88de99:~/netkiller# configtxgen -profile OneOrgChannel -outputAnchorPeersUpdate ./config/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
2018-02-08 08:46:19.162 UTC [common/configtx/tool] main -> INFO 001 Loading configuration
2018-02-08 08:46:19.176 UTC [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-02-08 08:46:19.177 UTC [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update
至此所需的证书与创世区块都已生产完毕,fabric-tools 容易完成了它的使命,你可以继续保留或者清理干净。
[root@localhost netkiller]# docker-compose -f docker-compose-fabric-tools.yml down
Stopping tools ... done
Removing tools ... done
Removing network netkiller_basic
清理 fabric-tools 容器
docker rm -f $(docker ps -qa)
整个 Hyperledger Fabric 技术栈中只有这个 CouchDB 是个外来户,看到 CouchDB 我就非常兴奋,这是一个NoSQL数据库(它与MongoDB十分类似),所以CouchDB 100%可以独立运行,且最容易分离。
CouchDB 在这里有两个方案可以选择。
采用 Docker 运行 CouchDB的方案。
采用传统方式物理机上本地安装 CouchDB
理论两种方案对实际结果没有什么区别,只需提供IP地址,用户名与密码供其他节点访问即可。但实际我们看到 Hyperledger Fabric 使用的镜像是 hyperledger/fabric-couchdb 不清楚是否有修改过 CouchDB 数据库。
如果你对 Docker 比较熟悉就采用 Docker 方案。如果不熟悉就采用本地安装方式。总之选择一种你能Hold住(掌控)的方案,一旦出现故障,你能第一时间排查并处理。
下面是 Docker 方案
couchdb:
container_name: couchdb
image: hyperledger/fabric-couchdb
# Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password
# for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode.
environment:
- COUCHDB_USER=
- COUCHDB_PASSWORD=
ports:
- 5984:5984
networks:
- basic
以上是“hyperledger v1.0.5区块链运维的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/neochen/blog/1620303