Перейти к содержанию

Репликация между площадками

Страница объясняет, как объект, записанный на одной площадке, получает копии на остальных: что передаётся по каналу между площадками, как кластер узнаёт, что копии ещё нет, и почему репликацию нельзя настроить для отдельного тенанта. Она нужна тому, кто планирует или обслуживает кластер из нескольких площадок. Что такой кластер переживает и чего он требует от топологии, описано в разделе Несколько площадок.

Коротко

  • Запись подтверждается после сохранения на местной площадке. Копии на остальных площадках создаёт фоновый процесс siterepl.
  • Объект виден на всех площадках сразу: пока копии нет, его содержимое запрашивается с площадки, где оно есть.
  • Набор площадок общий для всего кластера. Включить или отключить репликацию для отдельного тенанта нельзя.

Как объект попадает на другие площадки

Запись фиксируется на местной площадке, а остальные площадки получают копию асинхронно.

Пока копии нет, объект хранит одна площадка

Успешный ответ на запись не означает, что копии на других площадках уже созданы. Чем это грозит при потере площадки или узла, описано в разделе Отказ узла при нескольких площадках.

Пространство имён едино для всего кластера, поэтому объект существует с момента фиксации своей строки. Клиент на площадке, куда копия ещё не пришла, получает содержимое объекта, а не ответ NoSuchKey: содержимое запрашивается по каналу с другой площадки.

Репликация между площадками

Что передаётся между площадками

Полоса передаётся между площадками один раз и в исходном виде. Принимающая площадка сама кодирует её в собственные k+m фрагментов средствами своей группы размещения.

Передача k+m готовых фрагментов расходовала бы канал между площадками на тот самый объём, который кодирование должно экономить.

Как кластер узнаёт о недосланной копии

Столбец placements строки объекта (карта размещения) перечисляет группы размещения, в которых хранится содержимое объекта, и для каждой группы указывает её площадку.

Отдельного состояния у копии на площадке нет:

  • копия считается недосланной, пока в placements нет ни одной группы этой площадки;
  • записанная копия добавляет в placements группы своей площадки.

Досылку копий выполняет фоновый процесс siterepl. Он же заново ставит в очередь досылки недосланные копии, найденные по столбцу placements, в двух случаях:

Немедленно это делает запрос /-/debug/run/siterepl?mode=requeue (см. Фоновые процессы).

Репликация как свойство кластера

Набор площадок задаётся при развёртывании кластера и действует на весь кластер. Включить или отключить репликацию между площадками для отдельного тенанта нельзя: все тенанты используют один набор площадок, и объект любого тенанта получает копию на каждой площадке.

Причина в том, что площадка — свойство группы размещения, а группы размещения общие для всего кластера. Тенант представляет собой пространство имён со своим набором таблиц, а не собственный набор оборудования.

Если у тенантов разные требования к географии данных, им нужны разные кластеры.

См. также