Apache Cassandra – NoSQL сервер баз данных, используемый такими сервисами как Amazon, Facebook, Twitter и т.п.
Краткое описание из книги Cassandra The Definitive Guide – Eben Hewitt:
“Apache Cassandra – это open source, распределённая, децентрализованная, легко масштабируемая, устойчивая, настраиваемая система”.
Установка выполняется на Debian 7 Wheezy , Oracle Java 1.8.
Установка будет выполняться из ASF (Apache Software Foundation) репозитория.
Найти подходящую версию можно на странице проекта – http://cassandra.apache.org/download/. На момент написания статьи – имелся свежий выпуск Apache Cassandra 2.1.3, и stable-релиз Apache Cassandra 2.0.13, который мы и будем устанавливать.
Имеется Cassandra от DataStax, в которую включены дополнительные инструменты, но тут будет рассмотрена установка именно Apache Cassandra.
Установка Java описана в статье Debian: установка Oracle Java 8 из репозитория.
Создаём файл репозитория /etc/apt/sources.list.d/asf-cassandra.list
:
deb http://www.apache.org/dist/cassandra/debian 20x main deb-src http://www.apache.org/dist/cassandra/debian 20x main
Замените 20х на 21х, что бы установить Cassandra 2.1.
Добавляем ключи:
# gpg --keyserver pgp.mit.edu --recv-keys 749D6EEC0353B12C # gpg --export --armor 749D6EEC0353B12C | apt-key add -
Обновляем список пакетов:
# apt-get update
В случае ошибки вида:
GPG error: http://www.apache.org unstable Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY F758CE318D77295D
Проверьте на какой именно ключ ругается (NO_PUBKEY F758CE318D77295D
– значит добавить надо его).
Устанавливаем Apache Cassandra:
# apt-get install cassandra
Файлы настроек хранятся в /etc/cassandra
:
ls -l /etc/cassandra/ total 76 -rw-r--r-- 1 root root 10345 Mar 13 01:29 cassandra-env.sh -rw-r--r-- 1 root root 1199 Mar 13 01:29 cassandra-rackdc.properties -rw-r--r-- 1 root root 1358 Mar 13 01:29 cassandra-topology.properties -rw-r--r-- 1 root root 916 Mar 13 01:29 cassandra-topology.yaml -rw-r--r-- 1 root root 33039 Mar 13 01:29 cassandra.yaml -rw-r--r-- 1 root root 2374 Mar 13 01:29 commitlog_archiving.properties -rw-r--r-- 1 root root 1850 Mar 13 01:29 log4j-server.properties -rw-r--r-- 1 root root 1228 Mar 13 01:29 log4j-tools.properties drwxr-xr-x 2 root root 4096 Mar 31 08:26 triggers
Настройка параметров запуска может быть выполнена в файле /etc/default/cassandra
:
# cat /etc/default/cassandra # NOTICE: See also /etc/cassandra/cassandra-env.sh # EXTRA_CLASSPATH provides the means to extend Cassandra's classpath with # additional libraries. It is formatted as a colon-delimited list of # class directories and/or jar files. For example, to enable the # JMX-to-web bridge install libmx4j-java and uncomment the following. #EXTRA_CLASSPATH="/usr/share/java/mx4j-tools.jar"
Основные настройки Cassandra – хранятся в файле /etc/cassandra/cassandra.yaml
.
Директория логов – /var/log/cassandra/
.
Настройки логгирования – описаны в файле /etc/cassandra/log4j-server.properties
:
... log4j.appender.R.File=/var/log/cassandra/system.log ...
Исполняемый файл:
# which cassandra /usr/sbin/cassandra
Проверяем:
# cassandra -h Usage: /usr/sbin/cassandra [-f] [-h] [-p pidfile] [-H dumpfile] [-E errorfile]
Запускаем:
# cassandra
Если запустилось без ошибок – выходим по Ctrl+C.
Настройки памяти определяются в файле /etc/cassandra/cassandra-env.sh
:
# grep -r "MAX_HEAP_SIZE" /etc/cassandra/ /etc/cassandra/cassandra-env.sh: MAX_HEAP_SIZE="${max_heap_size_in_mb}M" /etc/cassandra/cassandra-env.sh:# environment. MAX_HEAP_SIZE is the total amount of memory dedicated /etc/cassandra/cassandra-env.sh:# generation. Both MAX_HEAP_SIZE and HEAP_NEWSIZE should be either set /etc/cassandra/cassandra-env.sh:#MAX_HEAP_SIZE="4G" /etc/cassandra/cassandra-env.sh:if [ "x$MAX_HEAP_SIZE" = "x" ] && [ "x$HEAP_NEWSIZE" = "x" ]; then /etc/cassandra/cassandra-env.sh: if [ "x$MAX_HEAP_SIZE" = "x" ] || [ "x$HEAP_NEWSIZE" = "x" ]; then /etc/cassandra/cassandra-env.sh: echo "please set or unset MAX_HEAP_SIZE and HEAP_NEWSIZE in pairs (see cassandra-env.sh)" /etc/cassandra/cassandra-env.sh:JVM_OPTS="$JVM_OPTS -Xms${MAX_HEAP_SIZE}" /etc/cassandra/cassandra-env.sh:JVM_OPTS="$JVM_OPTS -Xmx${MAX_HEAP_SIZE}"
Который считывается /usr/sbin/cassandra
при запуске:
if [ -f "$CASSANDRA_CONF/cassandra-env.sh" ]; then . "$CASSANDRA_CONF/cassandra-env.sh" fi
В Debian имеется init-скрипт /etc/init.d/cassandra
для управления Cassandra как сервисом (если устанавливали из репозитория, конечно).
Проверяем:
# service cassandra status Cassandra is not running.
Проверьте владельца каталогов /var/lib/cassandra
и /var/log/cassandra/
– должен быть cassandra
(т.к. при управлении через init-скрипт – Cassandra будет запущена от своего пользователя):
# ls -l /var/lib/cassandra total 12 drwxr-xr-x 2 cassandra cassandra 4096 Mar 31 09:09 commitlog drwxr-xr-x 4 cassandra cassandra 4096 Mar 31 08:45 data drwxr-xr-x 2 cassandra cassandra 4096 Mar 31 08:45 saved_caches
# service cassandra start
# service cassandra status Cassandra is running.
Проверяем порт:
# netstat -anp | grep 9160 tcp 0 0 127.0.0.1:9160 0.0.0.0:* LISTEN 5907/java
И пробуем подключится с помощью клиента:
# cqlsh Connected to Test Cluster at localhost:9160. [cqlsh 4.1.1 | Cassandra 2.0.13 | CQL spec 3.1.1 | Thrift protocol 19.39.0] Use HELP for help. cqlsh>
Лог:
# tail -n 5 /var/log/cassandra/system.log INFO [main] 2015-03-31 09:14:49,336 Server.java (line 156) Starting listening for CQL clients on localhost/127.0.0.1:9042... INFO [main] 2015-03-31 09:14:49,363 ThriftServer.java (line 99) Using TFramedTransport with a max frame size of 15728640 bytes. INFO [main] 2015-03-31 09:14:49,364 ThriftServer.java (line 118) Binding thrift service to localhost/127.0.0.1:9160 INFO [main] 2015-03-31 09:14:49,369 TServerCustomFactory.java (line 47) Using synchronous/threadpool thrift server on localhost : 9160 INFO [Thread-2] 2015-03-31 09:14:49,369 ThriftServer.java (line 135) Listening for thrift clients...
Последний шаг – добавляем Cassandra в автозапуск. В Debian это можно сделать так:
# update-rc.d cassandra defaults
Проверяем:
# ls -l /etc/rc*.d/ | grep cassandra lrwxrwxrwx 1 root root 19 Mar 31 08:26 K01cassandra -> ../init.d/cassandra lrwxrwxrwx 1 root root 19 Mar 31 08:26 K01cassandra -> ../init.d/cassandra lrwxrwxrwx 1 root root 19 Mar 31 08:26 S03cassandra -> ../init.d/cassandra lrwxrwxrwx 1 root root 19 Mar 31 08:26 S03cassandra -> ../init.d/cassandra lrwxrwxrwx 1 root root 19 Mar 31 08:26 S03cassandra -> ../init.d/cassandra lrwxrwxrwx 1 root root 19 Mar 31 08:26 S03cassandra -> ../init.d/cassandra lrwxrwxrwx 1 root root 19 Mar 31 08:26 K01cassandra -> ../init.d/cassandra
Готово.