Міжнародная канферэнцыя распрацоўнікаў і карыстальнікаў свабодных праграм

clsync - live sync utility

Dmitry Okunev, NRNU MEPhI, Moscow, Russia

LVEE Winter 2014

The report focuses on a live syncing utility "clsync" developed by UNIX-tech department of NRNU MEPhI for an LXC-based infrastructure. "clsync" is free and open solution, that appears as replacement of "lsyncd" in fine-tuned systems. A practical experience of applying the utility to setup an LXC HA cluster, a backuping system and a configuration files syncing through an HPC cluster is given.

Поддержка синхронности файлов между узлами — это типовая задача при реализации большинства кластеров. Для решеиня разных задач формулируются разные требования к синхронности файлов между узлами, но в рамках данной работы в первую очередь рассматриваются системы высокой доступности (от англ. «high availability», далее — «HA»). В HA-системах типовыми требованиями являются:

  • высокая производительность (сравнимая с производительностью локальной файловой системы на локальной дисковой подсистеме);
  • высокая доступность (отказ сервиса не более нескольких секунд);
  • высокая надёжность (не создавать дополнительных отказов сервиса за счёт использования данного решения);
  • универсальность (применимость для широкого спектра разных решений, разворачиваемых на данной системе).

В общем случае, данная задача на данный момент остаётся нерешённой. Однако создано большое множество решений, которые в разных приближениях решают эту задачу, определяя свои порядоки приоритетов данных требований. И основными подходами на данный момент являются:

  • файловые системы только для чтения — это простое и надёжное решение, однако имеет очень узкий спект применимости;
  • единые общие файловые хранилища — простое и универсальное решение, но создаёт единую точку отказа;
  • блочная репликация — надёжное и универсальное решение, но создаёт большие потери производительности и очень чувствительно к качеству интерконнекта;
  • файловая репликация — компромиссное решение, которое не выполняет ни одно требование полностью;
  • комбинации вышеперечисленных подходов.

В НИЯУ МИФИ кроме прочих задач необходимо поддерживать HA-инфраструктуру c резервным копированием для быстрого создания VPS, в которых допускается работать малоопытным web-программистам 1. Опыт показал, что использование блочной репликации для в данной ситуации приводит к недопустимой потере производительности. Поэтому был использован lsyncd 2 для синхронизации LXC-контейнеров между узлами кластера и их резервного копирования.

Однако lsyncd оказался сложным в настройке для ряда экзотических ситуаций, малопроизводительным, а также недостаточно надёжным, простым в отладке, гибким и переносимым. В результате был написана альтернативная реализация под внутренние нужды отдела UNIX-технологий НИЯУ МИФИ — clsync 3. Далее clsync был документирован и опубликован через репозитории пакетов Debian.

Clsync написан на GNU C99 с использованием inotify 4 и адаптирован для реализации LXC HA-кластера (в связке с rsync 5), создания системы резервного копирования (аналогично) и синхронизации конфигурационных файлов на HPC-кластере (в связке с pdcp6).

Для реализации LXC HA-кластера в clsync начата реализация подсистемы уведомления других инстанций посредством multicast. Однако данная подсистема перестала быть актуальной после перенастройки кластера для запуска отдельной инстанции для каждого LXC контейнера. На данный момент в процессе реализации API и менеджер для централизованного управления инстанциями clsync.

Список литературы:
1. «Опыт внедрения отказоустойчивого web-кластера для портала приёмной комиссии НИЯУ МИФИ», Окунев Д.Ю., научная сессия НИЯУ МИФИ, 2012, http://www.pandia.ru/text/78/343/297.php
2. «Manual to Lsyncd 2.1.x», https://github.com/axkibe/lsyncd/wiki/Manual-to-Lsyncd-2.1.x
3. «file live sync daemon based on inotify, written in GNU C», https://github.com/xaionaro/clsync
4. «inotify – monitoring file system events», http://linux.die.net/man/7/inotify
5. «rsync — a fast, versatile, remote (and local) file-copying tool», http://linux.die.net/man/1/rsync
6. «pdcp(1) – Linux man page», http://linux.die.net/man/1/pdcp

Abstract licensed under Creative Commons Attribution-ShareAlike 4.0 International license

Назад