Настройка внешней БД Cassandra

По умолчанию AggreGate Server использует встроенный движок базы данных, который может поддерживать небольшие приложения. В случаях, когда вы разрабатываете сложное приложение, может потребоваться внешняя база данных или кластер баз данных.

В AggreGate для хранения данных используется NoSQL база данных Apache Cassandra , а также несколько различных движков баз данных для реляционного хранения и хранения данных “ключ-значение”. В следующем примере показано как развернуть экземпляр Cassandra, запущенный в контейнере Docker.

Если вы уже развернули экземпляр Cassandra локально, в руководстве по работе с внешней базой данных Cassandra вы найдете подробную информацию о том, как получить доступ и настроить ваш экземпляр в соответствии с вашим сценарием использования.

Настройка Cassandra в Docker

Docker - это набор продуктов, которые используют виртуальные операционные системы для упаковки пакетов программного обеспечения в виде контейнеров. Контейнерное приложение изолируется от основной операционной системы для запуска приложения, библиотек и вспомогательного программного обеспечения, а также самого приложения. Эти приложения доставляются в виде образов Docker, которые представляют собой шаблоны, содержащие инструкции по созданию контейнера docker. Контейнер - это изолированное место, где приложение запускается без влияния на остальную систему и без влияния системы на приложение.

Установка Docker

Загрузите версию Docker Desktop, подходящую для основной операционной системы. В примере docker запускается на той же машине, что и AggreGate, однако это не обязательно. Подключение к удаленным базам данных упоминается в следующих руководствах:

Запуск контейнера

В этом примере используется официальный образ Docker Cassandra. Это хорошо задокументированный образ, содержащий все необходимое для начала работы. Необходимо ввести следующие команды в терминале Linux или Power Shell Windows:

Для загрузки последней версии образа cassandra из публичного репозитория Docker:

docker pull cassandra:latest

Для запуска контейнера в соответствии с определенными условиями, описанными ниже:

docker run -d --name cassandra-external -p 9042:9042 -t cassandra:latest

Ниже описана каждая часть приведенной выше команды:

Команда / Аргумент

Назначение

docker

Команда для запуска Docker

run

Создает новый контейнер на основе предоставленных аргументов и опций

--name cassandra-external

Дает имя контейнеру, чтобы его было легче идентифицировать во время других операций

-d

Флаг Detached запускает контейнер в фоновом режиме, оставляя терминал свободным для дальнейших команд

-p 9042:9042

Сопоставляет порт 9042 контейнера с портом 4092 хост-машины

-t cassandra:latest

Указывает, какой образ использовать при создании контейнера, в данном случае последнюю версию cassandra

После выполнения команды вы захотите проверить, правильно ли работает контейнер. Для этого можно воспользоваться утилитой nodetool из контейнера docker, выполнив следующую команду:

docker exec -it cassandra-external nodetool status

Выполнится команда nodetool status в контейнере и отобразится примерно следующий результат:

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.17.0.2 104.31 KiB 16 100.0% 4067c208-7175-4360-be5c-656040979768 rack1

Вам также потребуется получить IP-адрес, с помощью которого можно подключиться к контейнеру. Это можно сделать с помощью команды docker inspect:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' cassandra-external 

В приведенном примере указано, что IP-адрес контейнера - 172.17.0.2. Теперь вы готовы подключиться к базе данных.

Подключение AggreGate к базе данных

В веб-интерфейсе AggreGate откройте контекстное меню сервера и выберите опцию Настроить сервер.

Откройте вкладку Хранилище в окне Конфигурация сервера и в разделе NoSQL хранилище установите указанные значения:

  • Использовать встроенную службу - False, чтобы указать, что вы хотите подключиться к внешней базе данных.

  • Адрес сервера - IP-адрес Cassandra. В данном примере 172.17.0.2.

  • Порт - порт, на котором Cassandra прослушивает соединения. В данном примере используется порт по умолчанию, 9042.

После ввода значений нажмите OK для сохранения изменений и закрытия окна. Вам будет предложено перезапустить AggreGate Server.

Когда сервер перезапустится, он должен подключиться к внешней базе данных.

Прямой доступ к внешней базе данных

Теперь, когда AggreGate запущен и подключен к контейнеру Cassandra, вы можете войти в контейнер и убедиться, что события записываются в базу данных. Аналогично тому, как вы ранее использовали notetools, вы можете использовать docker run для запуска инструмента cqlsh и выполнения запроса к Cassandra:

docker exec -it cassandra-external cqlsh

Откроется оболочка языка запросов Cassandra:

cqlsh>

Из оболочки CQL можно проверить, что таблицы, связанные с AggreGate, были созданы правильно:

cqlsh> describe tables;

В результате будут показаны все соответствующие пространства ключей, включая пространство, связанное с AggreGate:

Keyspace AggreGate
------------------
ag_alert ag_deactivation ag_netflow_2 ag_properties
ag_attendance ag_events ag_netflow_3 context_directory
ag_change ag_info ag_netflow_4 rrd
ag_classinstancechanged ag_netflow_1 ag_netflow_5

Можно выполнить запрос к любой таблице в пространстве ключей. Следующий запрос покажет количество всех событий AggreGate, сохраненных в базе данных:

cqlsh> select count(*) from AggreGate.ag_events;

Дальнейшее изучение

Теперь, когда ваш экземпляр AggreGate подключен к внешней базе данных Cassandra, вы можете подумать об оптимизации базы данных для операций, требующих больших объемов записи. Это особенно актуально, если ваше приложение требует хранения необработанной истории переменных для многих переменных.