Зеркало здесь, зеркало там: сетевая репликация дисков под Windows

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Однажды на моём компьютере сгорел блок питания. С дымом, шумом, и прочими спецэффектами. Жёсткий диск тоже не выжил.

К счастью, там не было ничего ценного. Но я в очередной раз убедился, что RAID-массив не всегда помогает, т.к. может погибнуть вместе с компьютером.

Поэтому лучше, если копия данных будет находиться на другом компьютере. И хорошо, если она будет максимально свежей, чтобы в случае аварии продолжить работу с прерванного места.

Такие решения есть для Linux и FreeBSD — DRBD и HAST. Они позволяют реплицировать блочные устройства хранения по сети. То есть, создать что-то вроде RAID-1, где «половинки» дискового массива находятся на разных компьютерах. Теперь такое решение есть и для Windows.



И это не что-то новое, а тот же DRBD, портированный самими разработчиками из компании Linbit.

WinDRBD работает на 64 битных версиях Windows 10 или Server 2016. А на втором узле может быть как WinDRBD, так и DRBD под Linux. Причём узлы могут быть и виртуальными машинами.

На Хабре уже есть несколько статей по настройке DRBD, поэтому здесь я опишу только WinDRBD. Точнее — настройку репликации между двумя узлами (всего в кластере WinDRBD может быть 32 узла).

▍ Настройка


Скачиваем инсталлятор отсюда, а дальше – как обычно: «Далее», «Далее», «Далее». Установленные в инсталляторе «птички» не трогаем.

Для работы WinDRBD нужен свободный раздел диска. Если свободных разделов нет – можно немного «откусить» от существующего раздела. Или добавить ещё один жёсткий диск. Главное, чтобы размеры выделенных разделов были одинаковы на обоих компьютерах. Если просто хотите попробовать, как оно работает — можете не трогать диски компьютера, а использовать USB-флешки.

Заходим в оснастку «Управление дисками», и на свободном месте создаём простой том нужного размера. Форматировать и назначать букву не нужно.

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

Следующее, что нужно настроить – открыть в брандмауэре TCP порт 7500 на вход и выход, чтобы WinDRBD с двух компьютеров могли между собой общаться. Разумеется, номер порта можно изменить в настройках.

Файл с примером настроек находится в каталоге C:\windrbd\etc\drbd.d
Копируем windrbd-sample.res и даём ему понятное название, например raid1.res

Открываем его в текстовом редакторе и исправляем настройки:

resource “raid1” {
	…
	on windrbd1 {
		address 192.168.0.1:7500;
		node-id 1;
		…
	}

	on windrbd2 {
		address 192.168.0.2:7500;
		node-id 2;
		…
	}
}

Здесь raid1 – название создаваемого ресурса, windrbd1 и windrbd2 – имена хостов.

Секция c настройками томов выглядит примерно так:

volume 1 {
	disk “3e56b893-10bf-11e8-aedd-0800274289ab”;
	device minor 1;
	meta-disk internal;
}

Здесь раздел, выделенный для WinDRBD, указывается с помощью GUID (который можно посмотреть командой mountvol).

Не рекомендуемый, но допускаемый вариант – указать букву диска:

volume 1 {
	disk “E:”;
	…
}

Разделу, который появится в системе, тоже можно выдать букву:

device “F:” minor 1;

Но «для уменьшения количества проблем» разработчики рекомендуют делать как в первом варианте, без буквы. В этом случае после старта WinDRBD в системе появится не раздел, а отдельный жёсткий диск, который нужно будет инициализировать (создать таблицу разделов) и отформатировать через «Управление дисками».

Если оба хоста работают под Windows, файлы конфигурации у них будут одинаковыми – можно просто скопировать файл настроек на другой компьютер.

▍ Запуск


Для выполнения приведенных ниже команд используйте командную строку с правами администратора.

Сначала проверим, что в файле настроек нет ошибок (raid1 – название файла):

drbdadm dump raid1

Затем инициализируем служебные метаданные на разделах (отвечайте «yes» на предупреждение об удалении данных):

drbdadm create-md raid1

Инициализировать их нужно на обеих машинах. И на обеих запустить сервис:

drbdadm up raid1

Текущее состояние можно посмотреть командой:

drbdadm status

Если связи со второй стороной нет – в нижней строке статуса будет написано «Connecting».

Когда связь установится — появится сообщение «peer-disk:Inconsistent»

Связь установилась, но этого недостаточно. Нужно явно указать, какой хост будет служить источником синхронизации (первичным). Выполним на первом хосте такую команду:

drbdadm primary raid1 --force

Обратите внимание – параметр force используется только при первом запуске, иначе потеряются данные.

С помощью команды drbdadm status можно отслеживать прогресс синхронизации. Когда она завершится, надпись в нижней строке сменится на «peer-disk:UpToDate»

Разумеется, синхронизация займёт некоторое время, зависящее от размера раздела и скорости сети.

▍ Проверка работоспособности


На первичном хосте во вновь появившемся разделе создаём файл test1.

Отключаем на первичном хосте WinDRBD:

drbdadm down raid1

Заходим на второй узел и переключаем его в режим первичного:

drbdadm primary raid1

При этом в системе появится новый раздел, на котором будет присутствовать файл test1.

Стоит отметить, что синхронизируемый раздел виден только на первичном узле. На вторичных узлах он скрыт.

Создадим на втором хосте ещё один файл – test2 и переключим хост обратно в режим вторичного:

drbdadm secondary raid1

Раздел скроется.

Вновь запускаем WinDRBD на первичном хосте:

drbdadm up raid1

drbdadm primary raid1

На появившемся разделе видим два файла – test1 и test2. То есть, синхронизация в обратную сторону также сработала.

▍ Итого


У Linstor получилось сделать простое в настройке средство, увеличивающее надёжность хранения данных. Пока что оно не имеет всех возможностей Linux версии (географически распределённые системы, работа в кластерах и т.п.), но это обещают добавить в следующих релизах.

Кроме WinDRBD есть ещё один порт DRBD на Windows — WDRBD от компании ManTech. Возможности там примерно такие-же, как у WinDRBD, но для получения инсталлятора нужно писать запрос разработчикам, или компилировать из исходников самостоятельно.

Источник: https://habr.com/ru/company/ruvds/blog/573608/


Интересные статьи

Интересные статьи

Clumsy 0.2 Все распределённые системы — базы данных, мобильные приложения, корпративные SaaS и так далее — следует разрабатывать с учётом сбоев. Например, компания Stripe во время тестов убивала...
Вы замечали, что за 20 лет доля Linux систем на рынке Desktop (домашних систем и ноутбуков) не перешагнула и 10%, и все время колебалась в отметке 5-7% ?Я вот задумался и...
Многие компании в определенный момент приходят к тому, что ряд процессов в бизнесе нужно автоматизировать, чтобы не потерять свое место под солнцем и своих заказчиков. Поэтому все...
Disclaimer: Автор любит короткие и прямые костыли, а также нежно обожает свободный открытый софт за ту гибкость и масштабируемость, что тот дает. Целью данной статьи является желание попиариться...
В рамках данной статьи мы достаточно подробно рассмотрим процесс написания эксплоита под уязвимость в Microsoft Edge, с последующим выходом из песочницы. Если вам интересно узнать, как выглядит...