Кластерное Хранилище Для Небольших Веб-Кластеров На Базе Drbd+Ocfs2

О чем мы будем говорить: Как быстро развернуть общее хранилище для двух серверов на базе решений drbd+ocfs2. Кому это будет полезно: Учебник будет полезен системным администраторам и всем, кто выбирает способ реализации хранилища или хочет опробовать решение.



От каких решений мы отказались и почему?

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

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

Сейчас мы расскажем вам, почему.

Glusterfs не удовлетворил нас производительностью чтения и записи; были проблемы с одновременным чтением большого количества файлов, была высокая нагрузка на процессор.

Проблему с чтением файлов можно было бы решить, обратившись к ним напрямую из кирпича, но это не всегда применимо и в целом неверно.

Ceph не понравилась излишняя сложность, которая может быть вредна на проектах с 2-4 серверами, особенно если проект впоследствии поддерживается.

Опять же, существуют серьезные ограничения производительности, которые вынуждают нас создавать отдельные кластеры хранения, как в случае с glusterfs. Использование одного сервера NFS для реализации общего хранилища вызывает вопросы с точки зрения отказоустойчивости.

s3 — отличное популярное решение для определенного круга задач, но это не файловая система, что сужает область ее применения.

lsyncd. Если мы уже заговорили о «нефайловых системах», то стоит рассмотреть это популярное решение.

Мало того, что он не подходит для двустороннего обмена (но если очень захотеть, то можно), так еще и не стабильно работает на большом количестве файлов.

Приятным дополнением ко всему является то, что он является однопоточным.

Причина в архитектуре программы: она использует inotify для мониторинга рабочих объектов, которые назначает при запуске и при повторном сканировании.

В качестве среды передачи используется rsync.

Учебник: как развернуть общее хранилище на базе drbd+ocfs2

Одним из самых удобных решений для нас стала ссылка ocfs2+drbd .

Сейчас мы расскажем, как можно быстро развернуть общее хранилище для двух серверов на базе базы данных решения.

Но сначала немного о компонентах: ДРБД — система хранения из стандартного дистрибутива Linux, позволяющая реплицировать данные между серверами блоками.

Основное применение — создание отказоустойчивого хранилища.

OCFS2 — файловая система, обеспечивающая совместное использование одного и того же хранилища несколькими системами.

Входит в дистрибутив Linux и представляет собой модуль ядра и пользовательские инструменты для работы с ФС.

OCFS2 можно использовать не только через DRBD, но и через iSCSI с несколькими соединениями.

В нашем примере мы используем DRBD. Все действия выполняются на сервере Ubuntu 18.04 в минимальной конфигурации.

Шаг 1. Настройте DRBD: В файле /etc/drbd.d/drbd0.res описываем наше виртуальное блочное устройство /dev/drbd0:

  
  
  
  
  
  
  
  
  
  
  
  
   

resource drbd0 { syncer { rate 1000M; } net { allow-two-primaries; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } startup { become-primary-on both; } on drbd1 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.192:7789; } on drbd2 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.193:7789; } }

метадиск внутренний — использовать одни и те же блочные устройства для хранения метаданных устройство /dev/drbd0 — используйте /dev/drbd0 в качестве пути к тому drbd. диск /dev/vdb1 - используйте /dev/vdb1 синхронизатор { скорость 1000M; } — использовать пропускную способность гигабитного канала разрешить два основных цвета - важная опция, позволяющая принимать изменения на двух основных серверах после-сб-0при, после-сб-1при, после-сб-2при — опции, отвечающие за действия узла при обнаружении Splitbrain. Более подробную информацию можно найти в документации.

стать первичным на обоих — устанавливает оба узла в качестве основных.

В нашем случае мы имеем две абсолютно одинаковые ВМ, с выделенной виртуальной сетью с пропускной способностью 10 гигабит. В нашем примере сетевые имена двух узлов кластера — drbd1 и drbd2. Для корректной работы вам необходимо сопоставить имена и IP-адреса хостов в файле /etc/hosts.

10.10.10.192 drbd1 10.10.10.193 drbd2

Шаг 2. Настройте узлы: На обоих серверах запускаем:

drbdadm create-md drbd0



Кластерное хранилище для небольших веб-кластеров на базе drbd+ocfs2



modprobe drbd drbdadm up drbd0 cat /proc/drbd

Мы получаем следующее:

Кластерное хранилище для небольших веб-кластеров на базе drbd+ocfs2

Вы можете начать синхронизацию.

На первом узле вам необходимо выполнить:

drbdadm primary --force drbd0

Посмотрим на статус:

cat /proc/drbd



Кластерное хранилище для небольших веб-кластеров на базе drbd+ocfs2

Отлично, синхронизация началась.

Ждем до конца и видим картину:

Кластерное хранилище для небольших веб-кластеров на базе drbd+ocfs2

Шаг 3. Запускаем синхронизацию на втором узле:

drbdadm primary --force drbd0

Мы получаем следующее:

Кластерное хранилище для небольших веб-кластеров на базе drbd+ocfs2

Теперь мы можем писать в drbd с двух серверов.

Шаг 4. Установите и настройте ocfs2. Мы будем использовать довольно тривиальную конфигурацию:

cluster: node_count = 2 name = ocfs2cluster node: number = 1 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.192 name = drbd1 node: number = 2 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.193 name = drbd2

Это нужно записать в /etc/ocfs2/cluster.conf на обоих узлах.

Создаем ФС на drbd0 на любой ноде:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Здесь мы создали файловую систему с меткой testVol на drbd0, используя параметры по умолчанию.



Кластерное хранилище для небольших веб-кластеров на базе drbd+ocfs2

В /etc/default/o2cb нужно установить (как в нашем файле конфигурации)

O2CB_ENABLED=true O2CB_BOOTCLUSTER=ocfs2cluster

и выполнить на каждом узле:

o2cb register-cluster ocfs2cluster

Затем включаем и добавляем в автозапуск все нужные нам юниты:

systemctl enable drbd o2cb ocfs2 systemctl start drbd o2cb ocfs2

Некоторые из них уже будут запущены в процессе установки.

Шаг 5. Добавьте точки монтирования в fstab на обоих узлах:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

Каталог /медиа/общий его необходимо создать заранее.

Здесь мы используем опции noauto, что означает, что файл не будет монтироваться при запуске (я предпочитаю монтировать сетевые файлы через systemd) и heartbeat=local, что означает использование службы heartbeat на каждом узле.

Существует также глобальное сердцебиение, которое больше подходит для больших кластеров.

Далее вы можете смонтировать /медиа/общий и проверьте синхронизацию контента.

Готовый! В результате мы получаем более-менее отказоустойчивое хранилище с масштабируемостью и достойной производительностью.

Теги: #Системное администрирование #Конфигурация Linux #кластеризация #linux-сервер #системы хранения данных #хранилище файлов #DRBD #ocfs2

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.