Вступление
Apache Cassandra - это масштабируемая система баз данных с открытым исходным кодом, обеспечивающая высокую производительность при многоузловых настройках.
Ранее мы прошли https://www.digitalocean.com/community/tutorials/how-to-install-cassandra-and-run-a-single-node-cluster-on-ubuntu-14-04 как запустить одноузловой кластер Кассандры. В этом руководстве вы узнаете, как установить и использовать Cassandra для запуска многоузлового кластера в Ubuntu 14.04.
Предпосылки
Поскольку вы собираетесь создать многоузловой кластер Cassandra, вы должны определить, сколько серверов вы хотите иметь в своем кластере, и настроить каждый из них. Рекомендуется, но не обязательно, чтобы они имели одинаковые или похожие характеристики.
Для завершения этого урока вам понадобится следующее:
-
Как минимум два сервера Ubuntu 14.04 настроены с использованием https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 настоящего руководства по начальной установке].
-
Каждый сервер должен быть защищен брандмауэром с использованием https://www.digitalocean.com/community/tutorials/how-to-implement-a-basic-firewall-template-with-iptables-on-ubuntu-14-04[this Руководство по IPTables.
-
На каждом сервере также должна быть установлена Cassandra, следуя https://www.digitalocean.com/community/tutorials/how-to-install-cassandra-and-run-a-single-node-cluster-on-ubuntu-14-04 [это руководство по установке Cassandra].
Шаг 1 - Удаление данных по умолчанию
Серверы в кластере Cassandra известны как nodes. Сейчас у вас на каждом сервере есть одноузловой кластер Cassandra. На этом этапе мы настроим узлы для работы в качестве многоузлового кластера Cassandra.
Все команды в этом и последующих шагах должны повторяться на каждом узле кластера, поэтому убедитесь, что открыто столько терминалов, сколько у вас узлов в кластере.
Первая команда, которую вы запустите на каждом узле, остановит демон Cassandra.
sudo service cassandra stop
По завершении удалите набор данных по умолчанию.
sudo rm -rf /var/lib/cassandra/data/system/*
Шаг 2 - Настройка кластера
Файл конфигурации Cassandra находится в каталоге + / etc / cassandra +
. Этот конфигурационный файл + cassandra.yaml +
содержит много директив и очень хорошо прокомментирован. На этом этапе мы изменим этот файл для настройки кластера.
Для настройки многоузлового кластера Cassandra необходимо изменить только следующие директивы:
-
+ cluster_name +
: это имя вашего кластера. -
+ -seeds +
: список разделенных запятыми IP-адресов каждого узла в кластере. -
+ listen_address +
: это IP-адрес, который другие узлы в кластере будут использовать для подключения к этому. По умолчанию используется * localhost *, и его необходимо изменить на IP-адрес узла. -
+ rpc_address +
: это IP-адрес для удаленных вызовов процедур. По умолчанию это * localhost *. Если имя хоста сервера настроено правильно, оставьте это как есть. В противном случае измените IP-адрес сервера или адрес обратной связи (+ 127.0.0.1 +
). -
+ endpoint_snitch +
: имя снитча, которое говорит Кассандре о том, как выглядит ее сеть. По умолчанию это * SimpleSnitch *, который используется для сетей в одном центре данных. В нашем случае мы изменим его на * GossipingPropertyFileSnitch *, который предпочтителен для производственных установок. -
+ auto_bootstrap +
: эта директива отсутствует в файле конфигурации, поэтому ее необходимо добавить и установить в * false *. Это заставляет новые узлы автоматически использовать правильные данные. Это необязательно, если вы добавляете узлы в существующий кластер, но требуется, когда вы инициализируете новый кластер, то есть тот, у которого нет данных.
Откройте файл конфигурации для редактирования, используя + nano +
или ваш любимый текстовый редактор.
sudo nano /etc/cassandra/cassandra.yaml
Найдите в файле следующие директивы и измените их, как показано ниже, в соответствии с вашим кластером. Замените ++
на IP-адрес сервера, над которым вы сейчас работаете. Список + - seed: +
должен быть одинаковым на каждом сервере и содержать IP-адрес каждого сервера, разделенный запятыми.
/etc/cassandra/cassandra.yaml
. . .
cluster_name: ''
. . .
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: ",,..."
. . .
listen_address:
. . .
rpc_address:
. . .
endpoint_snitch:
. . .
Внизу файла добавьте директиву + auto_bootstrap +
, вставив в эту строку:
/etc/cassandra/cassandra.yaml
Когда вы закончите изменять файл, сохраните и закройте его. Повторите этот шаг для всех серверов, которые вы хотите включить в кластер.
Шаг 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 для собственного транспортного сервера.+ cqlsh +
, утилита командной строки Cassandra, подключится к кластеру через этот порт.
Чтобы изменить правила брандмауэра, откройте файл правил для IPv4.
sudo nano /etc/iptables/rules.v4
Скопируйте и вставьте следующую строку в цепочку INPUT, которая разрешит трафик на вышеупомянутые порты. Если вы используете файл + rules.v4 +
из учебника по брандмауэру, вы можете вставить следующую строку непосредственно перед тем, как + # Отклонить все, что выпало на этот комментарий +
.
IP-адрес, указанный в + -s +
, должен быть IP-адресом другого узла в кластере. Если у вас есть два узла с IP-адресами + 111.111.111.111 +
и + 222.222.222.222 +
, правило на машине + 111.111.111.111 +
должно использовать IP-адрес + 222.222.222.222 +
.
Новое правило брандмауэра
-A INPUT -p tcp -s -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
Если вы видите все настроенные вами узлы, вы только что успешно настроили многоузловой кластер Cassandra.
Вы также можете проверить, можете ли вы подключиться к кластеру, используя + cqlsh +
, клиент командной строки Cassandra. Обратите внимание, что для этой команды вы можете указать IP-адрес любого узла в кластере.
cqlsh 9042
Вы увидите, что это соединяется:
Выход
Connected to My DO 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
Заключение
Поздравляем! Теперь у вас есть многоузловой кластер Cassandra, работающий на Ubuntu 14.04. Более подробную информацию о Кассандре можно найти на веб-сайте project. Если вам необходимо устранить неполадки в кластере, первое место для поиска подсказок находится в файлах журналов, которые находятся в каталоге + / var / log / cassandra +
.