Комбинирование асинхронной и синхронной репликации
В 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перестанет работать, асинхронная репликация происходить не будет.- Асинхронно среплицированный неймспейсы будут доступны на
Follower-ах только для чтения (как и при обычной асинхронной репликации).
Для использования этого варианта репликации нужно настроить специальные параметры для асинхронной репликации в служебном неймспейсе #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", включающего асинхронную репликацию с текущего лидера кластера.