Могу ли я предотвратить синхронизацию пространства ключей с другим центром обработки данных, НЕ включив другой центр обработки данных в мое определение репликации пространства ключей? Судя по всему, это не так.
В моем собственном тесте я настроил два кластера Kubernetes в GCP, каждый из которых служит центром обработки данных Cassandra. Каждый кластер k8s имеет 3 узла.
Сначала я настроил центр обработки данных DC-WEST и создал демонстрацию пространства ключей, используя это:
CREATE KEYSPACE demo WITH replication = {‘class’: ‘NetworkTopologyStrategy’, ‘DC-WEST’ : 3};
Затем я настроил центр обработки данных DC-EAST, не добавляя никаких пространств ключей.
Чтобы объединить два центра обработки данных, я изменяю переменную среды CASSANDRA_SEEDS
в YAML-файле Cassandra StatefulSet, чтобы включить исходные узлы из обоих центров обработки данных (я использую хост-сеть).
Но после этого я замечаю, что пространство ключей demo
синхронизируется с DC-EAST, хотя в репликации это пространство ключей имеет только DC-WEST.
cqlsh> select data_center from system.local
... ;
data_center
-------------
DC-EAST <-- Note: this is from the DC-EAST datacenter
(1 rows)
cqlsh> desc keyspace demo
CREATE KEYSPACE demo WITH replication = {'class': 'NetworkTopologyStrategy', 'DC-WEST': '3'} AND durable_writes = true;
Итак, мы видим в DC-EAST пространство ключей demo
, которое должно быть реплицировано только на DC-WEST! Что я делаю неправильно?
Вы не указали, как вы развернули свой кластер Cassandra в Kubernetes, но похоже, что ваши узлы в DC-WEST
могут быть настроены так, чтобы говорить, что они DC-EAST
.
Я бы проверил Карта конфигурации для набора с отслеживанием состояния в DC-WEST
. Может быть, у него есть значение DC-EAST
для cassandra-rackdc.properties
(?). Подробнее в cassandra-rackdc.properties
файле здесь.
Стратегии репликации Cassandra контролируют, где размещаются данные, но фактическая схема (наличие таблицы/центров данных/и т. д.) является глобальной.
Если вы создадите пространство ключей, которое находится только на одном контроллере домена, все остальные контроллеры домена по-прежнему будут видеть это пространство ключей в своей схеме и даже создадут структуру каталогов на диске, хотя никакие данные не будут реплицированы на эти хосты.
Спасибо за ответ. Думаю, это было мое недоразумение. У меня сложилось неправильное впечатление, что если пространство ключей реплицируется только в пределах определенного контроллера домена, другие контроллеры домена его не увидят. Теперь у меня есть правильное понимание, и теперь я могу закрыть вопрос. Спасибо.
Кстати, у меня есть дополнительный вопрос. Предположим, у меня есть данные приложения, которые я хочу реплицировать между контроллерами домена для обеспечения высокой доступности, но у меня также есть локальные пользовательские данные, которые я хочу сохранить конфиденциальными для локального контроллера домена и недоступными для других контроллеров домена. Как мне это сделать? Могу ли я сделать это с одним кластером cassandra с несколькими контроллерами домена или мне нужно иметь дополнительные кластеры cassandra, работающие локально в каждом контроллере домена?
Коэффициент репликации устанавливается для каждого пространства ключей, а привилегии могут быть установлены для каждого пространства ключей, поэтому создайте пользователя для пространства ключей с несколькими постоянными ключами и создайте другого пользователя для варианта использования с одним постоянным током.
Я задаю имя центра обработки данных через переменную среды CASSANDRA_DC в yaml statefulset и подтверждаю, что имя DC установлено правильно для каждого DC. Настоящая проблема заключается в том, что я неправильно понимаю, как работает Кассандра, как объясняется в ответе Джеффа. Спасибо.