The OpenNET Project / Index page

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

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

"Раздел полезных советов: Создание отказоустойчивых хранилищ ..."  +/
Сообщение от auto_tips (ok) on 13-Окт-10, 04:20 
++ Введение.

HAST (Highly Avalible Storage) технология позволяющая создавать отказоустойчивые хранилища (Primary-Secondary) используя несколько машин. Эта технология может помочь при создании кластера высокой доступности (HA). HAST появился в FreeBSD начиная с 8.1. В текущей версии HAST можно использовать только две машины. HAST работает на уровне блоков и не зависит от файловой системы, т.е. можно использовать ZFS или UFS.

Эта технология работает по TCP. Для работы используется демон hastd и утилита для управления hastctl.

++ Использование.

Имеем две машины (ноды)
   host1 192.168.1.2
   host2 192.168.1.9

на обоих машинах стоит дополнительный диск ad3.
HAST готов к использованию сразу, без дополнительных установок. Для конфигурирования создадим файл /etc/hast.conf

   resource my {
       on host1 {
               local /dev/ad3
               remote 192.168.1.9
       }
       on host2 {
               local /dev/ad3
               remote 192.168.1.2
       }
   }

т.е. host1 имеет диск ad3 и синхронизируется с 192.168.1.9 (host2), а для host2 соответственно наоборот.

Сделайте такой же файл на другой машине.

   host1# hastctl create my
   host1# hastd

После этого демон должен запустится, проверим, что все работает

   host1# hastctl status

должно выдать вроде этого

   my:
   role: init
   provname: my
   localpath: /dev/ad3
   extentsize: 0
   keepdirty: 0
   remoteaddr: 192.168.1.2
   replication: memsync
   dirty: 0 bytes

Сделаем такие же действия на другой ноде

   host2# hastctl create my
   host2# hastd

Теперь раздадим роли машинам. Например, host1 будет главным, а host2 - резервным.

   host1# hastctl role primary my
   host2# hastctl role secondary my

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

   host1# hastctl status
   my:
    role: primary
    provname: my
    localpath: /dev/ad3
    extentsize: 2097152
    keepdirty: 0
    remoteaddr: 192.168.1.9
    replication: memsync
    status: complete
    dirty: 0 bytes

Для нас важно, чтобы был статус complete. Если статус другой, проверяем, что не так.

Теперь создадим файловую систему. Не смотря на то что можно использовать UFS лучше использовать ZFS, чтобы не приходилось запускать fsck.

Создадим пул используя появившееся устройство /dev/hast/my

   host1# zpool create mydisk /dev/hast/my
   host1# zpool list
   NAME     SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
   mydisk    95G  84.5K    95G     0%  ONLINE  -

На второй машине этого делать не надо.
HAST настроен.

++ Тестирование.

Создадим несколько файлов в mydisk и протестируем нашу систему. Для тестирования перезагрузим ноду с primary, т.е. host1.
После перезагрузки посмотрим состяние пула

   host1# zpool list
   NAME     SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
   mydisk    -               -             -         -       FAULTED          -

Это случилось потому что пропало устройство /dev/hast/my Экспортируем пул и поменяем роль host1 на secondary

   host1# zpool export -f my
   host1# hastctl role secondary my

А host2 сделаем основным и импортируем пул.

   host2# hastctl role primary my
   host2# zpool import -f mydisk
   host2# zpool list
   NAME     SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
   mydisk    95G    84.5K    95G     0%    ONLINE          -

Проверим наши файлы, они должны остаться.

++ Ошибки.

По умолчанию логи можно посмотреть в /var/log/message.
В результате некоторых действий можно добиться ситуации, когда вы обнаружите в логах запись Split brain - разделение сознания.

Это означает, что каждая из нод думает, что она главная и живет собственной жизнью. Такое может произойти если вы умудритесь
записать разную информацию на нодах или поставить обои машины в роль primary. Исправить эту ситуацию можно выбрав ту машину которая будет у вас secondary, и нужно сделать на ней:

   hastctl role init my
   hastctl create my
   hastctl role secondary my

После этого должен запуститься процесс синхронизации. Он может занять продолжительное время.


++ Автоматизация.

Эта система сделана для кластеризации, а именно для кластера высокой доступности. Например можно воспользоваться CARP
чтобы сделать постоянным. Можно написать собственные скрипты, а можно воспользоваться стандартными. Автором HAST уже написаны готовые скрипты которые умеют определять на какой ноде сейчас primary.

Для работы следует установить ucarp:

   cd /usr/ports/net/ucarp
   make && make install clean && rehash

Скрипты находятся в /usr/share/expamles/hast/
Скопируйте их в /домашний каталог/sbin/hastd/ так предлагается по умолчанию и отредактируйте переменные в начале скриптов

   ucarp.sh, ucarp_down.sh, ucarp_up.sh

Сделайте это на обоих нодах и запустите ucarp.sh на обоих нодах.

++ Дополнительные возможности.

У HAST существует три типа репликаций. Они различаются тем когда данные считаются записанными.

* memsync - Данные операции записи считаются завершенными когда запись локальна завершена
и когда удаленный узел принял данные, но до того как записать данные. Данные на удаленной ноде начинают
писаться, как только отправлен ответ.

* fullsync - Данные операции записи считаются завершенными когда запись завершена локально и на
удаленной ноде запись тоже завершена.

* async - Данные записи считаются завершенными когда запись завершена локально. Это наиболее быстрый способ записи.

На момент написания статьи работает только memsync.
Дополнительную информацию можно прочитать на http://wiki.freebsd.org/HAST

++ Заключение.

HAST только появился, у него богатые возможности для организации хранилища высокой доступности. В данный момент еще не все работает, но это хорошее начало для кластеризации на FreeBSD.

Перед тем как работать с HAST в боевых условиях рекомендую потренироваться. У меня были ситуации, когда secondary не хотел брать данные с primary, было что неаккуратные движения приводили к "Split Brain". Данные, правда, потеряны не были, но много времени было потеряно на синхронизации.

URL: http://rubuntu.livejournal.com/4629.html
Обсуждается: http://www.opennet.ru/tips/info/2453.shtml

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

Оглавление

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


1. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от Ян Злобин email(ok) on 13-Окт-10, 04:20 
Интересующимся неплохо было бы прочитать статью на вики основного проекта с примерами скриптов: http://wiki.freebsd.org/HAST
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от mef (ok) on 13-Окт-10, 09:24 
Те скрипты, которые указаны на wiki находятся в /usr/share/expamles/hast/
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от Ян Злобин email(ok) on 13-Окт-10, 09:31 
> Те скрипты, которые указаны на wiki находятся в /usr/share/expamles/hast/

Ну да, об этом и в статье сказано.  Все равно прочитать полезно.  Мне так помогло, вот и поделился - может, еще кому-то поможет.

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

2. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от Аноним (??) on 13-Окт-10, 09:15 
спасибо, полезно.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от anonymous (??) on 13-Окт-10, 09:35 
А split-brain он каким образом разруливает? К примеру, при потере связи каждая нода считает себя primary и пишет на диск. Через полчаса связь восстанавливается, но получается яркий пример split-brain.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от Sw00p aka Jerom email on 13-Окт-10, 10:30 
в хасте естЬ механизм фейловера ?? а зачем тады карп ?
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от Аноним (??) on 13-Окт-10, 15:28 
да про карп хотелось бы поподробнее зачем он здесь используется?

В принципе интересна ситуация когда есть два хоста в файл-овер режиме, и для клиентов они имеют один IP, при вылете любой ноды вторая подхватывает общий IP. Кажется это имелось ввиду. Только расписать бы все это подробнее.

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

11. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от Ян Злобин email(ok) on 14-Окт-10, 05:08 
>да про карп хотелось бы поподробнее зачем он здесь используется?
>да про карп хотелось бы поподробнее зачем он здесь используется?
>В принципе интересна ситуация когда есть два хоста в файл-овер режиме, и для клиентов они имеют >один IP, при вылете любой ноды вторая подхватывает общий IP. Кажется это имелось ввиду. Только >расписать бы все это подробнее.В принципе интересна ситуация когда есть два хоста в файл-овер >режиме, и для клиентов они имеют один IP, при вылете любой ноды вторая подхватывает общий IP. >Кажется это имелось ввиду. Только расписать бы все это подробнее.

Ну да, для этого и используется.  Есть системный carp, а есть ucarp, то есть user level carp.  Есть варианты как его использовать при падении одного из узлов.  В манах довольно подробно.

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

9. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от mef (ok) on 13-Окт-10, 17:53 
Failover в HAST`е нет как такового (под HAST подразумеваю демон hastd+hastctl). Он работает в режиме Primary-Master, но там есть все чтобы можно было сделать failover, в качестве примера разработчик рекомендует воспользоваться уже готовыми скриптами. Собственно CARP - это уже к пример применения HAST, т.е. для доступа по 1 IP к отказоустойчивому хранилищу.
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

7. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от mef (ok) on 13-Окт-10, 10:44 
> А split-brain он каким образом разруливает? К примеру, при потере связи каждая
> нода считает себя primary и пишет на диск. Через полчаса связь
> восстанавливается, но получается яркий пример split-brain.

Как только связь теряется, то нода с Primary становится Secondary, а нода с Secondary становится Primary, обе ноды не будут Primary. Split Brain - исключительная ситуация, ее можно добиться, если, например, принудительно выставить обе ноды в Primary и в этом случае надо самому вмешаться и выбрать какая из нод для Вас важна.

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

10. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от non anon on 13-Окт-10, 18:47 
А как там с производительностью? Какой-нибудь сервис можно поверх этого запустить, чтобы не тормозило?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от mef (ok) on 17-Окт-10, 16:06 
> А как там с производительностью? Какой-нибудь сервис можно поверх этого запустить, чтобы
> не тормозило?

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

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

13. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от fox email(??) on 25-Янв-11, 02:40 
А как вообще можно для двух нодов организовать общий айпишник который будут видеть клиенты?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

14. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от hm (??) on 10-Фев-11, 05:16 
Это не лоад-балансир, а хай-эвэйлэбилити.
Поэтому ПИСАТЬ на обе ноды нельзя.
Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от chillivilli4 email on 10-Фев-11, 12:33 
Не получается натсроить (( пишет  hastd: [mirror] (primary) Unable to connect to 10.0.0.10: Operation timed out. Хотя на обеих нодах порт слушается hastd. У кого уже в продакшене работает подскажите куда смотреть, почему ноды не видят друг-друга?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

16. "Создание отказоустойчивых хранилищ во FreeBSD, при помощи HAST"  +/
Сообщение от mef (ok) on 13-Фев-11, 20:24 
telnet проходит?
Покажи конфиг  hast.conf
Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

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

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




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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