Комбинирование асинхронной и синхронной репликации
В Reindexer возможно совместное использование асинхронной и синхронной репликации, когда один или несколько неймспейсов реплицируются с одного кластера на другой. Поддерживается две схемы комбинирования асинхронной и синхронной репликаций:
- репликация с конкретной ноды одного кластера на конкретную ноду другого кластера,
- репликация с
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
. Репликация происходит с текущего Leader
-а cluster1
.
При смене 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"
, включающего асинхронную репликацию с текущего лидера кластера.