Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

воскресенье, 19 декабря 2010 г.

Развертывание Apache Cassandra на кластере из двух узлов

В последнее время интерес к NoSQL-решениям в мире веб-разработки только увеличивается. Одним из ярких представителей NoSQL-мира является Apache Cassandra - распределенное масштабируемое хранилище данных. Cassandra изначально была разработана внутри Facebook (где она обеспечивает поиск по сообщениям в Inbox - Cassandra – A structured storage system on a P2P Network - хранит терабайты поискового индекса), но затем передана в Apache Software Foundation. В настоящее время сайт проекта - http://cassandra.apache.org.

В данном посте мы рассмотрим установку Apache Cassandra на кластер из двух машин - одна машина под управлением Ubuntu (IP-адрес в локальной сети - 192.168.1.101), а вторая - под Windows XP (IP-адрес - 192.168.1.100). Будем использовать последнюю версию Apache Cassandra, доступную на момент написания этого поста - версия 0.7.0 RC2.

Скачиваем дистрибутив Apache Cassandra - apache-cassandra-0.7.0-rc2-bin.tar.gz. Распаковываем дистрибутив в каталог, который назовем CASSANDRA_HOME. Заводим переменную среды с таким же именем, т.е. CASSANDRA_HOME. Все эти действия проделываем, разумеется, на двух машинах, которые входят в кластер. Например, на машине с Ubuntu CASSANDRA_HOME=/usr/tools/apache-cassandra-0.7.0-rc2, на машине с Windows XP CASSANDRA_HOME=d:\dev\apache-cassandra-0.7.0-rc2.

Теперь настроим каждый инстанс Кассандры. Открываем файл CASSANDRA_HOME/conf/cassandra.yaml и редактируем следующие свойства:

  • cluster_name - имя нашего кластера. Для всех машин, входящих в кластер, это имя должно быть одинаковым. Поменяем его на что-нибудь более узнаваемое, например, 'JDevNotes Cluster' =)

  • data_file_directories - список каталогов, где хранятся данные. Пока что ограничимся одним каталогом. Этот каталог должен быть предварительно создан и должны быть права на запись в этот каталог. Значение по умолчанию: /var/lib/cassandra/data. На Windows напишем что-нибудь вроде d:\cassandra_data\data

  • commitlog_directory - каталог, куда пишется коммит-лог Кассандры. Этот каталог также должен быть предварительно создан и должны быть права на запись в этот каталог. Значение по умолчанию: /var/lib/cassandra/commitlog. На Windows напишем что-нибудь вроде d:\cassandra_data\commitlog

  • saved_caches_directory - каталог, куда пишется сохраненный кеш Кассандры. Значение по умолчанию: /var/lib/cassandra/saved_caches. На Windows: d:\cassandra_data\saved_caches


  • seeds - список IP-адресов сидов, т.е. узлов, которые распространяют информацию о кластере. Обычно сидами делают от 5% до 30% машин в кластере. На нашем кластере из двух машинок будет всего лишь один сид - это будет машина с Ubuntu. Запишем ее адрес сюда: 192.168.1.101. По-идее, список сидов должен быть одинаков для всех машин в кластере. Так что, повторюсь, на двух наших машинах мы запишем одинаковой значение - 192.168.1.101.


  • listen_address - адрес нода с Кассандрой. По умолчанию - localhost. Это ОК, если только запущен один узел с кассандрой. Но у нас два узла! Так что для каждой машинки в кластере записываем сюда ее адрес. Для Убунты - 192.168.1.101, для машины с Windows XP - 192.168.1.100. Еще важное замечание - сюда нельзя записать адрес 0.0.0.0 - чтобы Кассандра слушала все имеющиеся интерфейсы. Нельзя - потому что для общения узлов кластера используется Gossip. Подробнее см. FAQ - Why can't I make Cassandra listen on 0.0.0.0 (all my addresses)?


В принципе, на этом минимально необходимую настройку можно закончить. Но опишем еще несколько параметров настройки Кассандры, которые надо знать.

Во-первых, это порты. Apache Cassandra по-умолчанию использует для работы в кластере два порта - 7000 и 9160. Есть еще порт 8080, который используется для JMX - через JMX можно настроить каждую ноду отдельно.

Порт 7000 используется для общения узлов кластера между собой - это так называемый storage port. Он устанавливается в параметре storage_port. Через него идут на узел команды и данные.

Второй порт - 9160 - это Thrift-port. Он устанавливается в параметре rpc_port. Thrift-port используется для подключения сторонних клиентов к Кассандре.

Параметр rpc_address определяет адрес для Thrift-клиентов. По-умолчанию, используется localhost. Сюда можно записать любой адрес, в том числе и 0.0.0.0 (в отличие от listen_address).

Наконец, рассмотрим параметр auto_bootstrap. Этот параметр по-умолчанию установлен в false. Если он установлен в true, то данная нода с Кассандрой, когда подключается к кластеру, автоматически копирует часть данных к себе с уже запущенных нод. Для сидов нельзя ставить auto_bootstrap в true. Т.е. для нашего кластера на машине 192.168.1.101, которая является сидом, следует оставить auto_bootstrap: false. Для машины же с Windows XP можно (хотя и необязательно) поставить auto_bootstrap: true.

Итак, все необходимые каталоги созданы и соответствующие права на них поставлены, параметры настройки проставлены. Теперь запускаем Кассандру:

./cassandra -f

Опция -f используется, чтобы процесс был запущен не как демон, а как foreground process (не знаю, какой тут перевод подобрать!).

Сначала мы должны запустить сид, т.е. Кассандру на машине 192.168.1.101. После того, как она запущена, подсоединим к кластеру узел 192.168.1.100. Получим следующее сообщение на машине с адресом 192.168.1.101:


INFO 00:20:12,886 Binding thrift service to localhost/127.0.0.1:9160
INFO 00:20:12,888 Using TFramedTransport with a max frame size of 15728640 bytes.
INFO 00:20:12,892 Listening for thrift clients...
INFO 00:22:52,045 Node /192.168.1.100 is now part of the cluster
INFO 00:22:52,838 InetAddress /192.168.1.100 is now UP
INFO 00:22:52,838 Started hinted handoff for endpoint /192.168.1.100
INFO 00:22:52,841 Finished hinted handoff of 0 rows to endpoint /192.168.1.100


Это означает, что две наших ноды успешно сконнектились друг с другом!

Теперь загасим узел 192.168.1.100. На узле 192.168.1.101 получим следующее сообщение:

INFO 00:31:51,004 error writing to /192.168.1.100
INFO 00:31:56,005 InetAddress /192.168.1.100 is now dead.


Полезные ссылки:

Cassandra Wiki: Loading the Config
Cassandra Wiki: Frequently asked questions

Комментариев нет:

Отправить комментарий

Постоянные читатели