Domain Folder Synchronizator (dfsync)
Описание
Служебная роль, обеспечивающая синхронизацию файлов каталога :SYNC между различными серверами системы. Связь между сайтами обеспечивает без прямого соединения типа full-mesh. Отслеживает изменения файловой системы для каждого каталога в соответствии с привязкой каталогов к доменам, и обеспечивает растекание по всем серверам сайтов, обслуживающим соответствующие домены. Каталог :SYNC/common синхронизируется на всех сайтах.
Принципиально не резервируется, накрывая экземплярами всю сеть серверов. Нет необходимости использовать микросервис в односерверной конфигурации.
Получает уведомления об изменениях файловой системы с помощью пакета inotify-tools. Сверка файлов происходит по дате и размеру. Хеш суммы по содержимому не применяются в целях оптимизации производительности.
При запуске считывает структуру каталогов и создает кэш, а затем регулярно отслеживает состояние синхронизации с другими серверами, входящими с группу. При необходимости (расхождение чексумм) каждый экземпляр производит одностороннюю синхронизацию в свою сторону. Кэш хранится в том числе на диске. При удалении файлов информация об этом сохраняется в кэше на 1 год.
Код |
|
Режим работы |
|
Режим резервирования |
|
Типы сайтов |
|
Слой |
|
Размещение |
|
Сохранение и восстановление состояния при перезагрузке |
|
Приложение |
|
Ограничения
-
Не присутствует в начальной односерверной конфигурации.
-
Должна присутствовать по 1 разу на каждом сервере.
-
В конфигурации, имеющей более 1 сайта, на каждом сайте хотя бы у одного экземпляра должен быть включен признак `is_cross_site` для обеспечения синхронизации данных с другими сайтами. Если признак включен более чем у одного, то каждый из них вытягивает данные с других сайтов независимо, увеличивая загрузку канала.
Параметры
Пример конфигурации
Управление конфигурацией производится в приложении, доступном для администраторов мастер-домена. Приложение скрывает полное содержание конфигурации, однако тем не менее оно доступно через API.
Конфигурация содержит раздел для описания всех экземпляров всех ролей. Параметры определяются для каждого конкретного экземпляра роли.
{
"name": "dfsync1",
"iface": "eth0",
"is_cross_site": false,
"roleid": 11380,
"roletype": "dfsync",
"separate": true
}