如何解决Hyperledger Fabric 从 levelDB 切换到 couchDB
我在从 levelDB 切换到 couchDB 作为状态数据库时遇到问题。我正在使用 hyperledger 示例存储库中的测试网络,并且编辑了 docker 文件夹中的 tags
文件和 config 文件夹中的 docker-compose-couch.yaml
文件。
这些都是我所做的更改,但是当我启动网络时,它仍然使用 leveldb。core.yaml
core.yaml:
Starting nodes with CLI timeout of '5' tries and CLI delay of '3' seconds and using database 'leveldb'
docker-compose-couch.yaml:
ledger:
blockchain:
state:
# stateDatabase - options are "goleveldb","CouchDB"
# goleveldb - default state database stored in goleveldb.
# CouchDB - store state database in CouchDB
stateDatabase: CouchDB
# Limit on the number of records to return per query
totalQueryLimit: 100000
couchDBConfig:
# It is recommended to run CouchDB on the same server as the peer,and
# not map the CouchDB container port to a server port in docker-compose.
# Otherwise proper security must be provided on the connection between
# CouchDB client (on the peer) and server.
couchDBAddress: 127.0.0.1:5984
# This username must have read and write authority on CouchDB
username: ${CouchDbUser}
# The password is recommended to pass as an environment variable
# during start up (eg CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD).
# If it is stored here,the file must be access control protected
# to prevent unintended users from discovering the password.
password: ${CouchDbPw}
# Number of retries for CouchDB errors
maxRetries: 3
# Number of retries for CouchDB errors during peer startup.
# The delay between retries doubles for each attempt.
# Default of 10 retries results in 11 attempts over 2 minutes.
maxRetriesOnStartup: 10
# CouchDB request timeout (unit: duration,e.g. 20s)
requestTimeout: 35s
internalQueryLimit: 1000
maxBatchUpdateSize: 1000
warmIndexesAfterNBlocks: 1
createGlobalChangesDB: false
cacheSize: 64
唯一运行的 docker 容器是一个排序节点和两个对等节点。
编辑:我刚刚在一个全新的测试网络上做了同样的步骤,它仍然使用 leveldb 作为状态数据库
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
version: '2'
networks:
test:
services:
couchdb0:
container_name: couchdb0
image: couchdb:3.1.1
# 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=${CouchDbUser}
- COUCHDB_PASSWORD=${CouchDbPw}
# 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=${CouchDbUser}
- CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=${CouchDbPw}
depends_on:
- couchdb0
couchdb1:
container_name: couchdb1
image: couchdb:3.1.1
# 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=${CouchDbUser}
- COUCHDB_PASSWORD=${CouchDbPw}
# 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=${CouchDbUser}
- CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=${CouchDbPw}
depends_on:
- couchdb1
解决方法
根据文档https://hyperledger-fabric.readthedocs.io/en/release-2.3/couchdb_as_state_database.html:
The database cannot be converted at a later time.
,
我刚刚通过在 ./network.sh up 命令中使用 -s 标志找到了解决我的问题的方法。
/network.sh up -s couchdb
我不确定这是否是启动 CouchDB 的预期方式,或者在 core.yaml 文件中将其定义为默认状态数据库时是否应该自动启动。但这绝对解决了我的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。