Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  начальная настройка
  Установка FreeBSD
  DUMMYNET
  Сборка ядра
  IPFW
  обновление
  portsnap
  CP1251 на FreeBSD
  loader.conf
  defaults/rc.conf
  jail
  Ntpdate/Ntpd
  diskless
  Обновление мира ("world")
  PBR & PF
  bsnmpd
  newsyslog
  if_bridge
  make.conf
  PBR & IPFW
  Работа с HDD
  sshd & AD
  Удаленное разбиение HDD
  Заметки об IPFW
  FreeBSD на VDS
  CVSUP и софт через Proxy
  i386=>amd64
  ALTQ в IPFW
  Виртуальный свитч
  VPN сервер по средствам mpd5.
  NTP
  sysupdate
  mpd5 L2TP
  freebsd + webcamera
  IPFW policy (PBR)
  RAID1 via LAN
  зеркальный RAID1 на ОС FreeBSD
  4.x => 7.x
  portdowngrade
  Быстрое обновление портов
  ipfw nat
  Использование csup
  UTF-8 console
  dump/restore
  hast carp zfs ucarp cluster
  ng_nat
  Wi-FI роутер + DHCP + DNS
  backup/restore & ZFS
  Обновление ОС и портов через SVN.
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> настройка —> RAID1 via LAN

Создание отказоустойчивого кластера на базе freeBSD (Или RAID1 по сети)

Автор: texnotronic.


Функциональности 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

Пример конфигурации freevrrpd:
Мастер узел:
[VRID]
serverid = 1
interface = fxp0
priority = 255 # повышенный приоритет для master
addr = 172.16.100.12/32 #рабочий IP, обрабатывающий запросы внешнего мира.
password = anyoneulike
masterscript = /usr/local/bin/become_master
backupscript = /usr/local/bin/become_standby

Резервный узел, который перехватит инициативу в случае краха мастера:
[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 из локального и удаленного дисков:
gmirror label -v -n -b prefer gm0 /dev/ggate0
gmirror insert -p 100 gm0 /dev/ad0s1e

Алгоритм балансировки "prefer" важен для минимизации нагрузки на вторичный диск,
все операции чтения будут производится с локального диска, которому выставлен более высокий приоритет 100.

Перестраиваем массив:
gmirror rebuild rm0 ggate0

Для включения опции автосинхронизации слайсов выполняем:
gmirror configure -a gm0

После завершения синхронизации массива в логе увидим:
GEOM_MIRROR: Device gm0: rebuilding provider ggate0 finished.
GEOM_MIRROR: Device gm0: provider ggate0 activated.

Далее /dev/gm0 можно отформатировать стандартным образом через newfs и примонтировать на мастер сервере.


Переключение на резевный (slave) сервер в случае краха основного сервера.

Проведем эксперимент - отключим линк у мастер-сервера, симулировав его крах.
Ниже описана логика работы скрипта become_master

На slave завершим ggated процесс. Зеркало должно автоматически заработать на запасном узле:
GEOM_MIRROR: Device gm0 created (id=2381431211).
GEOM_MIRROR: Device gm0: provider ad0s1e detected.
GEOM_MIRROR: Force device gm0 start due to timeout.
GEOM_MIRROR: Device gm0: provider ad0s1e activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.

Далее выполним fsck на случай нарушения целостности ФС и примонтируем раздел:
fsck -t ufs /dev/mirror/gm0
mount /dev/mirror/gm0 /mnt

После того как раздел заработал на slave-сервере, попытаемся восстановить работу мастера,
который должен после краза занять роль запасной машины.

После включения мастер-узла, займемся восстановления его статуса первичного узла.

На местере останавливаем работу зеркала gmirror для перевода его в подчиненный режим.
gmirror stop gm0

Запускаем ggated для приема репликаций от бывшего слейва, теперь ставшего основным сервером
ggated -v

Подключаем локальный диск /dev/da0s1e в зеркало в качестве неприоритетного раздела.
Для этого выполняем автоконфигурацию:
gmirror configure -n gm0

Оформляем экспорт локального диска /dev/da0s1e:
ggatec create 192.168.100.2 /dev/da0s1e

И ставим экспортируемому диску наименьший приоритет.
gmirror insert -p 0 gm0 /dev/ggate

Включаем автоконфигурацию зеркала:
gmirror cinfigure -a gm0

Перестраиваем зеркало:
gmirror rebuild gm0 ggate0

После завершения перестроения в логе наблюдаем:
GEOM_MIRROR: Device gm0: rebuilding provider ggate0 finished.
GEOM_MIRROR: Device gm0: provider ggate0 activated.

Удаляем раздел /dev/ad0s1d из зеркала и вновь добавляем его с повышенным приоритетом,
для восстановления функций основного сервера:
gmirror remove gm0 /dev/ad0s1d
gmirror insert -p 100 gm0 /dev/ad0s1d

Ситуация краха запасного сервера, при работающей мастере.

После восстановления работы слейва, на мастер хосте временно отключаем импорт диска:
ggatec destroy -f -u 0

в логе
GEOM_GATE: Device ggate0 destroyed.
GEOM_MIRROR: Device gm0: provider ggate0 disconnected.

На слейв узле останавливаем зеркалирование:
gmirror stop gm0

Запускаем на слейве экспорт ggated
ggated -v

На мастер узле подключаем удаленный диск:
ggatec create 192.168.100.2 /dev/da0s1e

На мастере автоматически должен быть обнаружен подключенный внешний диск:
GEOM_MIRROR: Device gm0: provider ggate0 detected.
GEOM_MIRROR: Device gm0: provider ggate0 activated.

Запускаем перестроение raid и ждем его завершения:
gmirror rebuild gm0 ggate0

Замечания по поводу сохранения целостности данных:

- нельзя экспортировать через ggated физические разделы, если они уже добавлены в зеркало;
- не нужно предпринимать попытки создания мастер-мастер репликации, это невозможно;
- нельзя монтировать экспортируемый раздел на активном слейв сервере. Монтирование экспортируемого раздела слейва возможно только на мастер-узле;
- После сбоя необходимо выполнить fsck для зеркала;
- Обязательно ведение резервного копирования зеркала.



размещено: 2009-04-09,
последнее обновление: 2009-04-09,
автор: texnotronic

оценить статью:

Morty, 2009-04-09 в 18:18:15

Отличный материал !! Автору спасибо

MetiS, 2009-04-10 в 2:35:17

Весчь!!! Надо бы реализовать на практике. Спасибо.

MarvinFS, 2009-04-10 в 5:35:44

Может я что-то не понимаю? о какой крастерности идет речь если переключение меджу нодами происходит в ручном режиме??? более того - необходимо присутствие администратора который это производит? неговоря уже о потере сетевых соединений и о разных IP адресах на каждой из внешних сетевых карт серверов.
Рассмотрим ситуацию выхода из строя внешней сетевой карты master сервера. при этом разделы будут успешно синхриться но мастер сервер перестанет быть доступным извне. Какой это кластер??? это извините более другое! :)
не вижу никакого принципиального отличия от просто cold reserve машины и регулярных бекапов + системный винт в raid1.
настолько я в курсе дела, HA cluster в классическом смысле на freebsd вещь несовсем очевидная и freevrrpd это только часть конфигурации, хотя на мой взгляд не очень удачный пример - я бы лучше использовал iSCSI, потому как это постоянное GEOM синхронизация просто утомляет.. а попробуй ка поработай во время прохождения mirror синхронизации! :)

www2, 2009-04-10 в 8:24:40

Слово "машина" - женского рода, поэтому говорить "на обоих машинах" - не грамотно.

"который должен после краза занять роль запасной машины." - краха.

Это две машинки с холодным резервированием, но кластером называть их я бы не стал.

Kolesya, 2009-04-10 в 8:50:20

Камрад texnotronic указал в начале статьи
>Размер зеркалируемых дисковых разделов должен быть
>минимально возможным для решаемой задачи

По поводу автоматического переключения (в т.ч.) и выход карты - скрипт напишите.

2texnotronic
+5 стиль написания легкочитаемый :)

nikll, 2009-04-10 в 10:29:09

хорошая заметка, но на кластер никак не тянет. смысла не вижу в таких изгалениях, год назад  у мну была подобная задача, решал через carp+corba т.к. оно должно само работать без постоянного обслуживанния одмином, оно не должно грузить тяжело и надолго оба сервера, корба ведет журнал изменений благодоря чему о полной синхронизации 500гб разделов можно забыть как о страшном сне....

nikll, 2009-04-10 в 10:30:47

Кстати я тут в комментах услышал одно интересное слово iscsi, по состоянию год назад это чудо в продакшен на фре негодилось вообще никак, я игрался с zfs+iscsi

arksu, 2009-04-10 в 14:46:04

холодное резервирование можно было организовать и более простыми вещами

Voron, 2009-04-10 в 16:50:38

В принципі стаття гарна. Правда, можна поставити під сумнів наскільки коректно буде працювати такий тип мірорінгу дисків по мережі при великих навантаженнях. У перспективі на FreeBSD запрацює, по нормальному, ZFS. Тоді можна буде будувати НА кластери без проблем:) Хотів би добавити, для того, щоб дві ноди "грамотно" функціонували добре використовувати /usr/ports/sysutils/heartbeat. Він дозволить контролювати крах будь-якого мережного інтерфейсу, сервісу чи ресурсу.
P.S. При бажанні можна організувати кластер за принципом Активний-Активний

arksu, 2009-04-10 в 16:57:06

а по русски-то никак? сайт написан на русском если вы не заметили... и сообщество русскоговорящее...
да и Вы я все таки думаю тоже знаете русский раз прочитали статью....

Хохлосрач, 2009-04-12 в 1:57:09

Хохлосрач тред го!

m0ps, 2009-04-12 в 21:44:04

arksu, для тебя есть принципиальная разница?

Dark, 2009-04-13 в 9:56:43

20Гб раздел будет синхронизирован при 100Мбит линке за 30 минут, а 500Гб - за 11 часов.

Боюсь, что мой веб-сервер с биллингом в аккурат попадут под последний случай с 11 часами... ИМХО, в продакшн нельзя с такими цифрами (даже для 20Гб)

www2, 2009-04-13 в 10:55:05

>Боюсь, что мой веб-сервер с биллингом в аккурат попадут под последний случай с 11 часами... ИМХО, в продакшн нельзя с такими цифрами (даже для 20Гб)

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

RomanoN, 2009-04-13 в 11:48:17

По моему статья отсюда
http://phaq.phunsites.net/2006/08/11/realtime-file-system-replication-on-freebsd/
Но спасибо за перевод.

Sava, 2009-04-14 в 10:29:20

Товарищи, а что такое этот Cobra? В портах нету, гугл тоже не колется особо.

const, 2009-04-16 в 10:18:06

> Товарищи, а что такое этот Cobra? В портах нету, гугл тоже не колется особо.

Если правильно понял, то это: [url=http://ru.wikipedia.org/wiki/CORBA]
Хотя лучше бы nikll написал статью и дал на нее ссылку... ;))

const, 2009-04-16 в 10:42:07

Из статьи совсем не ясно, что должно быть в скриптах?
masterscript = /usr/local/bin/become_master
backupscript = /usr/local/bin/become_standby

drurus, 2009-04-17 в 11:27:07

А можно-ли через geom_gate экспортировать зеркало (gm0) и зеркалить с зеркалом второго сервера?

xara, 2009-11-27 в 11:08:04

очепятка:
использованы в качестве вешнего диска
правильно - внешнего.


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 24 чел.
За последние 30 мин было: 116 человек
За сегодня было
13361 показов,
840 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0619 секунд
Из них PHP: 20%; SQL: 80%; Число SQL-запросов: 86 шт.
Исходный размер: 146336; Сжатая: 25324