Здравствуй дорогой читатель! В данной статье хотелось бы пролить свет на такую БД как Cassandra и способе ее установки.
Cassandra — распределённая система управления базами данных, относящаяся к классу noSQL-систем и рассчитанная на создание высокомасштабируемых и надёжных хранилищ огромных массивов данных, представленных в виде хэша.
Изначально проект был разработан в недрах Facebook и в 2009 году передан под крыло фонда Apache Software Foundation, эта организация продолжает развитие проекта. Промышленные решения на базе Cassandra развёрнуты для обеспечения сервисов таких компаний, как Cisco, IBM, Cloudkick, Reddit, Digg, Rackspace и Twitter. К 2011 году крупнейший кластер серверов, обслуживающий единую БД Cassandra, насчитывает более 400 машин и содержит данные размером более 300 Тб.
СУБД Cassandra написана на языке Java и включает в себя полностью распределённую hash-систему Dynamo, что обеспечивает практически линейную масштабируемость при увеличении объёма данных. Cassandra использует модель хранения данных на базе семейства столбцов (ColumnFamily), что отличается от систем, подобных memcachedb, которые хранят данные только в связке ключ/значение, возможностью организовать хранение хэшей с несколькими уровнями вложенности. Cassandra относится к категории хранилищ, повышенно устойчивых к сбоям: помещённые в БД данные автоматически реплицируются на несколько узлов распредёленной сети или даже равномерно распределяются в нескольких дата-центрах. При сбое узла, его функции на лету подхватываются другими узлами. Добавление новых узлов в кластер и обновление версии Cassandra производится на лету, без дополнительного ручного вмешательства и переконфигурации других узлов. Тем не менее настоятельно рекомендуется заново сгенерировать токены для каждого узла, включая существующие, чтобы не испортить распределение нагрузки. Генерации ключей для существующих узлов можно избежать в случае кратного увеличения количества узлов (в 2 раза, в 3 раза и т.д.).
Для упрощения взаимодействия с БД поддерживается язык формирования структурированных запросов CQL (Cassandra Query Language), который на первый взгляд напоминает SQL, но существенно урезан в функциональности. Например, можно выполнять только простейшие запросы SELECT с выборкой по определённому условию. Добавление и обновление осуществляется через единое выражение UPDATE, операция INSERT отсутствует (если записи нет, при выполнении UPDATE она создаётся). Из возможностей можно отметить поддержку пространств имён и семейств столбцов, создание индексов через выражение «CREATE INDEX». Драйверы с поддержкой CQL подготовлены для языковPython, Java (JDBC/DBAPI2), Ruby (gem cassandra-cql), PHP (Trift, cassandra-pdo, Cassandra-PHP-Client-Library) и JavaScript (Node.js).
Для установки данного чуда на CentOS Linux необходимо проделать следующие шаги:
В окне терминала:
После данной процедуры кассандра будет установлена и можно приступать к ее конфигурации и последующему запуску.
Для создания кластера из нескольких нод, нам потребуется сгенерировать токены для каждой ноды кластера, сделать это можно с помощью python скрипта
python -c ‘print [str(((2**64 / number_of_tokens) * i) — 2**63) for i in range(number_of_tokens)]’
number_of_tokens заменяем на количество нод в нашем кластере.
Для быстрого создания токенов, можно воспользоваться онлайн питоном , выполнив в нем строку
print [str(((2**64 / number_of_tokens) * i) — 2**63) for i in range(number_of_tokens)]
После создания токенов, можно приступить к созданию кластера.
#Далее редактируем конфиг
/etc/cassandra/conf/cassandra.yaml
# Редактируем конфиги на нодах будущего кластера
# На 10.10.10.1:
vim /etc/cassandra/conf/cassandra.yaml
cluster_name: ‘cassandra_test’ #Имя кластера
initial_token: 0 #вставляем один из сгенерированных токенов
seeds: «10.10.10.1, 10.10.10.2, 10.10.10.3» #Прописываем адреса нод кластера
listen_address: 10.10.10.1
rpc_address: 10.10.10.1
# На 10.10.10.2:
vim /etc/cassandra/conf/cassandra.yaml
cluster_name: ‘cassandra_test’ #Имя кластера
initial_token: 0 #вставляем один из сгенерированных токенов
seeds: «10.10.10.1, 10.10.10.2, 10.10.10.3» #Прописываем адреса нод кластера
listen_address: 10.10.10.2
rpc_address: 10.10.10.2
# На 10.10.10.3:
vim /etc/cassandra/conf/cassandra.yaml
cluster_name: ‘cassandra_test’ #Имя кластера
initial_token: 0 #вставляем один из сгенерированных токенов
seeds: «10.10.10.1, 10.10.10.2, 10.10.10.3» #Прописываем адреса нод кластера
listen_address: 10.10.10.3
rpc_address: 10.10.10.3
После того как были сконфигурированны все ноды кластера, можно запустить их прописав в терминале Cassandra. После запуска всех нод, на одной из них прописываем nodetool status и смотрим, все ли ноды у нас работают.