Запуск многоузлового кластера в Cassandra в Ubuntu

Apache Cassandra – это открытая система баз данных с высокой производительностью и масштабируемостью, которая часто используется для поддержки многоузловых установок.

Ранее мы рассмотрели, как запустить одноузловой кластер Cassandra в Ubuntu 14.04. Данное руководство поможет установить Cassandra и создать многоузловой кластер.

Требования

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

Примечание: Все ноды в кластере могут быть настроены одинаково.

Для выполнения инструкций понадобится:

  • Минимум два сервера Ubuntu 14.04.
  • Настроенный брандмауэр IPTables на каждом сервере (обратитесь к руководству по настройке IPTables).
  • Установленная СУБД Cassandra (инструкции по установке – здесь).

1: Удаление стандартных данных

Сервисы в кластере Cassandra называются нодами или узлами. На данный момент каждый отдельный сервер, на котором установлена программа Cassandra, является одноузловым кластером. В данном разделе показано, как настроить взаимодействие между нодами и получить многоузловой кластер.

Примечание: Повторите команды данного раздела на каждой ноде кластера.

Остановите демон Cassandra:

sudo service cassandra stop

После этого удалите стандартные наборы данных:

sudo rm -rf /var/lib/cassandra/data/system/*

2: Настройка кластера

Конфигурационный файл Cassandra хранится в каталоге /etc/cassandra. Этот файл, cassandra.yaml, содержит множество директив и хорошо закомментирован. С его помощью можно настроить кластер.

Отредактируйте следующие директивы:

  • cluster_name: имя кластера.
  • -seeds: список IP-адресов серверов, входящих в кластер (разделяются запятыми).
  • listen_address: IP-адрес, который будт использовать остальные ноды кластера для подключения к этой ноде. По умолчанию – localhost; замените стандартное значение IP-адресом ноды.
  • rpc_address: IP-адрес для вызовов удаленных процедур (по умолчанию localhost). Если имя хоста сервера настроено правильно, оставьте значение по умолчанию. В противном случае укажите IP сервера или петлевой адрес (127.0.0.1).
  • endpoint_snitch: имя snitch-а, который сообщает БД Cassandra, как выглядит сеть (по умолчанию SimpleSnitch). На серверах производства рекомендуется использовать GossipingPropertyFileSnitch.
  • auto_bootstrap: данной директивы нет в конфигурационном файле, её нужно добавить и установить значение false. Это поможет новым нодам автоматически использовать правильные данные. Если вы добавляете ноды в уже существующий кластер, эта директива опциональна. В новом кластере директива обязательна.

Итак, откройте конфигурационный файл в текстовом редакторе:

sudo nano /etc/cassandra/cassandra.yaml

Найдите в файле следующие директивы и измените их, как показано ниже. Замените your_server_ip IP-адресом текущего сервера. Список директивы – seeds: должен быть одинаковым на всех серверах кластера.

. . .
cluster_name: 'CassandraDOCluster'
. . .
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "your_server_ip,your_server_ip_2,...your_server_ip_n"
. . .
listen_address: your_server_ip
. . .
rpc_address: your_server_ip
. . .
endpoint_snitch: GossipingPropertyFileSnitch
. . .

Затем добавьте директиву auto_bootstrap в конец файла:

auto_bootstrap: false

Завершив редактирование, сохраните и закройте файл.

Примечание: Повторите инструкции данного раздела на всех серверах кластера.

3: Настройка брандмауэра

Теперь кластер настроен, однако ноды пока что не взаимодействуют друг с другом. Настройте фаервол, чтобы разрешить трафик Cassandra.

Перезапустите демон Cassandra на каждом сервере кластера.

sudo service cassandra start

Проверьте состояние кластера. Вы увидите, что в списке появится только локальная нода (потому что она ещё не может взаимодействовать с остальными нодами).

sudo nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens       Owns    Host ID                               Rack
UN  192.168.1.4  147.48 KB  256          ?       f50799ee-8589-4eb8-a0c8-241cd254e424  rack1
Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

Чтобы настроить взаимодействие между нодами, откройте следующие сетевые порты на всех нодах кластера:

  • 7000, TCP-порт для передачи команд и данных.
  • 9042, TCP-порт для транспортного сервера. Через этот порт к кластеру будет подключаться утилита командной строки Cassandra, cqlsh.

Чтобы изменить правила фаервола, откройте файл для IPv4:

sudo nano /etc/iptables/rules.v4

Скопируйте и вставьте следующую строку в цепочку INPUT, чтобы открыть трафик на вышеуказанные порты.

IP-адрес, указанный при помощи флага –s – это адрес другой ноды кластера. К примеру, если у вас есть две ноды с адресами 111.111.111.111 и 222.222.222.222, то правило на ноде с адресом 111.111.111.111 должно содержать адрес 222.222.222.222.

-A INPUT -p tcp -s your_other_server_ip -m multiport --dports 7000,9042 -m state --state NEW,ESTABLISHED -j ACCEPT

Добавив правило, сохраните и закройте файл. Затем перезапустите IPTables.

sudo service iptables-persistent restart

4: Проверка состояния кластера

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

sudo nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens       Owns    Host ID                               Rack
UN  192.168.1.4  147.48 KB  256          ?       f50799ee-8589-4eb8-a0c8-241cd254e424  rack1
UN  192.168.1.6  139.04 KB  256          ?       54b16af1-ad0a-4288-b34e-cacab39caeec  rack1
Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

Если в списке указаны все настроенные ноды кластера, значит, многоузловой кластер полностью готов.

Также можно попробовать подключиться к кластеру при помощи утилиты cqlsh. Укажите IP-адрес любой ноды кластера.

cqlsh your_server_ip 9042

В случае успешного подключения команда вернёт:

Connected to My Cluster at 192.168.1.6:9042.
[cqlsh 5.0.1 | Cassandra 2.2.3 | CQL spec 3.3.1 | Native protocol v4] Use HELP for help.
cqlsh>

Чтобы закрыть терминал CQL, введите:

exit

Заключение

Теперь на сервере Ubuntu 14.04 запущен многоузловой кластер Cassandra. Больше подробностей о Cassandra можно найти на сайте программы.

В случае возникновения неполадок в кластере рекомендуется проверить логи (каталог /var/log/cassandra).

Tags: , , ,

Добавить комментарий