fabric 2.3系统通道

Orderer Without System Channel

为了简化创建通道的过程并提升通道的私密性和扩展性,2.3支持无系统通道创建应用通道的功能。

  • 不再需要系统通道:
  • 不再需要财团(Consortium):
  • 简化了排序节点的启动流程

目前2.3版本支持有系统通道和无系统通道两种模式的排序节点。

  • 如果是有系统通道的模式,那么是不支持channel joinchannel remove操作的,同样如果是使用solo模式或者kafka模式,两者也不支持。
  • 不支持混合模式,即不支持已经有了系统通道,又需要通过无系统通道来建立新的应用通道。这种情况需要按照原有的创建通道方法,或者需要先将系统通道移除。

osnadmin

在无系统通道的情况下,可以通过osnadmin命令来进行通道创建和移除操作。

开启osnadmin服务需要配置文件orderer.yaml中的相关项

General:    
    # Bootstrap method: The method by which to obtain the bootstrap block
    # system channel is specified. The option can be one of:
    #   "file" - path to a file containing the genesis block or config block of system channel
    #   "none" - allows an orderer to start without a system channel configuration
    BootstrapMethod: none 
    
################################################################################
#
#   Admin Configuration
#
#   - This configures the admin server endpoint for the orderer
#
################################################################################
Admin:
    # host and port for the admin server
    ListenAddress: 127.0.0.1:9443

    # TLS configuration for the admin endpoint
    TLS:
        # TLS enabled
        Enabled: false

        # Certificate is the location of the PEM encoded TLS certificate
        Certificate:

        # PrivateKey points to the location of the PEM-encoded key
        PrivateKey:

        # Most admin service endpoints require client authentication when TLS
        # is enabled. ClientAuthRequired requires client certificate authentication
        # at the TLS layer to access all resources.
        #
        # NOTE: When TLS is enabled, the admin endpoint requires mutual TLS. The
        # orderer will panic on startup if this value is set to false.
        ClientAuthRequired: true

        # Paths to PEM encoded ca certificates to trust for client authentication
        ClientRootCAs: []

################################################################################
#
#   Channel participation API Configuration
#
#   - This provides the channel participation API configuration for the orderer.
#   - Channel participation uses the ListenAddress and TLS settings of the Admin
#     service.
#
################################################################################
ChannelParticipation:
    # Channel participation API is enabled.
    Enabled: false

    # The maximum size of the request body when joining a channel.
    MaxRequestBodySize: 1 MB

其中

  • General.BootstrapMethod:将该字段设置为none,即代表排序节点将以无系统通道方式启动
  • Admin.ListenAddress:排序节点的Admin服务,之后使用osnadmin命令的时候需要联接到该服务上,配置格式为host:port
  • Admin.TLS.Enabled:排序节点Admin服务是否开启TLS,默认为false,但是建议设置为true
  • Admin.TLS.PrivateKey:排序节点Admin服务开启TLS时所使用的私钥文件路径
  • Admin.TLS.Certificate:排序节点Admin服务开启TLS时所使用的证书文件路径
  • Admin.TLS.ClientAuthRequired:排序节点Admin服务开启TLS时,是否需要开启客户端的双向验证。建议配置为true
  • Admin.TLS.ClientRootCAs:排序节点Admin服务开启TLS时,允许的客户端的根CA证书
  • ChannelParticipation.Enabled:使用无系统通道,该字段必须设置为true

可以在docker-compose中按如下配置

- ORDERER_GENERAL_BOOTSTRAPMETHOD=none
- ORDERER_ADMIN_LISTENADDRESS=0.0.0.0:9443
- ORDERER_ADMIN_TLS_ENABLED=true
- ORDERER_ADMIN_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
- ORDERER_ADMIN_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
- ORDERER_ADMIN_TLS_CLIENTAUTHREQUIRED=true
- ORDERER_ADMIN_TLS_CLIENTROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
- ORDERER_CHANNELPARTICIPATION_ENABLED=true

#ports:
#      - 9443:9443 #记得添加端口

客户端设置相关tls证书

export ADMIN_TLS_PRIVATE_KEY=./organizations/ordererOrganizations/example.com/users/Admin\@example.com/tls/client.key
export ADMIN_TLS_SIGN_CERT=./organizations/ordererOrganizations/example.com/users/Admin\@example.com/tls/client.crt
export OSN_TLS_CA_ROOT_CERT=./organizations/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem
export ORDERER_ADMIN_LISTENADDRESS=localhost:9443
  • osnadmin channel list: 显示orderer节点的通道列表
osnadmin channel list -o $ORDERER_ADMIN_LISTENADDRESS --ca-file $OSN_TLS_CA_ROOT_CERT --client-cert $ADMIN_TLS_SIGN_CERT --client-key $ADMIN_TLS_PRIVATE_KEY

结果示例

Status: 200
{
    "systemChannel": null,
    "channels": null
}

无系统通道下使用osnadmin创建应用通道

  1. 首先需要生成通道的genesis_block.pb文件

例如在configtx.yaml中配置

#加在configtx.yaml末尾,注意缩进
SampleAppGenesisEtcdRaft:
        <<: *ChannelDefaults
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2

使用configtxgen生成genesis_block.pb文件,注意这里-outputBlock,而不是-outputCreateChannelTx(之前用来生成创建通道的交易的命令)。

export FABRIC_CFG_PATH=../config
configtxgen -profile SampleAppGenesisEtcdRaft -outputBlock genesis_block.pb -channelID mychannel -configPath configtx/
  1. 使用osnadmin channel join将orderer节点加入到通道中
osnadmin channel join --channel-id mychannel  --config-block genesis_block.pb -o orderer.example.com:9443 --ca-file $OSN_TLS_CA_ROOT_CERT --client-cert $ADMIN_TLS_SIGN_CERT --client-key $ADMIN_TLS_PRIVATE_KEY

返回

Status: 201
{
    "name": "channel2",
    "url": "/participation/v1/channels/mychannel",
    "consensusRelation": "consenter",
    "status": "active",
    "height": 1
}

如果该应用通道需要有多个raft节点,需要逐一使用join命令来添加

  1. peer节点加入到通道中
peer channel fetch config -o orderer.example.com:7050 -c mychannel --tls --cafile $ORDERER_CA
peer channel join -b mychannel_config.block

orderer删除通道(是指单个节点)

  • 如果orderer节点是raft集群中的节点,则可以首先更新配置将该orderer节点从集群中移除
  • 使用osnadmin channel remove删除通道
osnadmin channel remove --channel-id mychannel -o orderer.example.com:9443 --ca-file $OSN_TLS_CA_ROOT_CERT --client-cert $ADMIN_TLS_SIGN_CERT --client-key $ADMIN_TLS_PRIVATE_KEY
  • 如果该orderer节点是该通道唯一的orderer节点,则该通道就会无法在接受新的交易

排序节点是否参与共识

  • 任何一个一个拥有通道读策略的排序节点,都可以通过osnadmin channel join加入到通道里,同步区块,如果其不参与raft共识,则它并不是一个consenter。
  • 通道配置中的etcd consenter中的排序节点才是会参与raft共识的节点。
  • 当需要新增一个raft节点的时候,可以考虑先使用osnadmin channel join加入到通道里,同步区块,等区块同步完成后,再更新通道配置将其变更为一个参与共识的consenter节点。

没有系统通道下的一些其它尝试

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

推荐阅读更多精彩内容