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