Установка и использование Cassandra

Обновлено и опубликовано Опубликовано:

Используемые термины: Cassandra, Linux.

На официальном сайте приводятся примеры установки Cassandra разными способами:

  1. Запуск как приложение docker.
  2. Загрузка и запуск бинарника.
  3. Использование репозитория.

Проще всего использовать последний метод. Мы же рассмотрим все варианты. Также, в рамках данной инструкции, посмотрим на некоторые настройки СУБД.

Установка с помощью репозитория

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

Установка OpenJDK

Независимо от типа Linux, в системе должна быть установлена платформа для обработки Java. Самый удобный способ это сделать — установить пакет OpenJDK.

Подробнее об этом читайте в инструкции Установка OpenJDK на Linux.

Debian / Ubuntu

Нам необходимо правильно подключить репозиторий. Для этого нужно перейти на страницу загрузки Cassandra и внимательно посмотреть на предлагаемые версии программного продукта. На момент написания инструкции, стабильной версией была 4.0.х. В репозитории Cassandra названия релизов строятся исходя из номеров версий без точки, то есть версия 4.0.х будет релизом 40x.

Создаем файл:

vi /etc/apt/sources.list.d/cassandra.list

deb https://debian.cassandra.apache.org 40x main

* где 40x соответствует версии 4.0.х. Есть и более свежая версия, но мы сознательно выбрали стабильный релиз.
** если мы работаем не с Debian, нас не должно смущать debian в названии пути. Пакеты рассчитаны для установки на любом DEB-дистрибутиве.

Добавим ключ репозитория:

curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -

Обновим кэш репозиториев:

apt update

Можно устанавливать Cassandra:

apt install cassandra

Готово. Проверить состояние можно командой:

nodetool status

Rocky Linux

Содержимое конфигурационного файла для репозитория зависит от версии релиза, которую мы будем устанавливать. Переходим на страницу загрузки Cassandra и внимательно смотрим на предлагаемые версии программы. Допустим, нам нужна стабильная версия — на момент написания данной инструкции она была 4.0.х. В репозитории Cassandra названия релизов строятся исходя из номеров версий без точки, то есть версия 4.0.х будет релизом 40x.

Создаем файл:

vi /etc/yum.repos.d/cassandra.repo

[cassandra]
name=Apache Cassandra
baseurl=https://redhat.cassandra.apache.org/40x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://downloads.apache.org/cassandra/KEYS

* в нашем примере планируется установить cassandra версии 4.0.x.

Импортируем GPG-ключи репозитория:

rpm --import https://downloads.apache.org/cassandra/KEYS

Устанавливаем СУБД:

yum install cassandra

Разрешим автостарт и запустим сервис:

systemctl enable cassandra

systemctl start cassandra

Готово. Проверить состояние можно командой:

nodetool status

Установка бинарника

Это универсальный способ установки, который подойдет для большинства систем. Однако, он требует дополнительных действий.

Для удобства, разобьем процесс на этапы.

Установка OpenJDK

В системе должна быть установлена платформа для обработки Java. Самый удобный способ это сделать в Linux — установить пакет OpenJDK.

Подробнее об этом читайте в инструкции Установка OpenJDK на Linux.

Загрузка и распаковка бинарных файлов

На странице загрузки Cassandra находим нужную версию СУБД и переходим по ссылке.

На следующей странице копируем ссылку для ее загрузки:

Копируем ссылку на нужную версию Cassandra

* в нашем примере скопирована ссылка на архив последней стабильной версии.

Используя ссылку, скачиваем архив на сервере:

wget https://dlcdn.apache.org/cassandra/4.0.7/apache-cassandra-4.0.7-bin.tar.gz

Распаковываем архив:

tar xzvf apache-cassandra-*-bin.tar.gz

Переносим содержимое в каталог /opt:

mv apache-cassandra-*/ /opt/cassandra

Настройка запуска

Для автозапуска будем использовать сервис, созданный как юнит в systemd.

Создаем пользователя, из-под которого будет запускаться сервис:

useradd -r -c 'Cassandra database' cassandra

В качестве владельца каталога /opt/cassandra задаем созданного пользователя:

chown -R cassandra:cassandra /opt/cassandra

Создадим файл:

vi /etc/systemd/system/cassandra.service

[Unit]
Description=Cassandra Service
After=network.target

[Service]
RuntimeDirectory=cassandra
PIDFile=/var/run/cassandra/cassandra.pid
Environment=CASSANDRA_HOME=/opt/cassandra
Environment=CASSANDRA_CONF=/opt/cassandra/conf
Environment=CASSANDRA_INCLUDE=/opt/cassandra/tools/bin/cassandra.in.sh
Environment=CASSANDRA_OWNR=cassandra
User=cassandra
Group=cassandra
Type=forking
ExecStart=/usr/sbin/cassandra -p /var/run/cassandra/cassandra.pid
StandardOutput=journal
StandardError=journal
LimitNOFILE=100000
LimitMEMLOCK=infinity
LimitNPROC=32768
LimitAS=infinity
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Разрешаем сервис и стартуем его:

systemctl enable cassandra

systemctl start cassandra

Проверим состояние командой:

systemctl status cassandra

Настройка системных переменных и проверка работы СУБД

Так как бинарники для запуска утилит, с помощью которых можно работать с cassandra находятся в нестандартном каталоге (/opt), нам нужно прописывать до них полный путь. Это не очень удобно.

Создадим файл:

vi /etc/profile.d/cassandra.sh

export PATH="${PATH}:/opt/cassandra/bin:/opt/cassandra/tools/bin"

* в нашем примере мы добавили 2 каталога — /opt/cassandra/bin и /opt/cassandra/tools/bin. При вводе короткой команды, система будет также учитывать данные каталоги для поиска введенной команды.

Теперь выходим из текущего сеанса (комбинация Ctrl + D) и снова входим в систему. Если необходимо войти под суперпользователем, используем минус:

sudo su -

Пробуем ввести команду:

nodetool status

Запуск в качестве приложения Docker

Данный способ удобнее с точки зрения установки — нам не нужно ничего делать, так как приложение уже упаковано в контейнер. Однако, нам необходимо уметь работать с самим Docker.

Рассмотрим процесс подготовки сценария docker-compose для запуска cassandra.

Установка Docker Engine

Процесс подробнее описан в инструкции Установка Docker на Linux.

Также нам нужно установить docker-compose. Данный процесс также описан в инструкции.

Создание сценария и запуск контейнера

Создадим каталог, в котором будет сценарий запуска cassandra:

mkdir /opt/cassandra

Перейдем в него:

cd /opt/cassandra

Создадим сценарий:

vi docker-compose.yml

services:

  cassandra:
    image: cassandra:latest
    container_name: cassandra
    hostname: cassandra
    restart: unless-stopped
    environment:
      TZ: "Europe/Moscow"
    volumes:
      - ./data:/var/lib/cassandra
    ports:
      - 9042:9042

* обратите внимание, что мы пробрасываем содержимое каталога /var/lib/cassandra в контейнере в текущую директорию (/opt/cassandra), папку data.
** подробнее о работе с docker-compose читайте в инструкции Шпаргалка по работе с docker-compose.

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

docker-compose up -d

Проверить статус работы кассандры в docker можно командой:

docker exec -it cassandra nodetool status

Настройка подключения по сети

По умолчанию, сервис слушает на локальном адресе. При использовании docker это не важно, но при установке СУБД из пакетов или бинарников мы не сможем подключиться к базе по сети.

Для начала, убедимся, что брандмауэр разрешить сетевые запросы на порту 9042 (на нем по умолчанию работает cassandra). В зависимости от утилиты управления netfilter, наши действия будут отличаться.

а) Для iptables (как правило, на DEB):

iptables -I INPUT -p tcp --dport 9042 -j ACCEPT

Сохраняем правило:

apt install iptables-persistent

netfilter-persistent save

б) Для firewalld (как правило, на RPM):

firewall-cmd --permanent --add-port=9042/tcp

firewall-cmd --reload

Настройка брандмауэра завершена.

Теперь открываем конфигурационный файл cassandra. В зависимости от типа установки, путь до него будет отличаться.

а) При установке из пакетов:

vi /etc/cassandra/cassandra.yaml

б) Бинарники:

vi /opt/cassandra/conf/cassandra.yaml

Приводим опцию rpc_address к виду:

rpc_address: 192.168.0.15

* где 192.168.0.15 — IP-адрес, на котором слушает наш сервер cassandra.

Если у нас несколько сетевых адресов и нужно, чтобы cassandra слушала на каждом из них, то править нужно две опции:

rpc_address: 0.0.0.0
...
broadcast_rpc_address: 192.168.0.15

rpc_address мы выставляем на любой адрес, а в качестве значения broadcast_rpc_address выставляем адрес одного из интерфейсов, на котором будет работать broadcast для взаимодействия с другими нодами (при работе в режиме кластера).

Перезапускаем сервер баз данных:

systemctl restart cassandra

Ждем около 15 секунд. Проверяем, что сервер стал слушать на сетевом адресе:

ss -tunlp | grep 9042

Мы должны увидеть что-то на подобие:

tcp    LISTEN   0        4096       192.168.0.15:9042

Для проверки подключения можно установить cqlsh на любой другой компьютер в сети. 

Это можно выполнить разными способами, например, с помощью пакетного менеджера pip. Сначала его установим.

а) Для систем DEB:

apt install python3-pip

б) Для систем RPM:

yum install python3-pip

После установки pip можно перейти к установке cqlsh.

Выполняем команду:

pip3 install cqlsh

Можно подключаться к СУБД по сети:

cqlsh 192.168.0.15

* напомним, что 192.168.0.15 — адрес сервера cassandra.

Использование аутентификации

Открываем конфигурационный файл cassandra. В зависимости от типа установки, путь до него будет отличаться.

а) При установке из пакетов:

vi /etc/cassandra/cassandra.yaml

б) Бинарники:

vi /opt/cassandra/conf/cassandra.yaml

Находим опцию:

authenticator: AllowAllAuthenticator

И меняем ее на:

authenticator: PasswordAuthenticator

Перезапускаем cassandra:

systemctl restart cassandra

Информацию о логинах и паролях хранится в системной таблице. По умолчанию, создан пользователь cassandra с паролем cassandra.

Подключиться можно командой:

cqlsh -u cassandra 192.168.0.15

* где cassandra — логин; 192.168.0.15 — адрес сервера.

Система запросит пароль — вводим cassandra. В итоге, мы должны увидеть строку ввода команд:

cassandra@cqlsh>

Рекомендуется сразу создать новую учетную запись суперпользователя и отключить встроенную:

> CREATE ROLE dmosk WITH SUPERUSER = true AND LOGIN = true AND PASSWORD = 'dmosk111';

* где dmosk — логин; dmosk111 — пароль.

Выходим из командной оболочки cqlsh:

> quit

Заходим под созданной учетной записью:

cqlsh -u dmosk 192.168.0.15

Для отключения учетной записи по умолчанию вводим:

> ALTER ROLE cassandra WITH SUPERUSER = false AND LOGIN = false;

SSL/TLS шифрование

Процесс настройки шифрованного обмена трафика состоит из следующих шагов:

  1. Генерируем сертификаты для сервера и клиента(ов).
  2. Настраиваем сервер для работы с использованием созданного сертификата.
  3. Настраиваем клиента.

Рассмотрим эти шаги подробнее.

Создание сертификатов

Будем работать на сервере. Создадим каталог для хранения сертификатов:

mkdir /etc/ssl/cassandra

Перейдем в него:

cd /etc/ssl/cassandra

Воспользуемся утилитой keytool для создания хранилища ключей java (keystore):

keytool -genkeypair -noprompt -keyalg RSA -keysize 2048 -validity 36500 -alias server1 -keystore keystore.jks -storepass cassandra -keypass cassandra -dname "CN=cassandra, O=Global Security, L=SPb, ST=SPb, C=RU"

* в данном примере будет создан файл keystore.jks для хранения пар сертификатов. Данные в ключе dname можно задать свои. Обратите внимание, что в качестве пароля для keystore и ключа мы задали cassandra.

Создадим сертификаты для клиента:

openssl req -x509 -days 1461 -newkey rsa:2048 -nodes -sha256 -keyout client1.key -out client1.pem -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=cassandra.dmosk.local/CN=test"

* в данном примере мы создадим открытый ключ client1.pem и закрытый client1.key. Действие данного сертификата будет распространяться на 1461 день (4 года). В ключе subj передаются данные сертификата — желательно, чтобы они соответствовали вашей организации.

Экспортируем сертификат сервера из созданного ранее keystore.jks:

keytool -exportcert -rfc -noprompt -alias server1 -keystore keystore.jks -storepass cassandra -file cassandra_server.pem

* в результате мы получим файл cassandra_server.pem, содержащий последовательность для шифрования данных. Данный файл будем использовать на клиентах.

Импортируем клиентский сертификат в кейстор сервера:

keytool -import -file client1.pem -alias client1 -keystore truststore.jks -storepass cassandra

* данная команда создаст новый кейстор-файл truststore.jks и импортирует в него последовательность для ключа client1.

Подтверждаем импорт:

Trust this certificate? [no]: yes

Сертификаты готовы.

Настройка сервера

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

а) При установке из пакетов:

vi /etc/cassandra/cassandra.yaml

б) Бинарники:

vi /opt/cassandra/conf/cassandra.yaml

В открывшемся файле находим директиву client_encryption_options.

Приводим ее к виду:

client_encryption_options:
  ...
  enabled: true
  ...
  keystore: /etc/ssl/cassandra/keystore.jks
  keystore_password: cassandra
  ...
  require_client_auth: true
  ...
  truststore: /etc/ssl/cassandra/truststore.jks
  truststore_password: cassandra

* где:

  • enabled — разрешает использование шифрования между сервером и клиентом.
  • keystore — путь до кейстор-файла.
  • keystore_password — пароль для keystore. В нашем примере cassandra.
  • require_client_auth — требует проверки клиентских сертификатов.
  • truststore — путь до кейстора с доверенными клиентскими сертификатами.
  • truststore_password — пароль для контейнера с доверенными сертификатами. В нашем примере cassandra.

Для применения настроек, перезапустим сервис cassandra:

systemctl restart cassandra

Настройка сервера выполнена. Можно переходить к клиенту.

Настройка клиента и подключение к серверу

Копируем файлы с сервера на клиентский компьютер:

  • cassandra_server.pem
  • client1.key
  • client1.pem

Мы можем выполнить проверку подключения с сервера. В этом случае, ничего переносить не нужно.

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

mkdir /etc/ssl/cassandra

Создадим конфигурационный файл для клиента cqlsh:

vi ~/.cassandra/cqlshrc

* стандартный путь до конфигурационного файла cqlshrc находится в домашней директории пользователя + .cassandra/cqlshrc.

Пропишем следующее:

[ssl]
certfile = /etc/ssl/cassandra/cassandra_server.pem
validate = true
userkey = /etc/ssl/cassandra/client1.key
usercert = /etc/ssl/cassandra/client1.pem

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

Пробуем подключиться к серверу:

cqlsh --ssl -u dmosk 192.168.0.15

* для шифрованного подключения мы добавляем опцию --ssl.
** так как в нашем примере мы настроили аутентификацию, то в строке подключения необходимо указать опцию -u и пользователя (dmosk).

# Linux # Серверы # Базы данных # DevOps
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет