Работа с внешней базой данных Cassandra

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

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

Модель конфигурации Cassandra во внешнем режиме

Когда AggreGate Server подключается к внешнему кластеру Cassandra, конфигурацией сервера Cassandra управляет исключительно сама Cassandra.
Конфигурация сервера Cassandra определяется в cassandra.yaml и связанных файлах конфигурации, расположенных в директории для установки Cassandra.
В этом режиме:

  • AggreGate Server не настраивает и не изменяет cassandra.yaml.

  • databaseCassandra* параметры в server.xml используются только для настройки соединения со стороны клиента из AggreGate Server с Cassandra (хосты, учетные данные, пространство ключей и т. д.).

  • Все рабочие настройки (имя кластера, топология, сетевая привязка, уплотнение, хранилище, лимиты памяти) определяются в конфигурации Cassandra.

Как вычисляются параметры

Когда происходит соединение с внешней Cassandra:

  • Идентификатор узла, топология и имя кластера берутся из cassandra.yaml.

  • Сетевые настройки, такие как listen_address, broadcast_address, а rpc_address должны быть определены в конфигурации внешней Cassandra.

  • AggreGate Server считывает только контактные точки, учетные данные и информацию о пространстве имен из неизменяемого состояния server.xml — а не из операционных настроек Cassandra.

Почему конфигурация сервера Cassandra не берется из файла server.xml

Сервер AggreGate Server не пытается переопределить или изменить конфигурацию внешнего экземпляра Cassandra.
В внешнем режиме:

  • конфигурация сервера Cassandra определяется исключительно в cassandra.yaml.

  • Параметры databaseCassandra* параметры в server.xml используются только для настроек соединения.

Внешний кластер Cassandra должен быть полностью настроен и готов к работе до подключения AggreGate Server.

Любые конфликты в конфигурациях (например, несовпадение имен кластеров) могут помешать AggreGate Server установить соединение.

Сводка

Режим развертывания

Активная конфигурация

Игнорируемая конфигурация

Внешняя Cassandra

Настройки сервера Cassandra: cassandra.yaml (рабочие настройки на хосте Cassandra) Настройки
соединения AggreGate: server.xml (databaseCassandra* параметры, используемые AggreGate для подключения)

AggreGate не изменяет cassandra.yaml
Операционные настройки Cassandra не берутся из server.xml (только настройки соединения)

Эта модель обеспечивает полную совместимость с многоузловыми производственными кластерами и позволяет избежать случайного переопределения конфигурации.

Обзор встроенной и внешней Cassandra

Особенность

Встроенная Cassandra

Внешняя Cassandra

Конфигурация сервера Cassandra

Настройки AggreGate Server (server.xml) и опциональный файл cassandra.yaml (настройка встроенной версии)

cassandra.yaml только (в собственной директории сервера Cassandra)

Развертывание с несколькими узлами

Нет

Да

Параметры JVM (включая ограничения памяти, такие как Xmx, Xss и т. д.)

Общее с процессом AggreGate Server

Отдельно для каждого процесса Cassandra

Рекомендуемые случаи использования

Приступить к работе, создание прототипов, тестирование в изолированной среде, небольшое производственное развертывание

Развертывание в производственной среде, масштабирование, отказоустойчивость

Для тонкой настройки встроенной службы Cassandra, управляемой AggreGate, см. раздел Работа со встроенной СУБД Cassandra.

Настройки AggreGate для внешней Cassandra настраиваются на каждом узле AggreGate в разделе Конфигурация сервера, вкладка Хранение, подвкладка NoSQL хранилище.

Полный список полей NoSQL хранилища и рекомендуемых значений (включая адрес сервера и порт базы данных по сравнению с семенами/Contact Points, коэффициентом репликации и другими параметрами настройки) см. в описании NoSQL хранилища.

Развертывание внешнего экземпляра Cassandra

Чтобы развернуть внешний экземпляр Cassandra:

  1. Установите Java 17 или JDK 17.

  2. Установите (распакуйте) последнюю версию Apache Cassandra.

  3. Отредактируйте config/cassandra.yaml

    • Настройте каталог данных и путь к папке commitlog (желательно на разных физических дисках).

    • Убедитесь, что включен нативный протокол (start_native_transport) и установлен порт нативного протокола (по умолчанию 9042).

    • Укажите IP-адрес сервера Cassandra в seeds, listen_address и rpc_address.

      Если вы измените listen_address в файле cassandra.yaml на IP-адрес, отличный от 127.0.0.1, вы также должны указать этот адрес в файле AggreGate сервера server.xml со следующей опцией:

      databaseCassandraHost>your_cassandra_ip_address</databaseCassandraHost>
  4. Установите переменную окружения JAVA_HOME в корневую папку JRE/JDK.

  5. Установите переменную окружения CASSANDRA_HOME в папку установки Cassandra.

  6. Отредактируйте bin/cassandra

    • Измените настройки Xms и Xmx на более высокое значение, оставив не менее 2-4 Гб оперативной памяти для операционной системы.

  7. Запустите bin/cassandra и убедитесь в том, что Cassandra начала прослушивание входящих соединений.

  8. Настройте настройки памяти (Xms, Xmx) в скриптах запуска Cassandra в соответствии с доступными системными ресурсами.

    Запустите Cassandra и убедитесь, что она прослушивает входящие соединения.

Оптимизация производительности Cassandra при работе с большими объемами записи

Нагрузка, связанная с записью, подразумевает большое количество операций вставки. Чем быстрее вы вставляете данные, тем быстрее вам нужно их уплотнять, чтобы поддерживать стабильный счетчик. Таким образом, вам нужно отредактировать следующие параметры в cassandra.yaml:

  • Увеличить количество concurrent_compactors.

  • Увеличьте значение compaction_throughput_mb_per_sec или отключите дросселирование, установив этот параметр на ноль.

Также может потребоваться изменить стратегию уплотнения определенных таблиц. Возможно, потребуется изменить следующие параметры:

  • уплотнение - предпочтительной стратегией является TimeWindowCompactionStrategy. Она была специально визуализирована для временных рядов и рабочих нагрузок с истекающим TTL. Для ее настройки вам потребуется изменить только compaction_window_unit и compaction_window_size. Также необходимо установить значение true для параметра unchecked_tombstone_compaction, чтобы Cassandra отбрасывала истекшие sstables в режиме реального времени.

  • gc_grace_seconds - должно быть уменьшено или установлено на ноль (только если вы используете одноузловой кластер).

Для изменения параметров уплотнения необходимо выполнить запрос с помощью интерактивного терминала CQL. Запустите bin/cqlsh для подключения к текущему узлу Cassandra:

USE aggregate;
ALTER TABLE <table_name> 
  WITH compaction = {'class' : 'TimeWindowCompactionStrategy', 'compaction_window_unit' : 'HOURS', 'compaction_window_size' : '1', 'unchecked_tombstone_compaction' : 'true'} 
  AND gc_grace_seconds = 0;

Перед настройкой базы данных с использованием перечисленных параметров ознакомьтесь с документацией по Apache Cassandra. В вашем конкретном случае настройка базы данных может отличаться.

Настройки сетевого таймаута

Рассмотрите возможность изменения настроек таймаута, если вы планируете выполнять операции, требующие много времени. В противном случае вы можете получить TimedOutException при работе с базой данных.

Параметр

Описание

range_request_timeout_in_ms

Сколько времени координатор должен ждать завершения сканирования seq или index.

read_request_timeout_in_ms

Сколько времени координатор должен ждать завершения операций чтения.

write_request_timeout_in_ms

Сколько времени координатор должен ждать завершения операций записи.

таймаут_запроса_в_мс

Время ожидания выполнения операций по умолчанию для других, различных операций.

Будьте внимательны при увеличении таймаута и учитывайте использование памяти и ЦП для выполняемых операций. Таймауты защищают клиентов от слишком долгого ожидания операций, которые никогда не завершаются из-за ошибки или нехватки ресурсов.

Устранение неполадок с помощью Nodetool

nodetool — это встроенный инструмент Cassandra, позволяющий получать различную аналитическую информацию с узлов Cassandra.

Используйте утилиту nodetool, поставляемую с вашей внешней установкой Cassandra. Запустите ее на узле Cassandra или с машины, имеющей доступ к интерфейсу JMX узла Cassandra.

Список доступных команд см. в официальной документации Apache Cassandra.

Непосредственный запрос с помощью CQLSH

cqlsh — это интерактивный инструмент для запросов к узлу базы данных Cassandra.

Используйте cqlsh утилиту, поставляемую с вашей внешней установкой Cassandra, для подключения к узлу или кластеру Cassandra.

Для получения более подробных подробностей cqlsh см. эту страницу документации. Синтаксис CQL описан здесь.

Was this page helpful?