Фэндом

Man вики

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

41статья на
этой вики
Добавить новую страницу
комментарий1 Поделиться

ЗадачаПравить

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

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

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

Также на Фэндоме

Случайная вики