Ubuntu 部署 Hyperledger Fabric 1.4.2

Ubuntu 部署 Hyperledger Fabric 1.4.2

1 前言

Hyperledger fabric的fabric-sample运行需要三样东西:

1 fabric-sample工程

2 fabric网络的docker images

  主要有八个:hyperledger/fabric-javaenv、hyperledger/fabric-ca、hyperledger/fabric-tools、hyperledger/fabric-ccenv、hyperledger/fabric-orderer、hyperledger/fabric-peer、hyperledger/fabric-zookeeper、hyperledger/fabric-kafka

3 可执行二进制文件

  主要是两个:hyperledger-fabric-ca-linux-amd64-1.4.2.tar.gz、

hyperledger-fabric-linux-amd64-1.4.2.tar.gz


从fabric1.4.1版本开始,fabric支持raft共识,1.4.0版本以前是kafka共识,其实在0.6版本以前fabric是支持BFT共识的。

从kafka共识向raft共识演进主要原因有两点:

1 kafka运维不方便

  0.6版本fabric是基于BFT的共识,但是遇到了一些性能问题,后面采用了kafka共识。fabric前期基于kafka,是一种简单粗暴实现方法,主要考虑的是快速实现,没有考虑运维部署、易用的成本

[if !supportLists]l   [endif]需要同时维护zk集群和kafka集群,其中zk集群需要至少需要3个节点,kafka至少需要4个节点

[if !supportLists]l   [endif]zk集群和kafka集群,会保存日志几个小时(可配置),集群异常重启,每个节点的日志有所不同,有时会造成 排序节点异常

[if !supportLists]l   [endif]排序节点同时需要一批组织维护,需要构建一个 order集群网络,并持久化账本

[if !supportLists]l   [endif]整个排序集群,部署起来参数非常多,不易维护

[if !supportLists]l   [endif]kafka和zookeeper的设计不适用于大型网络

[if !supportLists]l   [endif]在kafka共识模式中,orderer与orderer之间不会互相直接建立连接,而是与kafka连接

2 raft为未来平滑演进fabric

BFT共识做准备

raft 和 bft是未来的趋势,raft和bft都会部署在orderer节点上,两者网络架构一样,可以支持未来平滑演进

[if !supportLists]l   [endif]在可信的环境下,基于性能的考虑,大家乐于考虑使用raft 

[if !supportLists]l  [endif]kafka缺乏信任的基础,选择使用bft,联盟链的节点有限,性能也不会是大的问题


2 前期准备

系统软件源改为 aliyun

       方法:进入system setting   然后点击software and update,修改download from

[if !vml]

[endif]

安装vim          sudo apt-get install vim

安装git            sudo apt-get install git

安装curl          sudo apt-get install curl

安装wget        sudo apt-get install wget


安装 ssh

sudo apt-get

update

sudo apt-get

install ssh

3 环境准备

[if !supportLists]·        [endif]安装go1.11 以及以上版本

[if !supportLists]·        [endif]安装docker

17.06.2-ce 以及以上版本

[if !supportLists]·        [endif]安装docker-compose 1.14.0以及以上版本

[if !supportLists]·        [endif]git 拉下fabric-sample 项目

[if !supportLists]·        [endif]下载docker

image镜像

3.1 GO安装

3.1.1下载压缩包  

无法翻墙 可以去这个网站,

https://studygolang.com/dl

cd ~ 

wget https://studygolang.com/dl/golang/go1.12.1.linux-amd64.tar.gz    //下载安装go 1.12.1

tar -zxvf go1.12.1.linux-amd64.tar.gz -C/usr/local    //解压

3.1.2 配置环境变量

sudo gedit /etc/profile, 追加以下配置到环境变量

export GOROOT=/usr/local/go

export PATH=$PATH:/usr/local/go/bin

export  GOPATH=/opt/go

export  PATH=$PATH:/opt/go/bin

source /etc/profile //立即适应新环境

测试

输入 go version,成功查看版本信息杂表示配置成功。

3.2 安装Docker-CE

1 如果已经安装docker,但是没有docker 17.06.2-ce 以及以上版本

sudo apt-getremove docker docker-engine docker.io  //先卸载

2 前置工作

sudo apt-get

updatesudo apt-get

install apt-transport-https ca-certificates curl software-properties-commoncurl -fsSL

https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

3 加入apt仓库中

sudo

add-apt-repository \

   "deb [arch=amd64]https://download.docker.com/linux/ubuntu \

   $(lsb_release -cs) \

   stable"sudo apt-get

update

4 安装 Docker-ce

sudo apt-get

install docker-ce

5 添加阿里云的docker hub镜像

sudo mkdir

-p /etc/docker

sudo gedit /etc/docker/daemon.json

6 将下列内容写入deamon.json文件中,并保存退出

{

 "registry-mirrors":["https://obou6wyb.mirror.aliyuncs.com"]

}

7 接下来执行

sudo

systemctl daemon-reload

sudo

systemctl restart docker

8 将当前用户添加到 Docker

Group(支持不使用 sudo 执行 docker 命令)

sudo usermod-aG docker xxx   (xxx为当前用户名)

sudo chmod

-R 777 /var/run/docker.sock

9 测试

docker version

3.3 安装Docker-Compose

1 安装

sudo apt-get

install python-pip

sudo pip

install docker-compose

2 测试

docker-compose

version

4下载 fabric 及其镜像

4.1 创建并进入工作目录

mkdir -p

$GOPATH/src/github.com/hyperledger/

cd

$GOPATH/src/github.com/hyperledger/

4.2 克隆源码

git clone

https://github.com/hyperledger/fabric.git

cd fabric

git checkout

v1.4.2

4.3 下载镜像和fabric-samples和二进制文件

cd $GOPATH/src/github.com/hyperledger/fabric/scripts/


执行scripts目录中的bootstrap.sh脚本会自动下载fabric-samples和fabric镜像

./bootstrap.sh1.4.2 1.4.2 0.4.15  //脚本的使用方法:bootstrap.sh [Fabric版本 [CA版本 [第三方版本]]] [选项]


由于镜像较大,此过程需要较长时间完成。脚本完成后会发现当前目录有了fabric-samples目录,之后执行:

docker

images

当出现下列内容时说明镜像部署成功:

hyperledger/fabric-javaenv     1.4.2               1cd707531ce7        4 weeks ago         1.76GB

hyperledger/fabric-javaenv     latest              1cd707531ce7        4 weeks ago         1.76GB

hyperledger/fabric-ca          1.4.2               f289675c9874        4 weeks ago         253MB

hyperledger/fabric-ca          latest              f289675c9874        4 weeks ago         253MB

hyperledger/fabric-tools       1.4.2               0abc124a9400        4 weeks ago         1.55GB

hyperledger/fabric-tools       latest              0abc124a9400        4 weeks ago         1.55GB

hyperledger/fabric-ccenv       1.4.2               fc0f502399a6        4 weeks ago         1.43GB

hyperledger/fabric-ccenv       latest              fc0f502399a6        4 weeks ago         1.43GB

hyperledger/fabric-orderer     1.4.2               362021998003        4 weeks ago         173MB

hyperledger/fabric-orderer     latest              362021998003        4 weeks ago         173MB

hyperledger/fabric-peer        1.4.2               d79f2f4f3257        4 weeks ago         178MB

hyperledger/fabric-peer        latest              d79f2f4f3257        4 weeks ago         178MB

hyperledger/fabric-zookeeper   0.4.15              20c6045930c8        5 months ago        1.43GB

hyperledger/fabric-zookeeper   latest              20c6045930c8        5 months ago        1.43GB

hyperledger/fabric-kafka      0.4.15              b4ab82bbaf2f        5 months ago        1.44GB

hyperledger/fabric-kafka       latest              b4ab82bbaf2f        5 months ago        1.44GB

5 快速部署网络

5.1 复制二进制文件

将二进制文件复制到 usr/local/bin 目录

cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/bin

sudo cp -r .

/usr/local/bin

这样就可以到处使用这些可执行二进制文件了。可以看到8个二进制文件

configtxgen   cryptogen  fabric-ca-client  orderer

configtxlator discover   idemixgen         peer

[if !vml]

[endif]

这几个二进制文件主要是从hyperledger-fabric-ca-linux-amd64-1.4.2.tar.gz和hyperledger-fabric-linux-amd64-1.4.2.tar.gz解压后得到的


如果下载缓慢,可以在百度云盘下载

https://pan.baidu.com/s/1YfSwjrEybfozhqFYw7yCPA

5.2 启动和测试网络

cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network

./byfn.sh -mgenerate -o etcdraft  //使用raft共识

./byfn.sh up-o etcdraft  //使用raft共识


启动和测试日志:

[if !vml]

[endif]

5.3 关闭网络

./byfn.sh down

6 解释bootstrap.sh

6.1 脚本的使用方法

bootstrap.sh [Fabric版本 [CA版本 [第三方版本]]] [选项]

6.2 bootstrap.sh做了什么

bootstrap主要是安装sample ,fabric 网络的二进制文件,以及 docker 镜像(Install Samples, Binaries and Docker Images)

打开 bootstrap.sh 文件 大致查看以下内容

[if !supportLists]·        [endif]dockerFabricPull: 下载 fabric-peer fabric-orderer

fabric-ccenv fabric-javaenv fabric-tools 镜像

[if !supportLists]·        [endif]dockerThirdPartyImagesPull: 下载 couchdb kafka zookeeper 镜像

[if !supportLists]·        [endif]dockerCaPull: 下载 fabric-ca 镜像

[if !supportLists]·        [endif]samplesInstall: git clone -b master https://github.com/hyperledger/fabric-samples.git

[if !supportLists]·        [endif]binariesInstall: 安装 hyperledger-fabric

hyperledger-fabric-ca 二进制

总结:

if [ "$SAMPLES" == "true" ]; then

  echo

  echo "Installing hyperledger/fabric-samples

repo"

  echo

  samplesInstall

fi

if [ "$BINARIES" == "true" ]; then

  echo

  echo "Installing Hyperledger Fabric

binaries"

  echo

  binariesInstall

fi

if [ "$DOCKER" == "true" ]; then

  echo

  echo "Installing Hyperledger Fabric docker

images"

  echo

  dockerInstall

fi

1. 安装hyplerledger fabric-sample

2. 安装hyplerledger fabric binaries

文件介绍类型依赖

peer账本(对等)节点程序,负责维护账本数据,执行链码服务core.yaml

orderer共识服务程序,负责打包交易,使用通道订阅给其他账本节点服务orderer.yaml

cryptogen生成 x509标准的证书以及密钥工具crypto-config.yaml

configtxgen生成共识服务启动以及通道创建所需配置数据工具configtx.yaml

configtxlator用来将通道配置信息转换为可读形式工具

discoverfabric discovery 服务的命令行客户端服务

fabric-ca-clienthyperledger fabric 证书认证客户端工具

idemixgenHyperledger Fabric 生成关键材料时被用于身份混淆MSP的工具工具

3. 安装hyplerledger fabric dockerimages

打开 fabric-samples/bin/get-docker-images.sh 可以发现,总共下载的镜像包括如下:

镜像介绍

fabric-peer账本(对等)节点的镜像

fabric-orderer共识服务节点的镜像

fabric-ccenv链码环境镜像

fabric-tools工具库镜像

fabric-kafka分布式消息队列镜像

fabric-zookeeper分布式协调服务镜像

fabric-couchdb状态存储库镜像

fabric-javaenv


6.3 有多种方法可以运行bootstrap.sh脚本

1 在hyperledger/fabric/scripts下可以找到

$GOPATH/src/github.com/hyperledger/fabric/scripts


2 通过https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh

自动安装脚本的url为https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh,缩略后的url为http://bit.ly/2ysbOFE,如果后面缩略的网址打不开,请使用前者代替。


curl -sSL

https://bit.ly/2ysbOFE | bash -s -- 1.4.2 1.4.2 0.4.15


3 将https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh复制到本地使用

curl -sS

https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh

-o ./scripts/bootstrap.sh

# Change file mode to executable

chmod +x ./scripts/bootstrap.sh

# Download binaries and docker images

./scripts/bootstrap.sh

1.4.2 1.4.2 0.4.15


7 二进制可执行文件

7.1 通过bootstrap.sh安装

Bootstrap.sh首先会从github上将fabric-samples下载下来,然后会从https://nexus.hyperledger.org下载可执行二进制文件。如下图,并解压到fabric-samples/bin目录下

[if !vml]

[endif]

https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.4.2/hyperledger-fabric-linux-amd64-1.4.2.tar.gz


https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/linux-amd64-1.4.2/hyperledger-fabric-ca-linux-amd64-1.4.2.tar.gz


这两个文件不是很好下载,可以通过windows代理下载,下载后手动放入$GOPATH/src/hyperledger/fabric/scripts/fabric-samples目录下,然后回到scripts目录下继续执行bootstrap.sh脚本


7.2 编译安装

进入hyperledger/fabric目录,自行编译这些工具:make cryptogen configtxgen configtxlator peer orderer peer-docker

orderer-docker tools-docker,在.build/bin/目录下就是我们需要的工具,编译也会生成docker images

参考:

1https://hyperledgercn.github.io/hyperledgerDocs/build_network_zh/

2https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html

3 https://hyperledger-fabric.readthedocs.io/en/release-1.4/prereqs.html

4 https://blog.csdn.net/smallone233/article/details/86569536

5 https://www.cnblogs.com/llongst/p/9482038.html

6 一个动画演示raft算法

http://thesecretlivesofdata.com/raft/ 

7 https://blog.csdn.net/sinat_36742186/article/details/88390019

8 https://blog.csdn.net/sinat_36742186/article/details/80809954

9 https://blog.csdn.net/diligent_lee/article/details/79098302

10 https://blog.csdn.net/so5418418/article/details/78355868

11https://www.cnblogs.com/informatics/p/8276172.html

12 https://www.jianshu.com/p/e5ec0b4e8075

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容