О чем мы будем говорить: Как быстро развернуть общее хранилище для двух серверов на базе решений 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:
метадиск внутренний — использовать одни и те же блочные устройства для хранения метаданных устройство /dev/drbd0 — используйте /dev/drbd0 в качестве пути к тому drbd. диск /dev/vdb1 - используйте /dev/vdb1 синхронизатор { скорость 1000M; } — использовать пропускную способность гигабитного канала разрешить два основных цвета - важная опция, позволяющая принимать изменения на двух основных серверах после-сб-0при, после-сб-1при, после-сб-2при — опции, отвечающие за действия узла при обнаружении Splitbrain. Более подробную информацию можно найти в документации.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; } }
стать первичным на обоих — устанавливает оба узла в качестве основных.
В нашем случае мы имеем две абсолютно одинаковые ВМ, с выделенной виртуальной сетью с пропускной способностью 10 гигабит.
В нашем примере сетевые имена двух узлов кластера — drbd1 и drbd2. Для корректной работы вам необходимо сопоставить имена и IP-адреса хостов в файле /etc/hosts. 10.10.10.192 drbd1
10.10.10.193 drbd2
Шаг 2. Настройте узлы:
На обоих серверах запускаем: drbdadm create-md drbd0
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
Мы получаем следующее:
Вы можете начать синхронизацию.
На первом узле вам необходимо выполнить: drbdadm primary --force drbd0
Посмотрим на статус: cat /proc/drbd
Отлично, синхронизация началась.
Ждем до конца и видим картину:
Шаг 3. Запускаем синхронизацию на втором узле: drbdadm primary --force drbd0
Мы получаем следующее:
Теперь мы можем писать в 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, используя параметры по умолчанию.
В /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
-
Отдам В Хорошие Руки...
19 Oct, 24 -
Является Ли Клавиатура Устройством Вывода?
19 Oct, 24 -
«Пикник С Инвесторами» Состоится 30 Мая
19 Oct, 24 -
Радость Геймеров, Гибель Жабы: Asus G20Cb
19 Oct, 24