6.1平台特定使用的二进制文件配置

该方案与Hyperledger Fabric 1.0 从零开始(五)——运行测试e2e类似,根据企业需要,可以控制各节点的域名,及联盟链的统一域名。可以指定单独节点的访问,生成指定的公私钥、证书等文件。具体的参数配置可以参考generateArtifacts.sh文件,可执行自动化生成,也可以按照该脚本里的命令手动生成。

参照3.1、运行fabric-samples的问题说明,首先我们在/opt/gopath/src/github.com/hyperledger/fabric下创建一个自定义目录,该目录名称应与实际生产环境中组织节点的名称一致,如:example。

我们计划将在orderer服务器中生成必要的证书等文件,因此在example下将继续创建一个orderer目录,我们将下载好的bin目录上传至/opt/gopath/src/github.com/hyperledger/fabric/example/orderer目录下,具体效果如下视图:

正如3.1小节所述,在bin目录中是Fabric平台特定使用的二进制文件cryptogen,configtxgen,configtxlator, 以及peer。

我们可以通过configtxgen和cryptogen手动生成证书/密钥以及各项配置文件。

(注:英文阅读能力好的同学可以直接参考官方文档

在正式使用上述两个文件之前,我们需要在bin目录下先创建两个yaml文件,分别是crypto-config.yaml和configtx.yaml,这两个文件具体可以在/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli这个目录下找到对应的官方示例,以官方示例为基础进行修改,改成我们生产上所需的具体内容。

6.2、生成组织证书与私钥

我们假定要组建一个名为example的联盟,且我们自己的组织名称为Demo,我们会创建一个Orderer排序服务节点,同时还会创建一个peer节点。

那么修改后的crypto-config.yaml如下:

 OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
PeerOrgs:
- Name: Demo
Domain: demo.example.com
Template:
Count:
Users:
Count:

这里我们使用crytogen工具给我们不同的网络实体(peer/client)生成加密证书(X509 certs)。这些证书代表了身份,当我们的网络实体在进行通信以及transact的时候进行签名与验证身份。

crypto-config.yaml配置文件将被crytogen工具调用,文件中包括了网络拓扑,同时允许我们给organization(Demo)以及component(隶属于organization的组件)生成一个证书与私钥的集合。每一个organization(Demo)被分配一个唯一的根证书(绑定了隶属于organization(Demo)的具体的component,包括peers与orderers)。Hyperledger Fabric的transaction与通信均被节点的私钥(keystore)进行签名,截止被公钥进行验证(signcerts)。 这个配置文件中有一个计数(count)的变量,我们使用其定义organization(Demo)中peer的数量,在本例中我们定义Demo组织有一个peer。

在crypto-config.yaml配置文件中,我们可以看到在ordererOrgs头下面的“Name”, “Domain” 以及 “Specs”这三个参数,命名规则约定如下:“{{.Hostname}}.{{.Domain}}”。使用官方提供的的crypto-config.yaml中的ordering node作为参考,我们能看到一个名称为 - orderer.example.com的ordering node,该node与Orderer的MSP ID关联。

接下来开始使用crytogen工具执行crypto-config.yaml配置文件,crytogen工具在bin目录下,我们需要先进入该目录,并执行crypto-config.yaml配置文件,具体命令如下:

cd /opt/gopath/src/github.com/hyperledger/fabric/example/orderer/bin
./bin/cryptogen generate --config=./crypto-config.yaml

根据上述命令,可以看出crypto-config.yaml被上传至bin目录下,执行结果如下视图:

此过程中可能会提示权限不足,如下视图:

这里使用chmod +x来赋权即可,不做详细说明。

完成之后会在bin目录下生成一个新的目录crypto-config,其中会有ordererOrganizations和peerOrganizations两个目录,具体结果视图如下:

6.3、定义configtx.yaml配置文件

接下来,我们需要使用configtxgen工具来执行configtx.yaml文件创建orderer Genesis block,在此之前需要为configtxgen工具指定configtx.yaml文件的路径,我们需要设置一个环境变量,执行如下命令:

export FABRIC_CFG_PATH=$PWD

随后可以打印查看该目录是否正确,具体执行命令如下:

echo $PWD

结果如下视图:

在bin目录下创建channel-artifacts目录,用来存放各种渠道的源文件。

编辑configtx.yaml文件,结果如下:

 Profiles:

     ExampleOrdererGenesis:
Orderer:
<<: *OrdererExample
Organizations:
- *OrdererDemo
Consortiums:
ExampleConsortium:
Organizations:
- *Demo ExampleChannel:
Consortium: ExampleConsortium
Application:
<<: *ApplicationExample
Organizations:
- *Demo Organizations: - &OrdererDemo
Name: OrdererDemo
ID: OrdererMSP
MSPDir: crypto-config/ordererOrganizations/example.com/msp - &Demo Name: DemoMSP
ID: DemoMSP
MSPDir: crypto-config/peerOrganizations/demo.example.com/msp
AnchorPeers:
- Host: peer0.demo.anti-moth.com
Port: Orderer: &OrdererExample OrdererType: solo Addresses:
- orderer.example.com: BatchTimeout: 2s
BatchSize:
MaxMessageCount:
AbsoluteMaxBytes: MB
PreferredMaxBytes: KB Kafka:
Brokers:
- 127.0.0.1:
Organizations: Application: &ApplicationExample Organizations:

在该文件中,我们定义了组织名称、组织排序服务名称、组织渠道名称、应用渠道名称、应用联盟名称等。

6.4、生成orderer源文件

根据6.3中配置文件的描述,我们将生成的orderer源为ExampleOrdererGenesis。

本步骤将生成genesis.block文件,具体执行命令如下:

./bin/configtxgen -profile ExampleOrdererGenesis -outputBlock ./channel-artifacts/example_genesis.block

该命令会在/opt/gopath/src/tk/bin/channel-artifacts目录下生成一个genesis.block文件,根据官方demo中的configtx.yaml文件描述,该文件名由于未知原因,不得命名为order.genesis.block。

完成命令后的视图如下:

具体官方指定方案截图如下,可参考官网实现:

6.5、生成channel源文件

根据6.3中配置文件的描述,我们将生成的channel源为ExampleChannel。

本步骤将生成channel.tx文件,具体执行命令如下:

./bin/configtxgen -profile ExampleChannel -outputCreateChannelTx ./channel-artifacts/example_channel.tx -channelID channel01

完成命令后的视图如下:

按照官方给定的方案,执行该方法前可以先指定channel的环境变量,如下视图:

上图官方描述的具体执行命令如下:

 export CHANNEL_NAME=mychannel

 # this file contains the definitions for our sample channel
../bin/configtxgen -profile ExampleChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

该步骤最终执行结果视图如下:

6.6、生成channel下节点集合认证文件

根据6.3中配置文件的描述,我们将生成的channel源为ExampleChannel。

本步骤将生成channel.tx文件,具体执行命令如下:

./bin/configtxgen -profile ExampleChannel -outputAnchorPeersUpdate ./channel-artifacts/DEMOMSPanchors.tx -channelID channel01 -asOrg DemoMSP

完成命令后的视图如下:

具体官方指定方案截图如下,可参考官网实现:

最终我们可以在channel-artifacts目录下看到成功创建了TKMSPanchors.tx文件,如下视图:

【注:请无视这其中目录等名称的一些小细节,这一章主要是讲述如何通过官方给定的二进制文件来生成我们需要的生产证书等配置资源】

Hyperledger Fabric 1.0 从零开始(八)——Fabric多节点集群生产部署的更多相关文章

  1. Hyperledger Fabric 1.0 从零开始(九)——Fabric多节点集群生产启动

    7:Fabric多节点集群生产启动 7.1.多节点服务器配置 在生产环境上,我们沿用4.1.配置说明中的服务器各节点配置方案. 我们申请了五台生产服务器,其中四台服务器运行peer节点,另外一台服务器 ...

  2. 生产环境elasticsearch5.0.1和6.3.2集群的部署配置详解

    线上环境elasticsearch5.0.1集群的配置部署 es集群的规划: 硬件: 7台8核.64G内存.2T ssd硬盘加1台8核16G的阿里云服务器 其中一台作为kibana+kafka连接查询 ...

  3. Hyperledger Fabric 1.0 从零开始(一)——吐槽

    在HyperLedger/Fabric发布0.6的时候,公司就已经安排了一个团队研究这一块,后来也请IBM的专家组过来培训了一批人,不幸的是,这批人后来全走了,然后没过多久1.0就发布了.自从2017 ...

  4. Hyperledger Fabric 1.0 从零开始(一)

    在HyperLedger/Fabric发布0.6的时候,公司就已经安排了一个团队研究这一块,后来也请IBM的专家组过来培训了一批人,不幸的是,这批人后来全走了,然后1.0就发布了.自从2017年7月H ...

  5. Hyperledger Fabric 1.0 从零开始(十三)——orderer分布式方案

    简述 在搭建HyperLedger Fabric环境的过程中,我们会用到一个configtx.yaml文件(可参考Hyperledger Fabric 1.0 从零开始(八)——Fabric多节点集群 ...

  6. Hyperledger Fabric 1.0 从零开始(三)——环境构建(内网/准离线)

    有公网环境的服务器可以直接看 Hyperledger Fabric 1.0 从零开始(二)--环境构建(公网) ,本篇内容与上篇相似,只不过环境搭建需要在内网下,也就是网络被限制的情况下. 1:环境构 ...

  7. Hyperledger Fabric 1.0 从零开始(二)——环境构建(公网)

    1:环境构建 在本文中用到的宿主机环境是Centos ,版本为Centos.x86_647.2,通过Docker 容器来运行Fabric的节点,版本为v1.0.因此,启动Fabric网络中的节点需要先 ...

  8. Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用【补充】

    在 Hyperledger Fabric 1.0 从零开始(十二)--fabric-sdk-java应用 中我已经把官方sdk具体改良办法,即使用办法发出来了,所有的类及文件都是完整的,在文章的结尾也 ...

  9. Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用

    Hyperledger Fabric 1.0 从零开始(十)--智能合约 Hyperledger Fabric 1.0 从零开始(十一)--CouchDB 上述两章,最近网上各路大神文章云集,方案多多 ...

随机推荐

  1. Android中的文件下载——DownLoadManager

    一.问题概述 在android开发中,经常会使用到文件下载的功能,比如app版本更新等.在api level 9之后,android系统为我们提供了DownLoadManager类,这是android ...

  2. 利用OpenCms9提供的模块创建新站点

    OpenCms 9中提供b一个Demo,Demo使用了alkacon的bootstrap模板.如果已经安装了OpenCms 9,可以登陆http://localhost:8080/opencms/op ...

  3. pwnable.kr brainfuck之write up

    I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...

  4. javascript常用函数实现的收集

    收集了一些比较常用的javascript函数. 1.字符串长度截取 function cutstr(str, len) { var temp, icount = 0, patrn = /[^\x00- ...

  5. fzu1969 GCD Extreme 类似于uva10561

    Description Given the value of N, you will have to find the value of G. The meaning of G is given in ...

  6. Map中的entrySet();跟keySet();的区别是什么

    JAVA中entrySet();跟keySet();的区别是什么 红叶_书生 | 浏览 10397 次  2014-04-10 10:45 2014-04-10 10:49   最佳答案   keyS ...

  7. C++异常处理机制

    商业转载请联系作者获得授权,非商业转载请注明出处. 一.什么是异常 -异常是程序中可以检测到的不正常的情况. -示例:被0除.数组越界.存储空间不足等. -早期我们使用if来判断,然后进行相关处理,或 ...

  8. 一步步带你做vue后台管理框架(二)——上手使用

    系列教程<一步步带你做vue后台管理框架>第二课 github地址:vue-framework-wz 线上体验地址:立即体验 闲扯再多不会用也没白搭,这节课我来带大家直接上手框架,体验到简 ...

  9. Java缓存类的实际应用场景

    不要着迷于技术,应把注意力放到问题上. 一个普通的后台管理系统,一定会有参数配置.参数配置数据表和其他的数据表是不同的,它的操作基本都是查的操作.参数配置的这些数据信息是贯穿在整个项目中,那么把他们放 ...

  10. (一)Builder(建造者)模式

    我们一般在构建javabean的对象的时候通常有三种写法: 1.直接通过构造函数传参的方式设置属性,这种方法如果属性过多的话会让构造函数十分臃肿,而且不能灵活的选择只设置某些参数. 2.采用重叠构造区 ...