The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Непрерывная репликация ZFS во FreeBSD"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от auto_tips (ok) on 14-Дек-10, 00:48 
Введение

С самого начала появления ZFS, я записался в ряды ее поклонников, и до сих пор ни разу не пожалел об этом. И на страницах opennet.ru я уже успел [[http://www.opennet.ru/tips/info/2321.shtml поделиться]] приятными моментами ее использования на OS FreeBSD.

Сегодня речь пойдет о возможностях непрерывной репликации ZFS между хостами FreeBSD.

++ Цели

Лично мне это стало не просто полезным, а необходимым, как только возникла задача использования виртуальных окружений, и в рамках одного физического сервера создавалась группа виртуальных серверов.

Первоначальная задумка выглядела следующим образом:


* Основной сервер виртуализации
* Сервер горячей замены (по своим характеристикам близкий, но не идентичный основному)
* Коммерческое ПО для виртуализации, не предполагалось, только OpenSource.

Задача абсолютной бесперебойной работы не ставилась, основной критерий -  быстрое (в пределах  5 минут) время восстановления IT сервисов в случае отказа основного сервера, с минимальной потерей пользовательских данных. Другими словами, если основной сервер выходит из строя, то все данные пользователей, сохраненные за несколько минут до отказа, не должны быть утеряны.

Вариант с общим NAS, разделяемый между серверами виртуализации, по ряду причин, в том числе и финансовых, так же не рассматривался.

Таким образом, данную конфигурацию можно кратко охарактеризовать, как среда виртуализации начального уровня с элементами отказоустойчивости.


++ Средства

В качестве хост системы выступает [[http://www.freebsd.org/releases/8.1R/announce.html FreeBSD 8.1]] с гипервизором [[http://www.virtualbox.org VirtualBox OSS]].

Я не буду подробно останавливаться на процессе установки и настройки VirtualBox, скажу только то, что оба сервера и основной и резервный имеют идентичное ПО, а все конфигурации и образы виртуальных серверов расположены внутри ZFS с точкой монтирования /var/IMAGES.

В таком виде, задача обеспечения отказоустойчивости сводится к синхронизации содержимого /var/IMAGES с основного сервера на резервный, чтобы в случае отказа, оставалась возможность запуска всех серверов на резервном сервере из актуальных образов.

Очевидным является тот факт, что чем чаще происходит синхронизация, тем лучше. Так же очевидно что [[http://ru.wikipedia.org/wiki/Rsync rsync]], не смотря на все его прелести, не способен обеспечить синхронизацию заданными выше временными рамками.
Беглый поиск выявляет упоминания о [[http://hub.opensolaris.org/bin/view/Project+avs/WebHome коммерческих реализациях zfs репликации]] а так же стандартных возможностях ZFS создания,  и что самое важное, обмена ими между хостами посредством zfs send/receive. Об этом упоминалось, в том числе и на [[http://www.opennet.ru/opennews/art.shtml?num=18823 страницах opennet]].

Именно zfs send/receive будет использован для непрерывной репликации в режиме близкому к реальному времени.

Репликацией должен заниматься скрипт, запускаемый из cron, интервал запуска 1 минута.

Скрипт запускается на резервном сервере и должен:

* Создать новый снапшот на основном сервере.
* Все снапшоты, задействованные в процессе репликации, должны иметь некую отличительную особенность (префикс в своем имени).
* Выявить самый свежий общий снапшот, относительно которого, можно провести инкрементальную репликацию. В случае его отсутствия провести полную репликации.
* Провести репликацию через send/receive
* Удалить неиспользуемые снапшоты.
* Запротоколировать все свои действия.

Как видно из краткого плана мероприятий, резервному серверу придется запускать команды на основном. SSH замечательно справиться с этим, но нужно иметь ввиду что:

* запускать через скрипт команды на удаленном сервере от имени рута ( а значит хранить или пароль или ключ рута) не слишком хорошая идея.
* ZFS на FreeBSD до сих пор не дружит с [[http://blogs.sun.com/marks/entry/zfs_delegated_administration ZFS Delegated Administration]]

Учитывая эти два факта, следует завести на основном сервере на привилегированного пользователя и выполнять команды zfs через sudo , разрешив ему необходимый минимум.

В файле /usr/local/etc/sudoers.d/zfs_replication определяем для пользователя следующие разрешения

   synczfs      ALL = NOPASSWD : /sbin/zfs snapshot *, /sbin/zfs send *,/sbin/zfs list *,/sbin/zfs destroy *

А теперь непосредственно скрипт /root/zfs-nrt-replication.sh

   #!/bin/sh
   REMOTE_HOST="master.local"
   FS="/var/IMAGES"
   REMOTE_POOL="tank0"
   LOCAL_POOL="tank0"
   SNAPSHOTMARK="SYNC-"


   SSHKEY="/root/syncimages_id"
   SSHFLAGS="-i $SSHKEY -o CheckHostIP=no -o StrictHostKeyChecking=no \
   -o IdentitiesOnly=yes -o BatchMode=yes -o  GlobalKnownHostsFile=/dev/null -l synczfs"
   SSHCMD="/usr/bin/ssh $SSHFLAGS $REMOTE_HOST sudo "
   INCREMENTAL=""

   (

   echo "Snapshoting remote FS"

   $SSHCMD "zfs snapshot -r $REMOTE_POOL$FS@$SNAPSHOTMARK`uuidgen`"

   RECENT_COMMON_SNAPSHOT=""

   for R in `$SSHCMD zfs list -H -o name -s creation -t snapshot -r $REMOTE_POOL$FS | grep $REMOTE_POOL$FS@`
   do
      for L in `zfs list -H -o name -s creation -t snapshot -r $LOCAL_POOL$FS | grep $LOCAL_POOL$FS@`
      do
          if [ "${R##*@}" = "${L##*@}" ]; then
             RECENT_COMMON_SNAPSHOT=${R##*@}
             INCREMENTAL="-I $REMOTE_POOL$FS@$RECENT_COMMON_SNAPSHOT"
          fi
      done
      REMOTE_LATEST_SNAPSHOT=${R##*@}
   done

   echo "Syncronizing remote FS to local"

   echo "zfs send -R $INCREMENTAL $REMOTE_POOL$FS@$REMOTE_LATEST_SNAPSHOT"

   $SSHCMD "zfs send -R $INCREMENTAL $REMOTE_POOL$FS@$REMOTE_LATEST_SNAPSHOT" | \
   /usr/local/bin/pipemeter --autooff --blocksize 16M --interval 60 --log | zfs receive -dF $LOCAL_POOL

   if [ $? -eq 0 ]; then
      echo "Cleaning useless remote snapshots"
      $SSHCMD "zfs list -r -t snapshot -o name -H $REMOTE_POOL$FS  | grep \"$SNAPSHOTMARK\" | \
      egrep -v  \"@($RECENT_COMMON_SNAPSHOT|$REMOTE_LATEST_SNAPSHOT)\" | xargs -I% sudo zfs destroy %"
   fi

   echo "Done."
   ) 2>&1 | logger -s -p ftp.info -t SYNCZFS

Сам скрипт запускается на резервном сервере из cron следующим образом

   */1 * * * * root  /usr/sbin/daemon -p /var/run/zfs-sync.pid -f /root/zfs-nrt-replication.sh > /dev/null

Итак, на резервном сервере скрипт запускается каждую минуту, но если он еще не закончил свое выполнение с прошлого запуска, то попытка пропускается.  Весь вывод скрипта направляется в лог-файл /var/log/xferlog. Для более наглядной оценки скорости используется дополнительное ПО [[http://www.freshports.org/sysutils/pipemeter/ pipemeter]], в результате чего в лог файл, с минутным интервалом, добавляется информация об объеме передаваемых данных, а так же скорости обмена.

Дополнительно, можно настроить [[http://andyleonard.com/2010/04/07/automatic-zfs-snapshot-rot.../ автоматический снапшотинг]], чтобы иметь версии виртуальных машин различной степени давности (часовой, дневной, недельной и т.д.). Эти версии так же будут реплицироваться на резервный сервер.

И теперь, в случае обнаружения отказа в работе основного сервера, администратору остается запустить виртуальную машину на резервном сервере, но и этот процесс так же можно автоматизировать, но это материал еще для одной статьи :)


URL:
Обсуждается: http://www.opennet.ru/tips/info/2499.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от universite email(ok) on 14-Дек-10, 00:48 
zfSnap более удобен для автоматического бэкапа.
Может, вам стоит донастроить HAST ?
Да и секьюрность не мешало бы прикрутить получше...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от Алексей Волков on 14-Дек-10, 08:47 
HAST это замечательно, но на сколько мне известно, он пока не умеет больше чем два хоста (мастер, слейв), и это еще не production quality. Данный вариант работает в том числе и в режиме multiple slave.

Для истории самих снапшотов, на сервере настроен http://people.freebsd.org/~rse/snapshot/ (аналог zfSnap)

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от ffirefox on 14-Дек-10, 06:17 
Может Я плохо смотрю, но кэширование (очень агрессивное) самого VirtualBox как-то учитывается?
Боюсь, что в таком варианте, велика вероятность, что образы будут битые. (Особенно, если там какой-нибудь сервер базы данных крутится, или win контролер домена)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от Алексей Волков on 14-Дек-10, 08:48 
Мне каджется, что Вы плохо понимаете суть репликации снимков фс. То о чем Вы говорите свойственно rsync.
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

10. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от Одмин on 14-Дек-10, 20:55 
снапшот может сделаться во время того как virtualbox на диск писать будет.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

13. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от redixin email on 15-Дек-10, 16:31 
Образы будут битые 100%. Это как отключить от машины винт на ходу, а потом воткнуть его в другую.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

14. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от bahus on 15-Дек-10, 21:11 
абсолютно голословное утверждение, может стоит хотя бы попробовать, прежде чем марать форумы такими паническими заявлениями.
Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

20. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от тень on 20-Дек-10, 23:26 
Ну, я пробовал.
Образ файловой системы виртуальной машины консистентным не является. Консистентным может быть только совокупный образ диска и памяти виртуальной машины.
Все нормальные системы бэкапа виртуалок либо штатно гасят машину перед снятием образа, либо при помощи специального агента заставляет виртуалку сбросить все кэши и буферы, и ставит снапшот сразу после окончания этой транзакции.
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

5. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от gluk email on 14-Дек-10, 10:05 
Скажите а вы рассматривали возможность реализации такого же функционала на opensolaris-134 или openindiana-147? В них ZFS работает отменно, более свежая версия, 28 в отличие от максимум 15-й на FreeBSD, VirtualBox - более родной нежели на FreeBSD и не так давно, вроде бы, я там увидел xvm, т.е. xen dom0, версии 3.4.2, кот. сейчас входит в Enterprise решения того же Oracle.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от Алексей Волков on 14-Дек-10, 10:38 
OpenSolaris не использовал. Но не вижу препятсвий тому чтобы данный скрипт не заработал и тем. Более того, вместо sudo целесообразнее настроить ZFS Administration delegation для тех фс, по которым пойдет репликация.

VirtualBox, это частный случай, а уж что и как там крутится поверх фс, не так и важно.

Можно создавать и zfs voluems внутри фс, они тоже будут реплицироваться , т.к. снапшоты включают в себя ВСЕ (как на уровне данных, так и на уровне метаданных).

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от ubique on 14-Дек-10, 11:16 
В рассылке hackers@ или current@ сегодня пробегал обновленный патч для поддержки zfs 28. Так что в 9 уже скорее всего он будет.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

17. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от Денис Юсупов on 16-Дек-10, 22:52 
Он пробегал уже существенно раньше ;)
http://lists.freebsd.org/pipermail/freebsd-current/2010-Augu...
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

8. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от Suntechneg on 14-Дек-10, 12:36 
В самом OpenSolaris есть auto-snapshot сервис. Делает все то же самое. Там есть свои ограничения, но работает четко. Плюс интегрировано с SMF. Так что если что-то в репликации "упало", то сразу сервис в maintenance состоянии получается и можно это ловить через некую систему мониторинга. Документации конечно там немного, с разных источников искать надо. :( Начать можно вот с этого поста разработчика - http://timsfoster.wordpress.com/2009/11/17/new-zfs-auto-snap.../

Ну и как принято в серьезных местах ;) - да у меня вся репликация а продакшене на этом основана!!! :)

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

9. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от gluk email on 14-Дек-10, 12:58 
я собрал себе SAN на ОСоле-134 его функционал удовлетворяет меня процентов на 85. У меня есть старенький NAS на фряхе, но после знакомства с ОСолом для меня стало очевидным и однозначным на чем надо собирать NAS-ы и SAN-ы, но это лично мое мнение и я не собираюсь доказывать истинность моих умозаключений. Фряха у меня стоит и на шлюзе и на NAS-е (как доконфигурю полностью перейду на SAN), и в качестве десктопов для терминальных клиентов. Причем все это работает где-то с 2002 - 2003 г. Но на данный момент я считаю, что для NAS-ов и SAN-ов альтернативы ОСолу пока, что нету. Но это опять таки мое личное мнение. И с ZFS-ом в ОСоле работать как-то спокойней, родное всетаки. Т.к. большинство саночников оракл разогнал и они теперь ваяют каждый отдельно свои проекты, есть неплохие шансы что во фре ZFS допилят до ОСоловского состояния не только по работе в принципе, но и с таким же функционалом и удобством администрирования.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от ананим on 15-Дек-10, 02:28 
а можно поподробнее на каком именно железе и как именно вы собрали себе san?
а то как-то про san не особо вериться. всё-таки это железячное решение и при чём тут ослы - не понятно.
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

15. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от Suntechneg on 16-Дек-10, 09:59 
А про Comstar в OSol слыхали?
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

18. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от ананим on 18-Дек-10, 06:16 
слыхали.
а также про iSCSI, Fibre Channel over Ethernet, ATA over Ethernet, drbd,.....

ps:
>COMSTAR: Common Multiprotocol SCSI Target

а это нифига не san.
поэтому когда пальцы кидаете, смотрите по сторонам. а то или в дверь не пройдёте, или посторонних заденете.

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

23. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от gluk email on 11-Янв-11, 12:18 
для сборки SAN-a брал самое обычное железо, не бренд-овское, мамка asus m2n-sli deluxe, SAN принципиально от NAS-a ничем не отличается. SAN просто раздает дисковые ресурсы по iSCSI, что вообщем мне и надо было. Comstart, классная штука, но пока до нее руки "не дошли". Пока использую для iSCSI старый Соляркин таржет, но он тоже работает стабильно. Гонки по скорости не устараивал, не люблю я этого, хотя для тюнинга zfs есть достаточно возможностей. Comstar буду пробовать уже на OpenIndian-e.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

16. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от sashka_ua on 16-Дек-10, 11:46 
"с элементами отказоустойчивости"

"Именно zfs send/receive будет использован для непрерывной репликации в режиме
близкому к реальному времени.

Репликацией должен заниматься скрипт, запускаемый из cron, интервал запуска 1 минута."

"И теперь, в случае обнаружения отказа в работе основного сервера,
администратору остается запустить виртуальную машину на резервном сервере"

Смишно.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

19. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от anon_krsk on 20-Дек-10, 17:26 
2 сашка_уа
Болтать мы все умеем. Поясните конкретно, что лучшее есть. Всё равно вам понты в карму не зачтутся.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

22. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от sashka_ua on 23-Дек-10, 19:54 
Статья смишна и это очевидно.

xen+drbd+pacemaker - первое что пришло в голову для такой конфигурации. Минимальный конфиг с минимальными усилиями при максимуме результата.

Для труЪ xen с live migration.

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

21. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от moralez on 22-Дек-10, 08:23 
А если грохнется не master-server с FreeBSD, а содержимое виртуалки? И будет оно среплицировано через минуту на рабов и что дальше? %-\
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

24. "Непрерывная репликация ZFS во FreeBSD"  +/
Сообщение от Vadim email(??) on 21-Авг-12, 16:24 
Тут поможет автоматический снапшотинг
Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру