Задача
Получить отказоустойчивый сетевой массив (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