О коэффициенте репликации Cassandra и уровне согласованности

О факторе репликации Кассандры

Cassandra хранит реплики данных на нескольких узлах, чтобы обеспечить надежность и отказоустойчивость. Стратегия репликации для каждого пространства ключей Edge определяет узлы, на которых размещаются реплики.

Общее количество реплик пространства ключей в кластере Cassandra называется коэффициентом репликации пространства ключей. Коэффициент репликации, равный единице, означает, что в кластере Cassandra существует только одна копия каждой строки. Коэффициент репликации два означает, что существует две копии каждой строки, причем каждая копия находится на другом узле. Все реплики одинаково важны; нет первичной или главной реплики.

В производственной системе с тремя или более узлами Cassandra в каждом центре обработки данных коэффициент репликации по умолчанию для пространства ключей Edge равен трем. Как правило, коэффициент репликации не должен превышать количество узлов Cassandra в кластере.

Используйте следующую процедуру для просмотра схемы Cassandra, которая показывает коэффициент репликации для каждого пространства ключей Edge:

  1. Войдите в узел Cassandra.
  2. Выполните следующую команду:
    /opt/apigee/apigee-cassandra/bin/cqlsh $(hostname -i) [-u cassuser -p casspass] -e "select keyspace_name, replication from system_schema.keyspaces;"

    Где $(hostname -i) преобразуется в IP-адрес узла Cassandra. Или вы можете заменить $(hostname -i) IP-адресом узла.

    cassuser : Если вы включили аутентификацию Cassandra, передайте имя пользователя Cassandra. Это необязательно и может быть пропущено, если у вас не включена аутентификация Cassandra.

    casspass : если вы включили аутентификацию Cassandra, передайте пароль Cassandra. Это необязательно и может быть пропущено, если у вас не включена аутентификация Cassandra.

Вы увидите вывод, подобный приведенному ниже, где каждая строка представляет одно пространство ключей:

  keyspace_name       | replication                                                                 
  kms                 | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
  system_distributed  | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'}
  apprepo             | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
  

Вы можете видеть, что для центра обработки данных 1, dc-1, коэффициент репликации по умолчанию для пространства ключей kms равен трем для установки с тремя узлами Cassandra. Для некоторых внутренних пространств ключей Cassandra (например, system, system_schema и т. д.) стратегия репликации и коэффициент репликации могут отличаться. Это намеренное поведение системы.

Если вы добавите в кластер дополнительные узлы Cassandra, коэффициент репликации по умолчанию не изменится.

Об уровне согласованности Cassandra

Уровень согласованности Cassandra определяется как минимальное количество узлов Cassandra, которые должны подтвердить операцию чтения или записи, прежде чем операцию можно будет считать успешной. Разным пространствам ключей Edge можно назначить разные уровни согласованности.

При подключении к Cassandra для операций чтения и записи узлы процессора сообщений и сервера управления обычно используют значение Cassandra LOCAL_QUORUM , чтобы указать уровень согласованности для пространства ключей. Однако в некоторых пространствах ключей используется уровень согласованности, равный единице.

Расчет значения LOCAL_QUORUM для центра обработки данных:

LOCAL_QUORUM = (replication_factor/2) + 1

Как описано выше, коэффициент репликации по умолчанию для производственной среды Edge с тремя узлами Cassandra равен трем. Поэтому значение по умолчанию LOCAL_QUORUM = (3/2) +1 = 2 (значение округляется до целого числа).

Если LOCAL_QUORUM = 2, по крайней мере два из трех узлов Cassandra в центре обработки данных должны ответить на операцию чтения/записи, чтобы операция завершилась успешно. Таким образом, для кластера Cassandra с тремя узлами кластер может допускать выход из строя одного узла на каждый центр обработки данных.

Указывая уровень согласованности как LOCAL_QUORUM , Edge позволяет избежать задержки, необходимой при проверке операций в нескольких центрах обработки данных. Если бы пространство ключей использовало значение Cassandra QUORUM в качестве уровня согласованности, операции чтения/записи необходимо было бы проверять во всех центрах обработки данных.

Чтобы просмотреть уровень согласованности, используемый узлами пограничного процессора сообщений или сервера управления:

  1. Войдите в узел процессора сообщений.
  2. Перейдите в каталог /opt/apigee/edge-message-processor/conf :
    cd /opt/apigee/edge-message-processor/conf
  3. Для обеспечения согласованности чтения и записи:
    grep -ri "consistency.level" *
  4. Войдите в узел Сервера управления.
  5. Перейдите в каталог /opt/apigee/edge-management-server/conf :
    cd /opt/apigee/edge-management-server/conf
  6. Повторите шаг 3.

Если вы добавите в кластер дополнительные узлы Cassandra, уровень согласованности не пострадает.