Поднимаем кластер Cassandra на 3 нодах
Если однажды вы проснетесь посреди ночи с внезапным непреодолимым желанием развернуть кластер Cassandra, надеюсь, эта статья поможет вам преуспеть в этом деле даже если вы не знакомы с данной СУБД.
Здесь я на пальцах объясню, как поднять Кассандру на 3 нодах (nodes), что означает, что для успешного взлета кластера нам понадобятся 3 сервера, на которых надо будет установить и настроить Cassandra. Надеюсь, всем понятно, что в данном контексте node = server.
Начну с того, что на каждом сервере должна быть учётка юзера cassadmin. Не выполняйте установку из-под root и уж тем более oracle/user/admin и т.д.
Предварительно устанавливаем Java, а лучше все, что с ней связано, например, командой sudo yum install -y java*
Для начала нам нужно создать папку (в данном примере назову ее folder), которую мы отведем под Кассандру, и сделать пользователя cassadmin ее владельцем - разумеется, рекурсивно.
Выкачиваем архив свежей версии Cassandra (но не бета) и кладем его в эту папку folder (я использую программу winscp, если что).
Выполняем команду:
tar xzvf apache-cassandra-3.11.9-bin.tar.gz
Если у вас другая версия, то название архива может отличаться, но в моем случае это apache-cassandra-3.11.9-bin.tar.gz.
Ссылку на скачивание давайте не буду.
Когда архиы распакуется, рекомендую образовавшуюся папку с Кассандрой переименовать просто в cassandra. В моем примере - через sudo mv apache-cassandra-3.11.9 cassandra
На всякий случай после этого советую еще раз проверить, является ли cassadmin владельцем папки рекурсивно, и если нет, то выполнить команду:
sudo chown -R cassadmin:cassadmin /folder/cassandra
Переходим в папку cassandra и находим там конфигурационный файл cassandra.yaml
Ищем и выставляем там следующие параметры:
endpoint_snitch: ставим GossipingPropertyFileSnitch
authenticator: PasswordAuthenticator, a не AllowAllAuthenticator
listen_address: прописываем свой ip-адрес
rpc_address: сюда тоже ставим свой ip-адрес
seeds: сюда сначала пишем свой ip-адрес (текущего сервера), после него ip остальных серверов, которые будут входить в кластер - тут уже в любом порядке
enable_user_defined_functions = true
Сохраняем конфигурятину.
То же самое в плане установки и конфигурятины проделываем на остальных серверах, только будьте внимательны: в пункте seeds для каждого сервера сначала пишем его текущий ip, а после него в любом порядке остальные ip. Например, у нас есть один сервер с ip 01, второй сервер с ip 02 и третий сервер с ip 03, и все эти сервера мы хотим объединить в кластер Кассандры. В таком случае в параметре seeds на первом сервере айпишники будут прописаны в таком порядке: 01, 02, 03, на втором сервере - 02, 01, 03 (ну или 02, 03, 01), а на третьем - 03, 01, 02 (или же 03, 02, 01).
После того, как на всех серверах была установлена Кассандра и отредактированы конфигурационные файлы cassandra.yaml, на любом сервере, находясь в папке cassandra/bin, выполняем следующую команду:
nohup ./cassandra &
- таким образом мы запускаем Кассандру отдельным процессом и не даем ей завянуть после того, как выйдем из сервера, чтобы не запускать каждый раз заново.
Проверяем, поднялся ли кластер и все ли ноды подтянулись:
./nodetool status
Должно отобразить 3 ноды. (спойлер: если какая-то бода не подтянулась, удаляем Кассандру с нее и проводим настройку заново)
Открываем новое окно консоли и там выполняем команду:
./cqlsh айпишниктекущегосервера -u cassandra -p cassandra
Внимание: айпишниктекущегосервера = это действительно ip-адрес сервера, на котором вы сейчас находитесь и с которого запустили службу Кассандры.
Если же вам удалось все сделать правильно и вы оказались в оболочке cqlsh, теперь можно создать тестовый Keyspace, тестового пользователя и загрантить ему права на данный keyspace:
CREATE ROLE testuser WITH PASSWORD = 'password' AND LOGIN = true;
CREATE KEYSPACE testkeyspace WITH REPLICATION = {'class':'NetworkTopologyStrategy', 'dc1' : 3};
GRANT ALL ON KEYSPACE testuser TO testkeyspace;
Обратите внимание на {'class':'NetworkTopologyStrategy', 'dc1' : 3}
- это важно, так как в кластере у нас 3 ноды.
Это все. Кластер поднялся.