RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Создание отказоустойчивого кластера на базе freeBSD (Или RAID1 по сети) [2009]
Функциональности DRBD во FreeBSD можно
добиться примонтировав блочное устройство по сети при помощи GEOM Gate
(ggate) и добавив его в зеркало с локальным диском средствами gmirror.
Для увеличения производительности две машины желательно соединить
напрямую через отдельные гигабитные Ethernet порты. Размер
зеркалируемых дисковых разделов должен быть минимально возможным для
решаемой задачи,так как для последующего перестроения зеркала большого
размера может понадобиться слишком много времени.Например, 20Гб раздел
будет синхронизирован при 100Мбит линке за 30 минут, а 500Гб - за 11
часов. Имеем два узла: master - машина на которой выполняется работа,
slave - запасная машина, которая в случае краха мастера перехватит
инициативу.
Организуем процесс зеркалирования: разделы /dev/da0s1d на обоих машинах будут
использованы в качестве вешнего диска, а /dev/ad0s1e - в качестве локального.
Включаем на обоих машинах поддержку GEOM модулей geom_mirror и geom_gate.
Прописываем в /boot/loader.conf:
geom_mirror_load="YES" geom_gate_load="YES"
Перезагружаем системы или загружаем модули руками, если то позволяет текущий securelevel:
kldload geom_mirror kldload geom_gate
Предположим, что обе машины имеют два сетевых интерфейса:
fxp0 - для взаимодействия с внешним миром (мастер узел имеет IP 172.16.100.1, а slave - 172.16.100.2).
fxp1 - для зеркалирования дисков между узлами (master - 192.168.100.1, slave - 192.168.100.2).
На fxp0 мастера также поднят через алиас 172.16.100.12, который будет использоваться
для предоставления публичных сервисов и в случа краха мастера будет перехвачен на slave узле.
Для переключения на slave в случае сбоя будем использовать freevrrpd, установленный
из порта /usr/ports/net/freevrrpd
Резервный узел, который перехватит инициативу в случае краха мастера:
[VRID] serverid = 1 interface = fxp0 priority = 240 # пониженный приоритет, поднимать сервер только в случае краха мастера addr = 172.16.100.12/32 # какой IP поднимать в случае краха мастера password = anyoneulike masterscript = /usr/local/bin/become_master backupscript = /usr/local/bin/become_standby
Экспорт дисковых разделов.
На мастер узле прописываем параметры экспортируемого со slave диска в /etc/gg.exports:
192.168.0.2 RW /dev/da0s1d
А на slave-е параметры диска на мастр-узле (в случае краха мастера, slave возмет на себя роль мастера):
192.168.0.1 RW /dev/da0s1d
На запасной машине запускаем процесс ggated (только на slave, не на мастере !).
ggated -v
Демон будет запущен в режиме отладки.
После того как все заработает нужно прописать запуск ggated в стартовый скрипт слейва.
Импортирование удаленного блочного устройства на мастер-узле осуществляется командой:
ggatec create 192.168.100.2 /dev/da0s1d
которая вернет имя нового устройства, как правило это будет ggate0
В дальнейшем на мастере нужно осуществлять дисковые операции с /dev/ggate0
Запускаем ggatec только на мастере !
При сбое мастера freevrrpd скрипт become_master завершит выполнение ggated на slave узле и выполнит ggatec,
а после восстановления старого мастера поднимет на нем ggated через скрипт become_standby
Настройка заркалирования.
На мастер-узле создаем RAID-1 из локального и удаленного дисков:
Алгоритм балансировки "prefer" важен для минимизации нагрузки на вторичный диск,
все операции чтения будут производится с локального диска, которому выставлен более высокий приоритет 100.
Перестраиваем массив:
gmirror rebuild rm0 ggate0
Для включения опции автосинхронизации слайсов выполняем:
gmirror configure -a gm0
После завершения синхронизации массива в логе увидим:
Запускаем перестроение raid и ждем его завершения:
gmirror rebuild gm0 ggate0
Замечания по поводу сохранения целостности данных:
- нельзя экспортировать через ggated физические разделы, если они уже добавлены в зеркало;
- не нужно предпринимать попытки создания мастер-мастер репликации, это невозможно;
- нельзя монтировать экспортируемый раздел на активном слейв сервере.
Монтирование экспортируемого раздела слейва возможно только на
мастер-узле;
- После сбоя необходимо выполнить fsck для зеркала;
- Обязательно ведение резервного копирования зеркала.