Apache Cassandra: установка на Debian Wheezy

Автор: | 04/01/2015
 

Cassandra-LogoApache CassandraNoSQL сервер баз данных, используемый такими сервисами как 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

Готово.