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

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

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

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

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

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

  1. Войдите в узел Cassandra.
  2. Выполните следующую команду:
    /opt/apigee/apigee-cassandra/bin/cassandra-cli -h $(hostname -i) <<< "show schema;"

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

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

create keyspace kms
  with placement_strategy = 'NetworkTopologyStrategy'
  and strategy_options = {dc-1 : 3}
  and durable_writes = true;

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

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

Например, если вы увеличите количество узлов Cassandra до шести, но оставите коэффициент репликации равным трем, вы не гарантируете, что на всех узлах 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 "write.consistencylevel" *
  4. Для согласованности чтения:
    grep -ri "read.consistencylevel" *
  5. Войдите в узел Сервера управления.
  6. Перейдите в каталог /opt/apigee/edge-management-server/conf:
    cd /opt/apigee/edge-management-server/conf
  7. Повторите шаги 3 и 4.

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