Базы данных и хранилища на нескольких серверах
На тарифах Business и Enterprise управляемая база данных PostgreSQL, key-value-хранилище, база данных ClickHouse или хранилище SeaweedFS может работать на 2–5 нодах хранилища, каждая на своём хосте. Один сервер является основным (primary) и принимает все чтения и записи; остальные — копии, которые следуют за ним. Если основной сервер потерян, его место занимает копия. В продакшене также запускайте не меньше двух Relay на серверах, отличных от сервера Opfield, в разных доменах отказа, чтобы подключения к базе не зависели от сервера Opfield; см. Сколько нужно Relay.
Связи, привязки и собственные инструменты Opfield всегда обращаются к основному серверу. Копии служат только для переключения при отказе и резервного копирования, а не для чтения.


Включение
Заголовок раздела «Включение»- Для нового ресурса используйте Availability в форме создания.
- Для существующего используйте Make available… на его странице.
До каких-либо изменений предварительная проверка показывает режим, серверы и свидетелей, измеренное время приёма-передачи между серверами, гарантию сохранности и то, что может потерять переключение. Включение для существующего ресурса один раз перезапускает его; он сохраняет свои данные и обслуживает запросы со своего сервера, пока заполняются копии.
Затем вкладка Availability базы данных или хранилища показывает серверы с их ролью, состоянием и отставанием, свидетелей, настройки и события.
Автоматическое переключение и свидетели
Заголовок раздела «Автоматическое переключение и свидетели»Для автоматического переключения при отказе нужно большинство голосующих участников на разных хостах. Голосуют серверы данных и свидетели (witness). Свидетель голосует за то, какой сервер основной, и не хранит данных. При двух серверах данных Opfield добавляет одного или трёх свидетелей, поэтому может отказать один сервер данных или один сервер данных и один свидетель.
Свидетель работает:
- на Relay, которому администратор разрешил размещать свидетелей в Settings → Relay, столбец Witnesses (
PATCH /api/system/relay/instances/{id}, MCPmanage_relay_poolset_witness_hosting); Opfield предпочитает разрешённые Relay; - или на ноде Docker на другом хосте.
Защищённый Relay размещает свидетелей только после того, как его владелец разрешил это в локальной конфигурации Relay; до этого Settings → Relay показывает Protected relay: needs local opt-in. Для ClickHouse свидетели — это голосующие участники ClickHouse Keeper, которые не хранят данных.
Два сервера без свидетеля: ручное переключение
Заголовок раздела «Два сервера без свидетеля: ручное переключение»Если третьего хоста для свидетеля нет, два сервера образуют реплицируемую пару с ручным переключением: копия следует за основным сервером, но ничего не переключается само. Если основной сервер потерян, переключитесь на копию через Make this copy primary.
Чтобы два основных сервера никогда не принимали записи одновременно, основной сервер перестаёт принимать записи, если 30 секунд не может связаться ни с Opfield, ни со своей копией.
Когда Opfield недоступен
Заголовок раздела «Когда Opfield недоступен»Переключение при отказе работает без Opfield. Серверы и Relay сами определяют, какой сервер основной, пока действует подписанная политика Relay: это срок аренды политики Relay, по умолчанию 72 часа, который предварительная проверка предлагает увеличить до 7 дней (Settings → Relay, Policy lease). См. Relay без Opfield.
То, что произошло за это время, попадает в Opfield, когда он возвращается, со временем события — в журнал аудита и в оповещения. Резервное копирование ждёт Opfield, потому что расписание задаёт Opfield. Реплицируемую пару без свидетелей по-прежнему можно переключить только через Opfield.
Что может потерять переключение
Заголовок раздела «Что может потерять переключение»«Подтверждено» означает, что клиент получил ответ об успехе.
| Движок и состояние | Что может потерять незапланированное переключение |
|---|---|
| PostgreSQL, синхронно, исправно | Ничего подтверждённого. Фиксация, ответа на которую клиент перестал ждать, может быть потеряна, если основной сервер откажет примерно в течение 5 секунд; Opfield это записывает. |
| PostgreSQL, синхронно, копия отстала | Автоматического переключения нет. Копия, которая 10 секунд не подтверждает запись, исключается из синхронной репликации, и запись продолжается; ручное переключение после этого теряет записи с этого момента, а Opfield показывает время и оценку. |
| PostgreSQL, асинхронно | До предела отставания (по умолчанию 1 МиБ) плюс примерно 1 секунда записей. Копия, отставшая сильнее, не может занять место основного сервера. |
| Key-value-хранилище (всегда асинхронно) | До предела отставания (по умолчанию 1 МиБ, обычно меньше 1 секунды). |
| Объекты SeaweedFS | Ничего, пока обе копии доступны для записи: каждая запись подтверждается после того, как её сохранили оба сервера. Пока сервер недоступен больше 10 секунд, новые объекты хранятся в одном экземпляре до его возвращения и теряются, только если потерян диск оставшегося сервера. |
| Метаданные объектов и бакетов SeaweedFS | Примерно до 1 секунды изменений. |
| ClickHouse, близкие серверы | Ничего подтверждённого, пока всё исправно. |
| ClickHouse, далёкие серверы или деградация | Вставки, которые копия ещё не забрала; они возвращаются, когда старый сервер возвращается со своим диском. |
Гарантия сохранности
Заголовок раздела «Гарантия сохранности»Если серверы близко (время приёма-передачи до 10 мс), по умолчанию гарантия сохранности синхронная: фиксация возвращается после того, как копия её получила. Если серверы далеко, она асинхронная: фиксация возвращается сразу, и переключение может потерять самые последние записи. Изменить её можно на вкладке Availability. Синхронная гарантия на далёких серверах заставляет каждую фиксацию ждать время приёма-передачи.
Opfield измеряет время приёма-передачи каждые 10 минут и создаёт оповещение, если серверы синхронного набора оказались далеко друг от друга, не меняя при этом гарантию сохранности.
Ручное переключение
Заголовок раздела «Ручное переключение»Make this copy primary — плановое переключение без потерь, если основной сервер работает, а копия актуальна. Если основного сервера нет или копия отстала, переключение может потерять последние записи: диалог показывает оценку и просит её подтвердить (в API и MCP: acceptDataLoss: true). Старый основной сервер возвращается как копия.
Подключение клиентов
Заголовок раздела «Подключение клиентов»Связи и привязки сами следуют за основным сервером. Для прямых подключений к опубликованному ресурсу используйте строку подключения со страницы ресурса: в ней перечислены все серверы, и клиент, который пробует каждый из них, остаётся на том, который принимает записи. Копия отклоняет клиентские подключения.
Повседневные операции
Заголовок раздела «Повседневные операции»Пока ресурс работает на нескольких серверах, его обычные действия охватывают все серверы:
- Изменение настроек или версии и перезапуск выполняются по одному серверу, начиная с копий. Если нужно перезапустить основной сервер, он сначала без потерь передаёт роль обновлённой копии, поэтому ресурс продолжает обслуживать запросы.
- Приостановка, в том числе при остановке приложения, к которому относится ресурс, сначала останавливает копии, а затем основной сервер, который сохраняет свою роль, поэтому переключения не происходит. Возобновление сначала запускает основной сервер.
- Перед обновлением демона ноды основной сервер на этой ноде передаёт роль исправной копии.
- Резервное копирование читает с актуальной копии, если она есть, иначе с основного сервера.
- Копию можно пересоздать: её данные заново копируются с основного сервера, и до окончания этого она не может занять его место. Серверы можно добавлять и удалять; в наборе остаётся не меньше двух серверов.
- Включение или выключение TLS базы данных отклоняется, пока включена Availability.
- Turn off availability оставляет основной сервер единственным и удаляет копии. Удаление ресурса сначала выключает Availability.
Оповещения и уведомления
Заголовок раздела «Оповещения и уведомления»Категории оповещений баз данных и Managed storage предлагают события переключения при отказе, ручного переключения, деградации, отсутствия автоматического переключения, восстановления, сервера, который не отвечает, копии, которая больше не синхронна, серверов, оказавшихся далеко друг от друга, потери или переноса свидетеля, а также повторного подключения и пересоздания, и метрики отставания репликации (в байтах и секундах) и времени приёма-передачи. Вкладка Availability перечисляет те же события. Dashboard показывает уведомление, пока набор не может выполнить переключение при отказе, пока основной сервер реплицируемой пары не отвечает, пока свидетель потерян, пока набор деградировал, а также в течение суток после переключения при отказе.
Тариф и лицензия
Заголовок раздела «Тариф и лицензия»Работа на нескольких серверах — функция Business и Enterprise, включая реплицируемые пары с ручным переключением. После окончания льготного периода лицензии всё работающее продолжает работать: переключение при отказе, изоляция старого основного сервера, повторное подключение копий, Make this copy primary, пересоздание копии, удаление сервера, выключение Availability и перенос свидетелей. Включение, добавление сервера и изменение настроек отклоняются, пока лицензия не продлена. См. Планы и права по тарифу.
API и MCP
Заголовок раздела «API и MCP»REST: /api/databases/managed/{id}/availability и /api/managed-storage/{id}/availability (предварительная проверка, включение, настройки, участники, назначение основного сервера, пересоздание, события, выключение). Для изменений нужен скоуп изменения ресурса (databases:edit или storage:edit), для чтения — скоуп просмотра. MCP: действия Availability в manage_managed_database и manage_managed_storage, а также set_witness_hosting в manage_relay_pool.