前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fabric 1.4.1基于raft的排序服务

Fabric 1.4.1基于raft的排序服务

作者头像
Zeal
发布2020-11-11 16:08:13
1K0
发布2020-11-11 16:08:13
举报
文章被收录于专栏:Hyperledger实践Hyperledger实践

Fabric 1.4.1引入Raft排序服务, 运维界比较出名的etcd实现的orderer服务。后生可畏, etcd是中国一个年轻人的作品, 实现了raft协议, 在k8s等容器化, 虚拟化, 集群化有官方应用。etcd也是go语言编写, fabric开窍了, 直接把etcd和orderer整合了, 相比kafka/zookeeper的排序服务,搭建简单多了,也比kafka这些省了很多资源(kafka默认开的堆是2GB..), 所以个人是强烈推荐使用,尽量出来不久,但在1.4LTS维护, 是有保障的。

快速看下1.4.1的fabric-samples/first-network里面的raft排序服务如果使用。

运行./byfn.sh up -o etcdraft

创始块创建命令行是

configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block

查看configtx.yaml对应内容

SampleMultiNodeEtcdRaft:

<<: *ChannelDefaults

Capabilities:

<<: *ChannelCapabilities

Orderer:

<<: *OrdererDefaults

OrdererType: etcdraft

EtcdRaft:

Consenters:

- Host: orderer.example.com

Port: 7050

ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt

ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt

- Host: orderer2.example.com

Port: 7050

ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt

ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt

- Host: orderer3.example.com

Port: 7050

ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt

ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt

- Host: orderer4.example.com

Port: 7050

ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt

ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt

- Host: orderer5.example.com

Port: 7050

ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt

ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt

Addresses:

- orderer.example.com:7050

- orderer2.example.com:7050

- orderer3.example.com:7050

- orderer4.example.com:7050

- orderer5.example.com:7050

Organizations:

- *OrdererOrg

Capabilities:

<<: *OrdererCapabilities

Application:

<<: *ApplicationDefaults

Organizations:

- <<: *OrdererOrg

Consortiums:

SampleConsortium:

Organizations:

- *Org1

- *Org2

主要是指定了ClientTLSCert, ServerTLSCert

对应的docker-compse文件是docker-compose-etcdraft2.yaml, 基于orderer-base覆盖

orderer-base:

image: hyperledger/fabric-orderer:$IMAGE_TAG

environment:

- FABRIC_LOGGING_SPEC=INFO

- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0

- ORDERER_GENERAL_GENESISMETHOD=file

- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block

- ORDERER_GENERAL_LOCALMSPID=OrdererMSP

- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp

# enabled TLS

- 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_KAFKA_TOPIC_REPLICATIONFACTOR=1

- ORDERER_KAFKA_VERBOSE=true

- 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/fabric

command: orderer

额外的一些etcd配置参数看不到, 我们去启动的orderer容器的配置文件看下

docker exec -it -e LINES=(tput lines) -e COLUMNS=(tput cols) orderer.example.com bash

查看配置文件/etc/hyperledger/fabric/configtx.yaml,涉及的配置内容, awesome, options里面有etcd的配置项, 我们应该是在生成创始块的时候才能覆盖。

# EtcdRaft defines configuration which must be set when the "etcdraft"

# orderertype is chosen.

EtcdRaft:

# The set of Raft replicas for this network. For the etcd/raft-based

# implementation, we expect every replica to also be an OSN. Therefore,

# a subset of the host:port items enumerated in this list should be

# replicated under the Orderer.Addresses key above.

Consenters:

- Host: raft0.example.com

Port: 7050

ClientTLSCert: path/to/ClientTLSCert0

ServerTLSCert: path/to/ServerTLSCert0

- Host: raft1.example.com

Port: 7050

ClientTLSCert: path/to/ClientTLSCert1

ServerTLSCert: path/to/ServerTLSCert1

- Host: raft2.example.com

Port: 7050

ClientTLSCert: path/to/ClientTLSCert2

ServerTLSCert: path/to/ServerTLSCert2

# Options to be specified for all the etcd/raft nodes. The values here

# are the defaults for all new channels and can be modified on a

# per-channel basis via configuration updates.

Options:

# TickInterval is the time interval between two Node.Tick invocations.

TickInterval: 500ms

# ElectionTick is the number of Node.Tick invocations that must pass

# between elections. That is, if a follower does not receive any

# message from the leader of current term before ElectionTick has

# elapsed, it will become candidate and start an election.

# ElectionTick must be greater than HeartbeatTick.

ElectionTick: 10

# HeartbeatTick is the number of Node.Tick invocations that must

# pass between heartbeats. That is, a leader sends heartbeat

# messages to maintain its leadership every HeartbeatTick ticks.

HeartbeatTick: 1

# MaxInflightBlocks limits the max number of in-flight append messages

# during optimistic replication phase.

MaxInflightBlocks: 5

# SnapshotIntervalSize defines number of bytes per which a snapshot is taken

SnapshotIntervalSize: 20 MB

对应的orderer.yaml有一些配置,对etcd不熟, 需要研究下。

################################################################################

#

# Consensus Configuration

#

# - This section contains config options for a consensus plugin. It is opaque

# to orderer, and completely up to consensus implementation to make use of.

#

################################################################################

Consensus:

# The allowed key-value pairs here depend on consensus plugin. For etcd/raft,

# we use following options:

# WALDir specifies the location at which Write Ahead Logs for etcd/raft are

# stored. Each channel will have its own subdir named after channel ID.

WALDir: /var/hyperledger/production/orderer/etcdraft/wal

# SnapDir specifies the location at which snapshots for etcd/raft are

# stored. Each channel will have its own subdir named after channel ID.

SnapDir: /var/hyperledger/production/orderer/etcdraft/snapshot

把东西做简单是不简单的事情 , 给raft排序服务点赞。

最近华为事件,笔者深感纯做应用太被动,陆续的后面的分享方向是如何造轮子,和深挖源码实现,互勉吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hyperledger实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档