Запуск многоузлового кластера в Cassandra в Ubuntu
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: Apache Cassandra, Cassandra, Iptables, Ubuntu 14.04