首页 > 数据库 >Hyperledger Fabric开发之启动CouchDB作为状态数据库

Hyperledger Fabric开发之启动CouchDB作为状态数据库

时间:2023-09-16 17:04:03浏览次数:87  
标签:CORE COMPOSE Fabric CouchDB LEDGER STATE Hyperledger COUCHDBCONFIG


测试环境

  • Mac Catalina
  • Docker Desktop 3.6.0
  • Hyperledger Fabric 2.5.4
  • CouchDB 3.3.2

简单分析

当前版本的Fabric 2.5.4默认支持的LevelDB仅能够实现存储简单的键值对数据,并且LevelDB与Peer节点并存于同一个操作系统进程中。

CouchDB适用于存储JSON文件,并支持富查询和对更多数据类型的操作。但是,CouchDB进程与Peer节点进程是独立存在的,每个Peer节点进程都对应一个CouchDB进程。

因此,在本文中要使用CouchDB来替换LevelDB用作状态数据库,需要把它独立运行并进行手动配置。

幸运的是,Fabric的测试网络已经为我们作好了配置。接下来,我们把相关配置项分析一下。

重要声明:

当前下载安装的Hyperledger Fabric 2.5.4正好其生成测试配置网络时对应最新版本正式发行的CouchDB 3.3.2。我们注意到,我们独立下载安装的CouchDB 3.3.2正好与这里配置对应,不再需要修改。

1、Docker Compose中配置CouchDB服务

对应文件位于测试网络的路径位置是:test-network/compose,文件为:compose-couch.yaml。

内容如下:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

version: '3.7'

networks:
  test:
    name: fabric_test

services:
  couchdb0:
    container_name: couchdb0
    image: couchdb:3.3.2
    labels:
      service: hyperledger-fabric
    # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password
    # for CouchDB.  This will prevent CouchDB from operating in an "Admin Party" mode.
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=adminpw
    # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,
    # for example map it to utilize Fauxton User Interface in dev environments.
    ports:
      - "5984:5984"
    networks:
      - test
  peer0.org1.example.com:
    environment:
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
      # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD
      # provide the credentials for ledger to connect to CouchDB.  The username and password must
      # match the username and password set for the associated CouchDB.
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=admin
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=adminpw
    depends_on:
      - couchdb0

  couchdb1:
    container_name: couchdb1
    image: couchdb:3.3.2
    labels:
      service: hyperledger-fabric
    # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password
    # for CouchDB.  This will prevent CouchDB from operating in an "Admin Party" mode.
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=adminpw
    # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,
    # for example map it to utilize Fauxton User Interface in dev environments.
    ports:
      - "7984:5984"
    networks:
      - test
  peer0.org2.example.com:
    environment:
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984
      # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD
      # provide the credentials for ledger to connect to CouchDB.  The username and password must
      # match the username and password set for the associated CouchDB.
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=admin
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=adminpw
    depends_on:
      - couchdb1

注意上述默认配置中CouchDB用户名与密码及端口号(5984)。

2、在Peer服务中配置使用了CouchDB

另外,注意到上面配置默认定义了2个Peer服务。这两个服务分别为组织Org1和Org2定义了Peer节点运行的Docker容器。例如,peer0.org1.example.com的定义代码如下:

 

peer0.org1.example.com:
    environment:
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
      # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD
      # provide the credentials for ledger to connect to CouchDB.  The username and password must
      # match the username and password set for the associated CouchDB.
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=admin
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=adminpw
    depends_on:
      - couchdb0

下面,我们将以CouchDB选项启动Fabric测试网络。当然,首先要启动Docker。

第一步:启动Docker Desktop

第二步:以CouchDB选项启动Fabric测试网络

  1. 使用cd命令进入到test-network目录下
  2. 运行下列命令:
./network.sh up -s couchdb

在文件network.sh中有一个函数networkUp(),用于启动测试网络。

# Bring up the peer and orderer nodes using docker compose.
function networkUp() {
  checkPrereqs

  # generate artifacts if they don't exist
  if [ ! -d "organizations/peerOrganizations" ]; then
    createOrgs
  fi

  COMPOSE_FILES="-f compose/${COMPOSE_FILE_BASE} -f compose/${CONTAINER_CLI}/${CONTAINER_CLI}-${COMPOSE_FILE_BASE}"

  if [ "${DATABASE}" == "couchdb" ]; then
    COMPOSE_FILES="${COMPOSE_FILES} -f compose/${COMPOSE_FILE_COUCH} -f compose/${CONTAINER_CLI}/${CONTAINER_CLI}-${COMPOSE_FILE_COUCH}"
  fi

  DOCKER_SOCK="${DOCKER_SOCK}" ${CONTAINER_CLI_COMPOSE} ${COMPOSE_FILES} up -d 2>&1

  $CONTAINER_CLI ps -a
  if [ $? -ne 0 ]; then
    fatalln "Unable to start network"
  fi
}

只需要注意其中的几个变量定义:COMPOSE_FILE_BASE和COMPOSE_FILE_COUCH。

接下来,我们启动Google浏览器,导航地址:http://127.0.0.1:5984/_utils/#login,显示如下:

Hyperledger Fabric开发之启动CouchDB作为状态数据库_CouchDB

输入用户名:admin和密码:adminpw,此二值都是配置文件中默认值。实际开发中,肯定要进行修改!

登录成功后,显示CouchDB数据库管理界面,如下:

Hyperledger Fabric开发之启动CouchDB作为状态数据库_状态数据库_02




引用

https://blog.51cto.com/zhuxianzhong/7488553


标签:CORE,COMPOSE,Fabric,CouchDB,LEDGER,STATE,Hyperledger,COUCHDBCONFIG
From: https://blog.51cto.com/zhuxianzhong/7494563

相关文章

  • MAC Catalina通过Docker安装CouchDB 3.X
    第一步:启动DockerDesktop第二步:docker镜像下载CouchDBdockerpullcouchdb[注意]从官网上注意到当前CouchDB最新版本为3.3.2。根据参考文献提示,想直接从DockerHub上拉取CouchDB(默认为最新版本)。通过界面提示来看,下载正常。但是,接下来安装出现问题。第三步:运行CouchDB低版本的Couch......
  • Fabric 2.x 智能合约开发记录
    表象:Returnschemainvalid.requireditemsmustbeunique[recovered]虽然Fabricv2.2已经发布了很久了,但之前因为项目历史问题,一直使用的都是Fabricv1.4.8,所以智能合约也一直使用的都是github.com/hyperledger/fabric/core/chaincode/shim包。在合约开发过程中,我一般......
  • Fabric 2.X链码生命周期图解
    本文较全面介绍Fabric2.X开发中链码的生命周期全过程,并辅以图解。然后,总结了链码部署的典型场景。本文结论适合于从Fabric区块链从2.0到截止目前最新的2.5的各个版本。链码(Chaincode)是什么?链码(Chaincode),也称智能合约(是Ethereum区块链中的典型称呼),是一个用Go、Node.js或Java编写的......
  • HyperLedger Fabric基础:搭建Fabric测试网络(三)
    在本系列第二篇中,我们介绍了如何创建通道与在通道上启动链码的问题。本篇将探索如何使用Peer客户端与区域链网络通信。启动测试网络后,可以使用Peer节点CLI与网络进行交互。Peer节点CLI允许您从CLI调用已部署的智能合约、更新通道或安装和部署新的智能合约。确定当前我们仍处于test-......
  • HyperLedger Fabric基础:搭建Fabric测试网络(二)
    在本系列第一部分中,我们介绍了搭建Fabric测试网络的目的、前提,并对其主要组件作了简介。在本部分中,我们将继续搭建Fabric测试网络的过程。创建通道¶既然我们的机器上运行起了Peers节点和Ordering排序节点,我们就可以使用该脚本为Org1和Org2之间的事务创建一个Fabric通道(Channel)。通......
  • Fabric.js 元素选中状态的事件与样式
    本文简介带尬猴!你是否在使用Fabric.js时希望能在选中元素后自定义元素样式或选框(控制角和辅助线)的样式?如果是的话,可以放心往下读。本文将手把脚和你一起过一遍Fabric.js在对象元素选中后常用的样式设置。我将对象元素选中后的设置分成3类进行讲解:控制角辅助边其他样......
  • fabric.js 判断点击坐标是否在某个子元素内
     通过 containsPoint方法坐标是否在某个元素内constrect=newfabric.Rect({width:100,height:100,fill:'red',})canvas.add(rect);canvas.on('mousee:down',(event)=>{letpoint=newfabric.Point(event.e.offsetX,eve......
  • 【Azure Service Fabric】关于Service Fabric的相关问题
    问题一:ServiceFabric是否支持PrivateLink?在AzurePrivateEndpoint文档中,罗列出了Azure上支持PrivateLink的服务。ServiceFabric不在其中。AzurePrivateLinkavailability:https://learn.microsoft.com/en-us/azure/private-link/availability 问题二:是否可以Disable......
  • 【Azure Service Fabric】关于Service Fabric的相关问题
    问题一:ServiceFabric是否支持PrivateLink?在AzurePrivateEndpoint文档中,罗列出了Azure上支持PrivateLink的服务。ServiceFabric不在其中。AzurePrivateLinkavailability:https://learn.microsoft.com/en-us/azure/private-link/availability 问题二:是否可以Dis......
  • Fabric区块链浏览器(1)
    本文是区块链浏览器系列的第三篇,本文介绍区块链浏览器的主体部分,即区块数据的解析。这一版本的区块链浏览器是基于gin实现的,只提供三种接口:/block/upload:POST,上传Protobuf格式的区块数据文件/block/parse/:msgType:GET,根据msgType来解析上传的区块文件/block/update/:channel:P......