Настройка кластера Cassandra
1. Руководство по установке Cassandra
1.1. О серверах
Имеется 5 серверов в диапазоне IP адресов 192.168.1.200-204. 192.168.1.200-201 — seeds
1.2. Установка JRE
1.2.1. Создание каталога для java
1 |
mkdir -p /opt/java |
1.2.2. Загрузить jre из http://oracle.com и скопировать на сервер
1 |
scp jre* user@host:/opt/java/ |
1.2.3. Распаковка архива
1 |
cd /opt/java ; tar xvzf jre*tar.gz |
1.2.4. Создание ссылок в /usr/bin
1 |
update-alternatives --install "/usr/bin/java" "java" /opt/java/jre1.8.0_77/bin/java 1 update-alternatives --set java /opt/java/jre1.8.0_77/bin/java |
1.3. Установка Java Native Access (JNA)
1 |
# https://github.com/java-native-access/jna cd /usr/share/java && wget |
1 |
# https://github.com/java-native-access/jna cd /usr/share/java && wget |
1.4. Установка libjemalloc
1 |
apt-get install libjemalloc1 |
1.5. Установка Cassandra
1.5.1. Необходимо отключить swap в fstab и
1 |
swapoff -a |
1.5.2. Необходимо, чтоб имя хоста разрешалось либо через DNS, либо через /etc/hosts
1 2 3 |
# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 cassandra-node2 |
1.5.3. Добавление пользователя для Cassandra
1 |
adduser cassandra |
1.5.4. Загрузка Cassandra из http://cassandra.apache.org
1 2 3 |
su - cassandra mkdir -p cassandra/3.4 && cd cassandra/3.4 wget http://apache.javapipe.com/cassandra/3.4/apache-cassandra-3.4-bin.tar.gz |
1.5.5. Распаковка архива
1 |
tar xzvf apache-cassandra-3.4-bin.tar.gz |
1.5.6. Создание ссылки на исполняемый файл JNA
1 |
ln -s /usr/share/java/jna-4.2.2.jar /home/cassandra/cassandra/3.4/apache-cassandra-3.4/lib/jna.jar |
1.5.7. Настройка лимитов /etc/security/limits.conf
Эти настройки можно сделать исходя из аппаратных возможностей сервера, но стартовый скрипт Cassandra сам выделяет память, исходя из её количества.
cassandra | soft | memlock | unlimited |
cassandra | hard | memlock | unlimited |
cassandra | soft | nproc | unlimited |
cassandra | hard | nproc | unlimited |
1.5.8. Редактируем ~/cassandra/3.4/apache-cassandra-3.4/conf/cassandra.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
cluster_name: 'My Cassandra Cluster' num_tokens: 256 seed_provider: - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: - seeds: "192.168.1.200,192.168.1.201" endpoint_snitch: GossipingPropertyFileSnitch authenticator: PasswordAuthenticator rpc_address: 0.0.0.0 # Эти настройки индивидуальные для каждого сервера listen_address: 192.168.1.200 broadcast_rpc_address: 192.168.1.200 # Настройка каталогов. data_file_directories: - /var/lib/cassandra/data commitlog_directory: /var/lib/cassandra/commitlog saved_caches_directory: /var/lib/cassandra/saved_caches hints_directory: /var/lib/cassandra/hints |
1.5.9. Создание каталогов для данных и журналов
1 |
# mkdir -v /var/{lib,log}/cassandra && chown -v cassandra:cassandra /var/ {lib,log}/cassandra |
1.5.10. Редактирование ~cassandra/3.4/apache-cassandra-3.4/conf/logback.xml
Возможно, есть другой способ. Заменить все строки
1 |
${cassandra.logdir} |
на
1 |
/var/log/cassandra |
Закомментировав эту строку можно отключить DEBUG лог
1 |
<!-- <appender-ref ref="ASYNCDEBUGLOG" /> --> |
1.5.11. Редактирование ~cassandra/3.4/apache-cassandra-3.4/conf/cassandra-env.sh
1 2 3 4 |
JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc.log" JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1" LOCAL_JMX=no JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false" |
1.6. Проверяем запуск Cassandra и смотрим вывод
1 |
~/cassandra/3.4/apache-cassandra-3.4$ ./bin/cassandra -f |
1.7. Используемые порты
1 2 3 |
TCP:7000 - Gossip(междунодовые коммуникации), открыть порт в файерволле для подсети кластера TCP:7199 - JMX(Java Management) TCP:9160 - Thrift(взаимодействие с внешними приложениями и фреймворками) |
1.8. Запуск Cassandra через systemd
1.8.1. Делаем ссылку на каталог с исполняемыми файлами
Это делается, чтоб не вводить длинные пути. Можно так же добавить в PATH
1 |
cassandra@debian:~$ ln -s /home/cassandra/cassandra/3.4/apache-cassandra-3.4/bin ./ |
1.8.2. Конфигурация для автоматического создания каталога pid файла
1 2 |
cat /etc/tmpfiles.d/cassandra.conf d /var/run/cassandra 0755 cassandra cassandra |
1.8.3. Запуск systemd-tmpfiles
1 2 3 |
# env SYSTEMD_LOG_LEVEL=debug systemd-tmpfiles --create cassandra.conf /var/run/cassandra created successfully. # ls -ld /var/run/cassandra drwxr-xr-x 2 cassandra cassandra 60 Apr 12 00:45 /var/run/cassandra |
1.8.4. Создание systemd конфигурации для запуска демона — cassandra.service
1.8.5. Проверка запуска
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# service cassandra start # service cassandra status ● cassandra.service - Cassandra database Loaded: loaded (/lib/systemd/system/cassandra.service; enabled) Active: active (running) since Tue 2016-04-12 01:35:14 EEST; 33s ago Process: 3938 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry INT/15/TERM/15 --pidfile /var/run/cassandra/cassandra.pid (code=exited, status=0/SUCCESS) Main PID: 4049 (java) CGroup: /system.slice/cassandra.service └─4049 java -Xloggc:/var/log/cassandra/gc.log -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+Hea... # service cassandra stop # service cassandra status ● cassandra.service - Cassandra database Loaded: loaded (/lib/systemd/system/cassandra.service; enabled) Active: failed (Result: exit-code) since Tue 2016-04-12 01:36:51 EEST; 11s ago Process: 4188 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry INT/15/TERM/15 --pidfile /var/run/cassandra/cassandra.pid (code=exited, status=0/SUCCESS) Process: 4049 ExecStart=/home/cassandra/bin/cassandra -p /var/run/cassandra/cassandra.pid -E /var/log/cassandra/errors.log (code=exited, status=143) Main PID: 4049 (code=exited, status=143) |
1.8.6. Включение сервиса и его запуск
1 2 3 |
# systemctl enable cassandra.service # service cassandra start |

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