Комбинирование асинхронной и синхронной репликации

В Reindexer возможно совместное использование асинхронной и синхронной репликации, когда один или несколько неймспейсов реплицируются с одного кластера на другой. Поддерживается две схемы комбинирования асинхронной и синхронной репликаций:

  1. репликация с конкретной ноды одного кластера на конкретную ноду другого кластера,
  2. репликация с Leader-а одного кластера на все узлы другого.

Репликация с конкретной ноды одного кластера на конкретную ноду другого кластера

Использование этой схемы предусмотрено по умолчанию в настройках сервера Reindexer. Механизм репликации в этом случае выглядит так:

        cluster1 (ns1, ns2)          cluster2 (ns1)
updates -> cl10 - cl11               cl20 - cl21
              \    /  async repl(ns2)  \    /
               cl12 -------------------> cl22

На схеме выше представлено два независимых RAFT-кластера. В состав первого (cluster1) включены ноды cl10, cl11 и cl12. Второй кластер (cluster2) объединяет ноды cl20, cl21 и cl22. Внутри обоих кластеров настроена синхронная репликация. Кроме этого узел cl12 из cluster1 асинхронно реплицирует данные из неймспейса ns2 на один из узлов (cl22) кластера cluster2.

При этом:

  • Реплицируемый с cl12 на cl22 неймспейс не может принимать участие в синхронной репликации внутри cluster2.
  • Репликация происходит от узла к узлу. Т.е. данные асинхронно реплицируются только с cl12 на cl22, другие ноды обоих кластеров в процессе не задействуются. Если, например, cl12 перестанет работать, асинхронная репликация происходить не будет.

Для использования этого варианта репликации нужно настроить специальные параметры для асинхронной репликации в служебном неймспейсе #config Leader-а (в приведенном выше примере — нода cl12), в айтеме async_replication.

Репликация с Leader-а одного кластера на все узлы другого

В Reindexer возможно комбинирование асинхронной и синхронной репликации по следующей схеме:

        cluster1 (ns1, ns2)               cluster2 (ns1)
updates -> cl10 - cl11   async repl(ns2)   cl20 - cl21
              \    /   ------------------->   \    /
               cl12                            cl22

На схеме представлено два независимых RAFT-кластера. В состав первого (cluster1) включены ноды cl10, cl11 и cl12, второго (cluster2) — cl20, cl21 и cl22. Данные из неймспейса ns2 асинхронно реплицируются на все ноды, входящие в состав cluster2. Репликация происходит с текущего Leadercluster1. При смене Leader-а в cluster1 асинхронная репликация продолжится с нового.

При этом реплицируемый с cluster1 в cluster2 неймспейс не может принимать участие в синхронной репликации внутри cluster2.

Для использования этого варианта репликации нужно настроить специальные параметры для асинхронной репликации в служебных неймспейсах #config всех нод первого кластера, изменив содержимое айтема async_replication следующим образом:

{
  "type": "async_replication",
  "async_replication": {
    "role": "leader",
    "replication_mode": "from_sync_leader",
    "sync_threads": 4,
    "syncs_per_thread": 2,
    "online_updates_timeout_sec": 20,
    "sync_timeout_sec": 60,
    "retry_sync_interval_msec": 30000,
    "enable_compression": true,
    "batching_routines_count": 100,
    "force_sync_on_logic_error": false,
    "force_sync_on_wrong_data_hash": false,
    "max_wal_depth_on_force_sync": 1000,
    "nodes": [
      {
        "dsn": "cproto://192.168.1.5:6534/mydb",
        "namespaces": [
          "ns2"
        ],
        "replication_mode": "from_sync_leader"
      },
      {
        "dsn": "cproto://192.168.1.6:6534/mydb",
        "namespaces": [
          "ns2"
        ],
        "replication_mode": "from_sync_leader"
      },
      {
        "dsn": "cproto://192.168.1.7:6534/mydb",
        "namespaces": [
          "ns2"
        ],
        "replication_mode": "from_sync_leader"
      }
    ]
  }
}

Важное отличие этой схемы от репликации с конкретной ноды одного кластера на конкретную ноду другого — наличие в async_replication и настройках Follower-ов (узлов второго кластера, куда будут асинхронно реплицироваться данные) параметра "replication_mode":"from_sync_leader", включающего асинхронную репликацию с текущего лидера кластера.