Apache Cassandra — это программное обеспечение для управления базами данных NoSQL. Организации используют его для обработки больших объемов данных распределенным способом. Популярность этого программного обеспечения возросла благодаря высокой доступности и отказоустойчивости.
Для этого Cassandra перешла от концепции главных или именованных узлов к симметричным распределенным узлам P2P. Каждый узел в кластере имеет одно или несколько пространств ключей, содержащих данные.
В этом руководстве вы узнаете, что такое пространство ключей, его компоненты и как создавать, изменять и удалять пространства ключей.
Что такое пространство ключей в Cassandra?
Пространство ключей (Keyspace) — это контейнер данных в Cassandra, похожий на базу данных в системах управления реляционными базами данных (RDMBS). Кластер имеет одно пространство ключей для каждого приложения, столько, сколько необходимо, в зависимости от требований и использования системы. Пространства ключей — это совершенно отдельные объекты, и данные, которые они содержат, не связаны друг с другом.
В кластере Cassandra пространство ключей — это самый внешний объект, который определяет, как данные реплицируются на узлах. Пространства ключей состоят из основных объектов, называемых семействами столбцов (которые похожи на таблицы в СУБД), строк, индексированных по ключам, типам данных, сведениям о центре обработки данных, коэффициенту репликации и стратегии пространства ключей.
Компоненты пространства ключей Cassandra
Есть некоторые важные компоненты пространства ключей, которые необходимо указать при создании пространства ключей. Эти компоненты:
Стратегия репликации
При определении пространства ключей стратегия репликации указывает узлы, на которых будут размещены реплики. Используя несколько узлов для размещения реплик, вы достигаете отказоустойчивости, высокой доступности и надежности.
Возможны две стратегии:
- Простая стратегия. Используйте эту стратегию для сред тестирования и разработки, а также если вы не собираетесь развертывать кластер более чем в одном центре обработки данных. Коэффициент репликации применяется ко всему кластеру. Разделитель решает, где разместить первую реплику на узле. Затем другие реплики распределяются по часовой стрелке на следующих узлах независимо от центра обработки данных или местоположения.
- Стратегия сетевой топологии. Эта стратегия подходит, когда вам нужно развернуть свой кластер в нескольких центрах обработки данных. Однако вы можете использовать его даже с одним центром обработки данных, чтобы впоследствии расширить его. Стратегия сетевой топологии работает как для продакшена, так и для разработки. Она имеет тенденцию размещать реплики на узлах, которые не находятся в одной стойке, чтобы избежать проблем, когда одна стойка выходит из строя. С помощью этого параметра каждый центр обработки данных может иметь отдельный коэффициент репликации.
Фактор репликации
Этот параметр определяет, сколько реплик строки хранить на каждом узле.
Минимум должно быть две реплики на центр обработки данных. Это означает, что сбой одного узла не влияет на работу группы репликации. Поэтому рекомендуется установить три копии каждой строки на разных узлах для достижения удовлетворительной отказоустойчивости.
Эмпирическое правило заключается в том, чтобы коэффициент репликации оставался таким же, как и количество узлов.
Базовый синтаксис пространства ключей
Вы можете создать пространство ключей с различными настройками репликации. Ниже приведен основной синтаксис для создания пространства ключей:
CREATE KEYSPACE keypsace_name WITH replication = {properties};
Свойства (properties) включают в себя различные параметры, такие как стратегия репликации, коэффициент или долговременная запись.
Примечание. Команды CQL заканчиваются точкой с запятой (;). Если вы не используете точку с запятой в конце запроса, система будет ждать дополнительного ввода.
Создать пространство ключей с помощью Cqlsh
Чтобы создать пространство ключей, запустите оболочку CQL:
cqlsh
Затем, следуя базовому синтаксису, создайте пространство ключей с нужным именем и настройками репликации.
В этом случае мы создадим test_keyspace
с SimpleStrategy
и replication_factor 3
:
CREATE KEYSPACE test_keyspace WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
Используйте приведенный выше пример, если вы не собираетесь расширяться до нескольких центров обработки данных. Кроме того, если у вас есть только один узел и вы используете Cassandra для тестирования, вы можете установить replication_factor
равным 1
.
Для производственных сред и нескольких центров обработки данных создайте пространство ключей со стратегией репликации сетевой топологии.
Для этого введите:
CREATE KEYSPACE keyspace_network_topology WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1' : 3};
Имя центра обработки данных по умолчанию — datacenter1
. Чтобы проверить имя вашего центра обработки данных, закройте оболочку CQL и используйте nodetool
:
nodetool status
Если у вас несколько центров обработки данных, перечислите их все в запросе с соответствующими коэффициентами репликации.
Например, запрос для двух центров обработки данных выглядит так:
CREATE KEYSPACE keyspace_network_topology WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1' : 3, 'datacenter2' : 3};
Проверить ключевое пространство
Поскольку в выводе нет ответа об успешном создании пространства ключей, используйте эту команду, чтобы убедиться, что пространство ключей находится в списке:
DESCRIBE KEYSPACES;
Система возвращает список всех доступных пространств ключей Cassandra. Мы выделили два пространства ключей, которые мы создали в приведенных выше примерах. Есть пара пространств ключей по умолчанию, которые поставляются с установкой Cassandra.
Отключить устойчивую запись (Durable Writes)
В Cassandra конфигурация durable_writes
по умолчанию имеет значение true
. Вы можете отключить его, но только для NetworkTopologyStrategy
. Этот параметр сообщает Cassandra, следует ли ей использовать журнал фиксации для внесения обновлений в выбранное пространство ключей.
Когда вы пытаетесь отключить durable_writes
при создании пространства ключей с помощью SimpleStrategy
, вы получаете предупреждение не делать этого. Причина в том, что вы можете потерять свои данные, если вы не синхронизировали данные из memtable
в sstable
, и ваш дата-центр выйдет из строя.
Чтобы отключить durable_writes
при создании пространства ключей, введите этот запрос:
CREATE KEYSPACE keyspace_durwrites WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1' : 3} AND DURABLE_WRITES = false;
Проверка устойчивых операций записи
Вы можете проверить запрос, который использовался при создании пространства ключей, описав пространство ключей. Также появляется часть durable_writes
:
DESCRIBE keyspace_durwrites
Чтобы проверить настройки durable_writes
для всех пространств ключей, запросите system_schema
:
SELECT * FROM system_schema.keyspaces;
В выходных данных показаны все пространства ключей и их настройки, включая durable_writes
.
Использование пространства ключей
Чтобы выбрать пространство ключей в Cassandra и выполнить над ним действия, используйте ключевое слово USE
.
Синтаксис:
USE keyspace_name
Например:
USE keyspace_durwrites;
Оболочка CQL переключается на указанное вами имя пространства ключей. Чтобы изменить текущее пространство ключей, используйте ту же команду с другим именем.
Примечание. Всякий раз, когда вы создаете таблицу в Cassandra, вы начинаете с определения пространства ключей.
Изменить ключевое пространство
После создания пространства ключей вы можете изменить конфигурацию с помощью ключевого слова ALTER
.
Единственное, что вы не можете изменить, это имя пространства ключей. Помимо этого, вы можете изменить стратегию репликации, коэффициент репликации и устойчивые записи.
Чтобы изменить пространство ключей, следуйте тому же синтаксису, что и при его создании, но используйте ALTER
вместо CREATE
. Измените значения, которые вы хотите.
Например:
ALTER KEYSPACE keyspace_durwrites WITH replication = {'class':'NetworkTopologyStrategy', 'datacenter1' : 2} AND DURABLE_WRITES = true;
Чтобы убедиться, что изменения вступили в силу, используйте ключевое слово DESCRIBE
:
На изображении выше показана конфигурация пространства ключей до и после изменения.
Удалить ключевое пространство
Если вы отбросите ключевое пространство, оно будет удалено из системы. Ключевое слово DROP
удаляет из пространства ключей все семейства столбцов, а также индексы и типы данных.
Чтобы удалить пространство ключей в Cassandra, используйте этот синтаксис:
DROP keyspace_name;
Например:
DROP keyspace_durwrites;
Чтобы убедиться, что вы удалили пространство ключей, снова используйте запрос DESCRIBE.
Итоги
Выполнив шаги, описанные в этом руководстве, вы сможете успешно создать пространство ключей в Cassandra. Примеры в этом руководстве показали вам, как создать пространство ключей для разных сред и с разными настройками.
Мы также показали вам, как изменить и удалить ключевое пространство, если вам нужно внести какие-либо изменения.