Man вики
Advertisement

Задача

Получить отказоустойчивый сетевой массив (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
ietconf=/etc/ietd.conf

Настроим DRBD диск в качестве единственного источника

echo "Target drbd0" > $ietconf
echo "Lun 1 Path=/dev/drbd0,Type=blockio" >> $ietconf

* В ubuntu server существует проблема параллельного запуска служб. Из-за того, что iscsi иногда стартует при перезагрузке сервера раньше чем drbd, диск корректно не подключается. В качестве решения и временной меры можно применить перезапуск сервиса iscsi target после полной загрузки системы. дописываем в файл /etc/rc.local перед строкой exit 0:

/etc/init.d/iscsitarget start

Для перезапуска служб после настройки без перезагрузки сервера можно использовать следующую последовательность комманд:

/etc/init.d/iscsitarget stop && /etc/init.d/drbd stop
/etc/init.d/drbd start && /etc/init.d/iscsitarget start

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

Advertisement