Установка Apache Cassandra на AlmaLinux и Rocky Linux 8

Описание изображения: Логотип Apache Cassandra на фоне схемы распределённого кластера
Что такое Apache Cassandra
Apache Cassandra — это распределённая NoSQL СУБД с акцентом на масштабируемость и отказоустойчивость. Ключевая идея: горизонтальное масштабирование через добавление узлов и репликацию данных между ними. Коротко: низкая задержка при больших объёмах записи, линейное масштабирование, репликация по нескольким дата‑центрам.
Краткое определение: Cassandra — распределённая колонко‑ориентированная база данных для высоконагруженных приложений.
Требования
- Сервер с AlmaLinux или Rocky Linux 8.
- Не менее 2 ГБ оперативной памяти (рекомендуется 4 ГБ+ для продакшена).
- Пользователь с sudo‑правами.
- Система обновлена:
$ sudo dnf updateВажно: в продакшене планируйте больше памяти и дискового пространства, отдельные быстродействующие диски для данных и журналов.
Шаг 1 — Установка Java
Cassandra 4.x официально поддерживает Java 8; есть экспериментальная поддержка Java 11. Для совместимости используем OpenJDK 8.
$ sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-develПроверьте версию Java:
$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)Если Java не установлена или система использует другую версию, настройте альтернативы или установите требуемую JDK.
Шаг 2 — Добавление репозитория и установка Cassandra
Создайте файл репозитория /etc/yum.repos.d/cassandra.repo и вставьте содержимое ниже. Команда создаст файл с требуемыми правами.
$ sudo tee /etc/yum.repos.d/cassandra.repo <После создания репозитория установите Cassandra:
$ sudo dnf install cassandra -yПроверьте, что пакет установлен без ошибок. Если dnf жалуется на зависимости, проверьте соединение и GPG‑ключи.
Шаг 3 — Установка cqlsh
cqlsh — интерактивная оболочка для CQL. Она совместима с Python 2.7 и Python 3.6+. В этой инструкции используем Python 3.8.
$ sudo dnf install python38Сделайте Python 3.8 версией по умолчанию (при необходимости):
$ sudo update-alternatives --config python
There are 3 programs which provide 'python'.
Selection Command
-----------------------------------------------
*+ 1 /usr/libexec/no-python
2 /usr/bin/python3
3 /usr/bin/python3.8
Enter to keep the current selection[+], or type selection number: 3Проверьте:
$ python --version
Python 3.8.8Установите cqlsh через pip:
$ pip3 install --user cqlshПроверьте версию cqlsh:
$ cqlsh --version
cqlsh 6.0.0Примечание: если cqlsh не запускается из PATH, добавьте ~/.local/bin в PATH или установите пакет системно.
Шаг 4 — Systemd‑юнит для Cassandra
Создайте файл сервиса /etc/systemd/system/cassandra.service и вставьте следующий блок:
[Unit]
Description=Apache Cassandra
After=network.target
[Service]
PIDFile=/var/run/cassandra/cassandra.pid
User=cassandra
Group=cassandra
ExecStart=/usr/sbin/cassandra -f -p /var/run/cassandra/cassandra.pid
Restart=always
[Install]
WantedBy=multi-user.targetСохраните, затем перезагрузите демон systemd и включите сервис:
$ sudo systemctl daemon-reload
$ sudo systemctl enable cassandra --nowПроверка статуса сервиса:
$ sudo systemctl status cassandra
? cassandra.service - Apache Cassandra
Loaded: loaded (/etc/systemd/system/cassandra.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-12-30 11:07:43 UTC; 12s ago
Main PID: 4679 (java)
Tasks: 48 (limit: 23696)
Memory: 1.3G
CGroup: /system.slice/cassandra.service
??4679 /usr/bin/java -ea -da:net.openhft... -XX:+UseThreadPriorities -XX:+HeapDumpOnOutOfMemoryError -Xss256>И инструмент nodetool для проверки состояния узла:
$ nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 127.0.0.1 69.09 KiB 16 100.0% 2fe7ccae-2af9-4841-9bff-bffa29f10dc5 rack1Шаг 5 — Основная конфигурация Cassandra
Конфигурационные файлы располагаются в /etc/cassandra (или /etc/cassandra/conf). Логи — /var/log/cassandra, данные — /var/lib/cassandra.
JVM‑настройки находятся в /etc/cassandra/conf/cassandra-env.sh. Для продакшена корректируйте параметры кучи (heap) и дополнительные опции JVM через переменную JVM_OPTS.
5.1 Включение аутентификации пользователей
Сделайте резервную копию файла конфигурации перед изменениями:
$ sudo cp /etc/cassandra/conf/cassandra.yaml /etc/cassandra/conf/cassandra.yaml.backupОткройте файл для редактирования:
$ sudo nano /etc/cassandra/conf/cassandra.yamlНайдите и измените блок, связанный с аутентификацией и авторизацией:
authenticator: AllowAllAuthenticator
authorizer: AllowAllAuthorizer
roles_validity_in_ms: 2000
permissions_validity_in_ms: 2000Замените на:
. . .
authenticator: org.apache.cassandra.auth.PasswordAuthenticator
authorizer: org.apache.cassandra.auth.CassandraAuthorizer
roles_validity_in_ms: 0
permissions_validity_in_ms: 0
. . .Сохраните файл и перезапустите Cassandra:
$ sudo systemctl restart cassandra5.1.1 Добавление администратора (superuser)
По умолчанию в Cassandra есть пользователь cassandra/cassandra. Создайте нового суперпользователя и деактивируйте права по умолчанию:
$ cqlsh -u cassandra -p cassandraВ cqlsh создайте роль (замените [username] и [yourpassword]):
cassandra@cqlsh> CREATE ROLE [username] WITH PASSWORD = '[yourpassword]' AND SUPERUSER = true AND LOGIN = true;Выйдите и войдите под новым пользователем:
cassandra@cqlsh> exit
$ cqlsh -u username -p yourpasswordОграничьте права у дефолтного пользователя cassandra и отберите все разрешения:
username@cqlsh> ALTER ROLE cassandra WITH PASSWORD = 'cassandra' AND SUPERUSER = false AND LOGIN = false;
username@cqlsh> REVOKE ALL PERMISSIONS ON ALL KEYSPACES FROM cassandra;Дайте полные права новому администратору:
username@cqlsh> GRANT ALL PERMISSIONS ON ALL KEYSPACES TO '[username]';
username@cqlsh> exitImportant: храните пароли и доступы в безопасном хранилище (vault/secret manager).
5.2 Настройка cqlsh (консоль)
Пример конфигурации можно взять из /etc/cassandra/conf/cqlshrc.sample. Скопируйте в домашнюю директорию и задайте права:
$ sudo cp /etc/cassandra/conf/cqlshrc.sample ~/.cassandra/cqlshrc
$ sudo chmod 600 ~/.cassandra/cqlshrc
$ sudo chown $USER:$USER ~/.cassandra/cqlshrc
$ nano ~/.cassandra/cqlshrcЗаполните раздел аутентификации:
[authentication]
;; If Cassandra has auth enabled, fill out these options
username = [superuser]
password = [password]Теперь при запуске cqlsh вы сможете автоматически входить под указанным пользователем.
5.3 Переименование кластера
В cqlsh смените системное имя кластера:
$ cqlsh
username@cqlsh> UPDATE system.local SET cluster_name = '[new_name]' WHERE KEY = 'local';
username@cqlsh> exitТакже измените значение cluster_name в /etc/cassandra/conf/cassandra.yaml:
cluster_name: '[new_name]'Очистите кэш и перезапустите службу:
$ nodetool flush system
$ sudo systemctl restart cassandra
$ cqlsh
Connected to [new_name] at 127.0.0.1:9042Полезные команды и сниппеты
- Запуск cqlsh:
cqlsh [host] [port] -u username -p password - Проверка статуса узла:
nodetool status - Очистка ключевого пространства:
nodetool drainперед остановкой - Просмотр логов:
sudo tail -f /var/log/cassandra/system.log
Сохраните часто используемые команды в скрипт‑шаблоне для автоматизации.
Рекомендации по JVM и производительности
- Heap: для развитых кластеров обычно указывают Xms/Xmx в пределах 4–16 ГБ в зависимости от оперативной памяти. Не устанавливайте больше 50% RAM без тестов.
- Garbage Collector: используйте настройки, рекомендованные для вашей версии Cassandra.
- Разграничение дисков: отдельный диск/раздел для данных и для commitlog повышает надежность.
Короткий чек: мониторьте GC паузы, загрузку CPU, I/O latency и размеры SSTable.
Безопасность и хранение данных
- Включите аутентификацию и авторизацию (PasswordAuthenticator, CassandraAuthorizer).
- Настройте шифрование трафика между узлами (internode TLS) и для клиентов (native transport TLS) в
cassandra.yaml. - Ограничьте доступ через брандмауэр: откройте только нужные порты (9042 для nativе protocol, 7000/7001 для internode, 7199 для JMX — по необходимости).
- Регулярно делайте бэкапы (snapshot + offsite копии).
Примечание по GDPR/конфиденциальности: храните персональные данные с соблюдением требований вашей юрисдикции, используйте шифрование на дисках и контроль доступа.
Инструменты отладки и типичные проблемы
- Сервис не стартует: проверьте логи
/var/log/cassandra/system.log, права на директории, доступность Java. - Nodemanager/JMX недоступен: убедитесь, что порт 7199 не заблокирован и JMX настроен.
- Высокое потребление памяти/OutOfMemoryError: уменьшите heap или проанализируйте запросы, проверьте compaction.
- Проблемы репликации: проверьте network connectivity между узлами, конфигурацию snitch и replication_factor для keyspace.
Короткое правило диагностики: лог → nodetool → конфигурация → сеть → JVM.
Критерии приёмки
- Cassandra установлена и сервис запущен без ошибок.
- cqlsh подключается под созданным суперпользователем.
- nodetool status показывает узел в состоянии Up Normal.
- Простая таблица создаётся и читается с задержкой, отвечающей ожидаемым SLA для тестовой нагрузки.
Роль‑основанные чеклисты
Администратор (установка):
- Установлена JDK 8
- Добавлен репозиторий Cassandra
- Установлен пакет cassandra
- Создан systemd‑юнит и включён сервис
- Настроен мониторинг и логирование
DevOps/Инфраструктура (продакшен):
- Настроен отдельный диск для commitlog
- Конфигурация JVM протестирована под нагрузкой
- Настроен TLS и firewall
- Развернуты резервные копии и тест восстановления
Разработчик (тестирование):
- Проверено создание keyspace и таблиц
- Выполнены тесты чтения/записи
- Проверены consistency levels (QUORUM, LOCAL_QUORUM)
Мини‑методология развёртывания в продакшене
- Подготовьте шаблон образа ОС с установленной JDK и базовой конфигурацией.
- Автоматизируйте установку Cassandra через конфигурационный менеджер (Ansible/Puppet).
- Разверните три или более узла в первой зоне, настройте replication_factor ≥ 3 для высокой доступности.
- Проведите нагрузочное тестирование и настройку JVM.
- Включите мониторинг (metrics, alerting) и бэкапы.
Факты и быстрое справочное руководство
- Основные порты: 7000 (internode), 7001 (internode TLS), 7199 (JMX), 9042 (native protocol).
- Типичное значение replication_factor: 1–3 (для теста 1, для продакшена 3+).
- Файлы конфигурации:
/etc/cassandra/conf/cassandra.yaml,/etc/cassandra/conf/cassandra-env.sh.
Короткие рекомендации по миграции с других дистрибутивов
- Проверьте пути конфигурации — в некоторых пакетах они могут отличаться (/etc/cassandra vs /etc/cassandra/conf).
- Сравните версии Cassandra и cqlsh — несовместимость протоколов может требовать конкретных версий cqlsh.
Заключение
Вы установили Apache Cassandra на AlmaLinux / Rocky Linux 8, настроили cqlsh, создали systemd‑юнит, включили аутентификацию и переименовали кластер. Для продакшен‑развёртывания дополнительно настройте мониторинг, шифрование и политики бэкапов. Официальная документация Cassandra содержит детальные рекомендации по продакшн‑конфигурациям.
Summary:
- Установка JDK и Cassandra
- Настройка systemd и cqlsh
- Включение аутентификации и создание суперпользователя
- Рекомендации по JVM, безопасности и бэкапам
Notes: если возникнут вопросы — проверяйте логи и nodetool, а также официальную документацию Apache Cassandra.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента