Обзор
В DLT Labs мы используем несколько технологий распределенного реестра, но, вероятно, наибольшее внимание уделяется Hyperledger Fabric.
Мы создаем продукты корпоративного класса. За два года разработки на этой платформе я столкнулся с некоторыми уникальными проблемами, связанными с масштабом и дополнительными требованиями к крупномасштабным системам.
Мы думали, что поделимся одной такой ситуацией, в которой мы решили ввести кластерную базу данных состояний для наших сверстников Fabric и показать заинтересованным разработчикам, как это было сделано.
Продукт уже использовал Apache CouchDB в качестве своего состояния. база данных в Fabric, чтобы множество других компонентов могли напрямую запрашивать регистр и получать более широкие возможности запросов. Нам нужна была высокая доступность базы данных для этих других компонентов и чтобы создаваемая ими нагрузка не влияла на доступность однорангового узла. Мы предполагали, что добавление дополнительных узлов CouchDB при посредничестве балансировщика нагрузки может сделать это.
Мы также увидели дополнительное преимущество в том, что мы могли масштабировать базу данных состояний, просто добавляя или удаляя узлы, без влияния на доступность базы данных или однорангового узла, который на нее полагался - что было невозможно с одноузловая БД состояний.
Давайте посмотрим, как мы настроили этот кластер CouchDB и начнем использовать его в сети Hyperledger Fabric.
Эту настройку кластера также можно использовать, если мы намерены обеспечить поддержку нескольких регионов, сохраняя разные узлы кластера CouchDB в разных регионах, что в конечном итоге поможет обеспечить более высокую доступность.
Поскольку в Hyperledger Fabric мы запускаем узлы как контейнеры, мы будем настраивать кластер CouchDB с использованием контейнеризации.
Этот процесс состоит из 5 основных частей:
- Организация необходимых файлов конфигурации
- Настройка кластера Couch DB
- Проверка настройки кластера CouchDB
- Важные параметры конфигурации
- Использование кластера CouchDB в Hyperledger Fabric
Начнем.
1. Организация необходимых файлов конфигурации
Это файл docker-compose, который нам нужно использовать для настройки кластера CouchDB:
version: ‘3’ networks: fabric: external: name: example services: couchdb1.example.com: container_name: couchdb1.example.com image: hyperledger/fabric-couchdb:amd64–0.4.15 environment: - COUCHDB_SECRET=0123456789 - NODENAME=couchdb1.example.com - ERL_FLAGS=-setcookie “brumbrum” - COUCHDB_QUERY_SERVER_JAVASCRIPT=”/usr/bin/couchjs -S 8589934592 /usr/share/server/main.js” volumes: - /data/couchdb1:/opt/couchdb/data ports: - “5001:5984” networks: - fabric couchdb2.example.com: container_name: couchdb2.example.com image: hyperledger/fabric-couchdb:amd64–0.4.15 environment: - COUCHDB_SECRET=0123456789 - NODENAME=couchdb2.example.com - ERL_FLAGS=-setcookie “brumbrum” - COUCHDB_QUERY_SERVER_JAVASCRIPT=”/usr/bin/couchjs -S 8589934592 /usr/share/server/main.js” volumes: - /data/couchdb2:/opt/couchdb/data ports: - “5002:5984” networks: - fabric couchdb3.example.com: container_name: couchdb3.example.com image: hyperledger/fabric-couchdb:amd64–0.4.15 environment: - COUCHDB_SECRET=0123456789 - NODENAME=couchdb3.example.com - ERL_FLAGS=-setcookie “brumbrum” - COUCHDB_QUERY_SERVER_JAVASCRIPT=”/usr/bin/couchjs -S 8589934592 /usr/share/server/main.js” volumes: - /data/couchdb3:/opt/couchdb/data ports: - “5003:5984” networks: - fabric
Для начала нам нужно запустить следующую команду в том же месте, где находится файл yaml.
docker-compose up -d
Мы можем проверить это, запустив docker ps. Результат должен выглядеть так:
2. Настройка кластера CouchDB
Для завершения настройки диванного кластера нам необходимо выполнить следующие шаги:
›› Шаг 1: Чтобы настроить CouchDB в кластере, нам нужно открыть веб-интерфейс Fauxton. Доступ к нему можно получить по этой ссылке.
›› Шаг 2. Мы нажимаем кнопку Настроить кластер.
После этого мы перейдем на страницу, где нам нужно ввести имя пользователя и пароль узлов кластера CouchDB.
Здесь мы используем admin как имя пользователя и пароль (что вы, конечно, не сделаете на практике).
›› Шаг 3. Мы указываем количество узлов, которые мы настраиваем для этого кластера. Здесь мы дали 3.
В опции удаленного хоста мы вводим имя двух других узлов. Например, если мы открыли интерфейс Fauxton couchDB1, мы должны предоставить имена двух других узлов.
›› Шаг 4. Нажмите кнопку Настроить кластер, и Фокстон завершит настройку кластера.
3. Проверка настройки кластера CouchDB
Чтобы проверить, завершена ли настройка кластера и все ли узлы синхронизированы, нам необходимо выполнить следующие команды:
›› Шаг 1. Чтобы проверить членство в кластере, нам нужно нажать конечную точку _membership:
curl http://username:password@localhost:5984/_membership
Вот пример ожидаемого результата:
{"all_nodes": ["couchdb@couchdb1","[email protected]","[email protected]"],"cluster_nodes":["couchdb@couchdb1","[email protected]","[email protected]"]}
›› Шаг 2: Чтобы проверить состояние настройки кластера, нам нужно нажать конечную точку _cluster_setup.
curl http://admin:admin@localhost:5984/_cluster_setup
Вот как должен выглядеть ожидаемый результат:
{"state":"cluster_finished"}
Мы также можем проверить состояние настройки из интерфейса Fauxton:
4. Важные параметры конфигурации
В файле yaml вы, вероятно, заметили ряд параметров, которые мы использовали для настройки кластера.
Вот некоторые из важных моментов, которые необходимо понять:
COUCHDB_SECRET
Устанавливает секретный идентификатор, который, как ожидается, будет использоваться всеми узлами кластера CouchDB. Путь к этому`/opt/couchdb/etc/local.d/docker.ini
NODENAME
Внутри контейнера нам нужно задать имя узла CouchDB. Читается какcouchdb@${NODENAME}`.
Путь к этому`/opt/couchdb/etc/vm.args`
.ERL_FLAGS
Этот ключ также является идентификатором, который будет общим для всех узлов в кластере CouchDB. Когда какой-либо узел пытается повторно присоединиться к кластеру, значение этого ключа подтверждает, был ли он изначально частью кластера или нет.COUCHDB_QUERY_SERVER_JAVASCRIPT
По умолчанию выделение памяти времени выполнения для обработки запросов с помощью параметра couchjs установлено на 64 МБ.
Однако мы можем увеличить его значение в соответствии с нашим вариантом использования, изменив значение этой переменной среды.
5. Использование кластера CouchDB в Hyperledger Fabric
Мы должны обновить значения следующих переменных env в следующем одноранговом контейнере: CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS
Вместо того, чтобы указывать на один узел CouchDB, он должен указывать на все, что используется для балансировки нагрузки трафика в кластере CouchDB, например балансировщик нагрузки HAProxy® или URL-адрес AWS Elastic Load Balancer.
Эту кластерную настройку также можно использовать, если мы намерены обеспечить поддержку нескольких регионов. Мы можем хранить разные узлы кластера CouchDB в разных регионах (например, в облачном развертывании).
В конечном итоге это помогает нам обеспечивать более высокую доступность. Схематическое изображение всей установки выглядит так:
Заключение
В этой статье мы рассмотрели, как настроить базу данных состояний Hyperledger Fabric в качестве кластера CouchDB, используя контейнеризацию для поддержки требований прямого запроса и увеличения нагрузки запросов в корпоративном сценарии с высокой доступностью для всех потребителей.
Мы надеемся, что вы нашли эту тему и ее объяснение интересными и полезными.
Hyperledger Fabric - это проект, поддерживаемый Linux Foundation®, и Hyperledger является его зарегистрированным товарным знаком. Apache CouchDB и CouchDB являются товарными знаками Apache Software Foundation. AWS является товарным знаком Amazon.com, Inc. или ее дочерних компаний в США и / или других странах. Docker является товарным знаком или зарегистрированным товарным знаком Docker, Inc. в США и / или других странах.
DLT Labs является товарным знаком DLT Global, Inc.
Автор - Дипак Сингх, DLT Labs ™
Об авторе: Дипак в настоящее время работает с командой DL Tools и любит разбираться в коде и алгоритмах на элементарном уровне.