Отказоустойчивый iSCSI


Получить отказоустойчивый сетевой массив (NAS) с сервисом iSCSI Target для использования совместно с кластером виртуализации, например PROXMOX. Массив должен удовлетворять следущим требованиям:
  • NAS должен физически располагаться на отдельных серверах
  • iSCSI Target должен быть доступен при физическом выходе из строя любого из серверов
  • Восстановление работы при физическом выходе одного из серверов должно выполняться автоматически и занимать не более 2-х секунд.

Подготовка оборудования

Отказоустойчивый сетевой массив будет состоять физически из двух серверов. Необходимо:
  • Два сервера с идентичными настройками и желательно идентичной конфигурацией оборудования
  • На каждом сервере должны быть дополнительно идентичные по размеру тома, например отдельные жесткие диски одной моделью (/dev/sdb). Именно они будут объединены в зеркальный сетевой RAID1 массив.
  • В каждом сервере должна быть дополнительная сетевая карта pci-express, а гнезда их соединены крос-пачкордом. Через него будет выполнятся синхронизация массива, чтобы не перегружать локальную сеть.
  • Встроенные сетевые карты каждого сервера подключаются в общую локальную сеть.

DRBD

Сервер alice 10.0.32.201

  • Устанавливаем DRBD:
apt-get update
apt-get install drbd8-utils -y
modprobe drbd
После установки отредактируем файл конфигурации на сервере alice, закомментировав или удалив все имеющиеся в файле строки и внеся свои
сохраняем копию оригинального конфигурационного файла
cp /etc/drbd.conf /etc/drbd.conf.orig
очищаем конфигурационный файл от содержимого
echo ""> /etc/drbd.conf
nano /etc/drbd.conf
global      { usage-count yes;    }
common      { syncer { rate 1G; } }
resource r0 { protocol C;
                         startup  { become-primary-on both;   }
                         net      { allow-two-primaries;      }
                         on alice { device    /dev/drbd0;
                                    disk      /dev/sdb;
                                    address   10.0.32.201:7789;
                                    meta-disk internal;       }
                         on  bob  { device    /dev/drbd0;
                                    disk      /dev/sdb;
                                    address   10.0.32.202:7789;
                                    meta-disk internal;       }
            }
Создаем массив
drbdadm create-md r0
Запускаем службу
/etc/init.d/drbd start

Сервер bob 10.0.32.202

  • Устанавливаем DRBD:
apt-get update
apt-get install drbd8-utils -y
modprobe drbd
Копируем файл конфигурации с сервера alice
cd /etc
sftp root@10.0.32.201:/etc/drbd.conf
Создаем массив
drbdadm create-md r0
Запускаем службу
/etc/init.d/drbd start
Зупускаем процесс создания сетевого зеркала
drbdadm -- --overwrite-data-of-peer primary all
Процесс можно наблюдать выполнив:
watch -n 0,1 cat /proc/drbd
При работе с массивом дальнейшие действия будут производится с устройством /dev/drbd0. Все, что будет записано на него, автоматически будет скопировано на оба жестких диска /dev/sdb обоих серверов.

ISCSI Target

Настройка выполняется полностью идентично на обоих серверах.

Установка и настройка ISCSI Target

Устанавливаем сервер iSCSI и разрешаем ему запускаться
apt-get install iscsitarget iscsitarget-dkms
Разрешим запуск службы
echo "ISCSITARGET_ENABLE=true" > /etc/default/iscsitarget
Установим путь до файла конфигурации
  • Для Debian и для Ubuntu 12.04LTS
ietconf=/etc/iet/ietd.conf
  • Для ubuntu 10.04 и старее...
ietconf=/etc/ietd.conf
Настроим DRBD диск в качестве единственного источника
echo "Target drbd0" > $ietconf
echo "Lun 1 Path=/dev/drbd0,Type=blockio" >> $ietconf
Запускать iSCSI сервер мы будем только после старта drbd, иначе может сложиться ситуация, когда он запустится а диск еще не инициализирован.
Редактируем стартовый скрипт drbd
nano /etc/init.d/drbd
Ищем поиском [CTRL+W] строку stop) и дописываем перед ней:
      /etc/init.d/iscsitarget start
       ;;
   stop)
Затем запрещаем iscsitarget автоматически запускаться при старте системы
update-rc.d -f iscsitarget remove

Heartbeat

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

Настройка сервера alice

Настройка разрешения имен

Так-как система требует работу через сетевые имена, наиболее надежным способом является метод прямого указания соответствия имен и адресов. Это задается в файле
Добавляем:
echo "10.0.32.201     alice" >> /etc/hosts
echo "10.0.32.202     bob" >> /etc/hosts
Проверяем разрешение имен. Сервер alice должен пинговать сервер bob и наоборот.
ping bob
ping alice

Установка и настройка Heartbeat

Установим пакет из репозитория
apt-get install heartbeat
Далее необходимо создать 3 конфигурационных файла (они будут идентичны для всех серверов)
  • ha.cf содержит базовые настройки кластера
  • authkeys обеспечивает настройку сетевой авторизации
  • haresources содержит описания ресурсных групп
Все три файла должны быть одинаковыми и присутствовать на обеих системах кластера. Мы сначала создаем их на одном сервере, а после просто копируем их с помощью scp.

ha.cfПравить

Основной конфигурационный файл, содержащий массу различных параметров того, как будет осуществляться heartbeat-механизм.
nano /etc/ha.d/ha.cf
bcast eth0
node alice
node bob
realtime true

authkeys

Для корректной работы пакета heartbeat так же необходимо создать файл /etc/ha.d/authkeys с ключами для взаимной аутентификации серверов. В этом файле указывается тип ключа и сам ключ. Можно использовать sha, md5, но чтобы не расходовать ресурсы достаточно использовать crc.
nano /etc/ha.d/authkeys
auth 1
1 sha1 PASSWORD
Необходимо установить права доступа к нему только для root, с набором других прав на файл, сервер откажется стартовать
chmod 600 /etc/ha.d/authkeys

haresourcesПравить

Основным сервер будет alice и в условиях штатной работы адрес 10.0.32.200 будет принадлежать ему. Настроим это:
nano /etc/ha.d/haresources
alice IPaddr::10.0.32.200/24/eth0
Перезагрузим службу:
/etc/init.d/heartbeat restart
После перезапуска служб, адрес 10.0.32.200 должен начать пинговаться в сети.

Настройка сервера bob

echo "10.0.32.201     alice" >> /etc/hosts
echo "10.0.32.202     bob" >> /etc/hosts
apt-get install heartbeat
Скопируем файлы настроек с сервера alice
cd /etc/ha.d/
sftp root@alice:/etc/ha.d/ha.cf
sftp root@alice:/etc/ha.d/authkeys
sftp root@alice:/etc/ha.d/haresources
Перезагрузим службу:
/etc/init.d/heartbeat restart

Действия при авариях

Лечение split-brain

Если случилось так, что каждая нода перешла в автономный режим то делаем следущее:
  • 1. Решаем, какая нода содержит более важные данные (главная), а какую принести в жертву (второстепенная) путем зеркалирования с главной.
  • 2. Заходим на второстепенную и сперва останавливаем iscsi сервер.
/etc/init.d/iscsitarget stop
Затем переключаем том в режим только для чтения
drbdadm secondary r0
И говорим серверу, что согласны с тем, что данные на на нём будут принесены в жертву
drbdadm -- --discard-my-data connect r0
  • 3. Заходим на основной сервер и выполняем подключение к тому
drbdadm connect r0
  • 4. Выполним контроль состояния
cat /proc/drbd
Мы должны увидеть процесс синхронизации, а по его окончанию, убедится, что данные обновлены и снова уникальны:
ds:UpToDate/UpToDate
  • 5. Затем переходим снова на второстепенную ноду и переводим её из режима только для чтения в режим записи (Primary)
drbdadm primary r0
  • 6. Запускаем iscsi сервер на этой ноде
/etc/init.d/iscsitarget start

Замена жесткого диска

  • 1. Отключаем ноду диск/ки в которой нужно заменить.
  • 2. Проверяем, что массив продолжает работать на оставшейся. Её перезагружать и выключать НЕЛЬЗЯ на период работ.
  • 3. Заменяем диск. Размер должен быть больше или равен размеру на оставшейся ноде.
  • 4. Если буква диска изменилась (например создан массив из дисков) необходимо исправить это в файле
nano /etc/drbd.conf
  • 5. Создаем том drbd на новом диске и запускаем drbd
drbdadm create-md r0
/etc/init.d/drbd start
Если все прошло удачно, начнется процесс синхронизации (копирования данных с рабочей ноды на нашу)
cat /proc/drbd
В процессе синхронизации, drbd может быть сильно перегружено и работающие с ним ресурсы могут начать тормозить.
  • Временно снизить скорость синхронизации
drbdsetup /dev/drbd0 syncer -r 10M
  • Вернуть параметры скорости из конфигурационного файла
drbdadm adjust r0

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

Тестирование производительности

Установим утилиты тестирования
apt-get install sysstat atop
Ищем узкие места. Запустим на клиенте, использующем наш сетевой массив процесс записи данных с максимально возможной скоростью. Как пример, запуск теста непрерывной записи в на диск в everest в windows, где диском является iSCSI устройство с нашего массива.
Смотрим, используется ли drbd на 100%
Выполняем на первой ноде:
iostat -xm 5
Смотрим
Device  %util
drbd0   100,00
Значит клиентская сторона использует DRBD диск по максимуму. Выясняем, во что упирается сам drbd. Смотрим параметр %util для дисков входящих в DRBD массив на каждой ноде
Device  wMB/s  %util
sdb     62,40  100,00
Это значит, что скорость ограничена скоростью записи на диск sdb

Комментарии

Популярные сообщения из этого блога

S.M.A.R.T. (часть 3). Расшифровка и понимание SMART атрибутов

S.M.A.R.T. (часть 2). Мониторинг BBU RAID контроллеров

Работаем с RAID в Debian на HP Proliant DL580