Кластер файловый сервер linux
Создание отказоустойчивого кластерного файлового сервера SMB/CIFS(samba).
Предварительные настройки.
На обоих узлах необходимо настроить bind9 с зоной,bash alias, доступ по ssh root,без парольный доступ по ssh, Keepalived и маршрутизацию можно не настраивать примеры тут.
На обоих узлах установить Corosync , Pacemaker и crm примеры тут , PCS не устанавливать.
Виртуальные машины или физические сервера должны быть с дополнительными жесткими дисками.
DRBD:
Подготовка узлов:
Просмотр блочных устройств,должны увидеть дополнительные жесткие диски
Установка и настройка:
На каждом узле отдельно в ubuntu, в debian можно и с одного узла.
node1:~# apt install drbd-utils -y
node2:~# apt install drbd-utils -y
В ubuntu postfix установится автоматически, в debian его необходимо установить вручную(нужен для отчетов о актуальности данных в ситуации Split-Brain от DRBD).
node1:~# apt install postfix -y
На вопросы жмем Tab Ок Enter всё оставляем по умолчанию.
node2:~# apt install postfix -y
На вопросы жмем Tab Ок Enter всё оставляем по умолчанию.
Создаем файл конфигурации DRBD
node1:~# vim /etc/drbd.d/r0.res
resource r0 < # название ресурса, в данном случае r0
syncer < rate 1000M; ># скорость синхронизации
handlers <
split-brain «/usr/lib/drbd/notify-split-brain.sh root»; # обработчик ситуации split-brain
>
on node1.corp1.un <
device /dev/drbd0; # драйвер drbd
disk /dev/sdb;
# disk /dev/sdb1; # если диски на серверах разного размера, то делаем одинаковые разделы
# address 192.168.1.1:7788; # для прямой линии связи между нодами через отдельную сеть
address 172.16.1.1:7788;
meta-disk internal;
>
on node2.corp1.un <
device /dev/drbd0;
disk /dev/sdb;
# disk /dev/sdb1;
# address 192.168.1.2:7788;
address 172.16.1.2:7788;
meta-disk internal;
>
>
node1:~# scpn2 /etc/drbd.d/r0.res
Инициализация:
На обоих узлах
node1:~# drbdadm create-md r0
node1:~# sshn2 drbdadm create-md r0
Запуск одновременно на двух узлах(узлы будут ожидать начала работы друг друга):
Запущенный процесс
Состояние RAID
состояние ro:Secondary/Secondary ds:Inconsistent/Inconsistent означает, что данные не синхронизированы
Состояние RAID интерактивно
Просмотр ресурсов
node1:~# drbdadm sh-resources
Состояние соединения
node1:~# drbdadm cstate r0
Состояние синхронизации
node1:~# drbdadm dstate r0
Синхронизация данных:
node1:~# drbdadm — —overwrite-data-of-peer primary r0
Теперь смотрим состояние RAID
состояние ro:Primary/Secondary ds:UpToDate/UpToDate первый узел стал основным и данные синхронизировались
Форматирование раздела и монтирование файловой системы:
можно не ожидая окончания синхронизации
node1:~# mount /dev/drbd0 /disk2
Смена ролей узлов:
Закинем любой файл на диск
node1:~# cp /etc/hostname /disk2
Назначим первый узел вторичным
node1:~# drbdadm secondary r0
Второй узел сделаем первичным,примонтируем диск и убедимся,что ранее скопированный файл доступен
node2:~# mount /dev/drbd0 /disk2
Если при отмонтировании или переводе узла в режим вторичного вылезает ошибка,то включаем drbd в blacklis сервиса multipath(в debian 11 не нужно,актуально для ubuntu)
node1:~# vim /etc/multipath.conf
.
blacklist <
devnode «^(ram|zram|raw|loop|fd|md|dm-|sr|scd|st|drbd)1*»
>
.
node1:~# scpn2 /etc/multipath.conf
node1:~# service multipathd restart
node1:~# sshn2 service multipathd restart
Далее отключаем зеркалируемый раздел:
node2:~# drbdadm secondary r0
Интеграция DRBD и Pacemaker:
Установим утилиту на оба узла psmisc(нужна для монтирования-отмонтирования при помощи Pacemaker)
node1:~# apt install psmisc -y
node1:~# sshn2 apt install psmisc -y fuser
Останавливаем drbd и исключаем из автозагрузки на обоих узлах
node1:~# systemctl stop drbd.service
node1:~# sshn2 systemctl stop drbd.service
node1:~# systemctl disable drbd.service
node1:~# sshn2 systemctl disable drbd.service
Запуск сервиса:
Создаем примитив с именем «pr_drbd_r0», примитив запускает этот скрипт «ocf:linbit:drbd», с параметром названия ресурса «r0»
configure# primitive pr_drbd_r0 ocf:linbit:drbd params drbd_resource=»r0″
Создаем объект ms с именем «ms_drbd_r0» и он говорит, что в отношении ранее созданного примитива «pr_drbd_r0″ должны быть назначены теги: master-max=»1″ максимум мастер узлов, master-node-max=»1″ один узел должен быть мастером; clone-max=»2″ максимум вторичных узлов, clone-node-max=»1″ один узел должен быть вторичным; notify=»true» разрешить взаимодействие между узлами
configure# ms ms_drbd_r0 pr_drbd_r0 meta master-max=»1″ master-node-max=»1″ clone-max=»2″ clone-node-max=»1″ notify=»true»
node1:~# cat /proc/drbd
Один узел должен стать основным, второй вторичным
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r——
Монтирование раздела:
node1# crm configure
Создаем примитив с именем «pr_fs_r0», который запускает скрипт «ocf:heartbeat:Filesystem» с параметрами: device=»/dev/drbd0″ что монтируем, directory=»/disk2″ куда монтируем, fstype=»ext4″ тип файловой системы
configure# primitive pr_fs_r0 ocf:heartbeat:Filesystem params device=»/dev/drbd0″ directory=»/disk2″ fstype=»ext4″
Следующая инструкция говорит, что монтировать файловую систему надо на том узле,который является основным
configure# colocation col_fs_on_drbd inf: pr_fs_r0 ms_drbd_r0:Master
Далее идет объект с именем «or_fs_after_drbd» управляющий порядком срабатывания примитивов, с начала необходимо что-бы отработал примитив «ms_drbd_r0» назначения основного и подчиненного узла, а только потом примитив монтирования файловой системы «pr_fs_r0»
configure# order or_fs_after_drbd Mandatory: ms_drbd_r0:promote pr_fs_r0:start
Теперь можно по-перемещать раздел с узла на узел
Перемещение раздела:
Привязывает объект на тот узел на который переместили
Если раздел смонтирован на node1
node1:~# crm resource move pr_fs_r0 node2
node1:~# crm resource move pr_fs_r0 node1
Добавим приоритет первого узла принудительно(если узел доступен,то он всегда будет мастер)
node1:~# crm configure delete cli-prefer-pr_fs_r0
node1:~# crm configure location cli-prefer-pr_fs_r0 pr_fs_r0 role=Started inf: node1
node1:~# mount | grep ext4
Настройка NAS сервера SMB/CIFS:
Добавляем запись в зону dns
node1:~# vim /etc/bind/corp1.un
.
fs A 172.16.1.30
.
node1:~# scpn2 /etc/bind/corp1.un
Устанавливаем на оба узла сервис samba
node1:~# apt install samba -y
node1:~# sshn2 apt install samba -y
Останавливаем и отключаем автоматический запуск сервиса
node1:~# service smbd stop
node1:~# service nmbd stop
node1:~# sshn2 service smbd stop
node1:~# sshn2 service nmbd stop
node1:~# systemctl disable smbd
node1:~# systemctl disable nmbd
node1:~# sshn2 systemctl disable smbd
node1:~# sshn2 systemctl disable nmbd
Создаем каталог на disk2 с названием samba и меняем владельца на пользователя games у этого каталога(пользователь games существует по умолчанию в debian и ubuntu)
node1:~# mkdir -p /disk2/samba && chown games /disk2/samba
(Для того чтобы зайти в шару без пароля, в windows 10 и выше надо разрешить небезопасные подключения клиента lanman, для этого:
Поиск => Изменение групповой политики => Политика локальный компьютер => Конфигурация компьютера => Административные шаблоны => Сеть => Рабочая станция Lanman => Включить не безопасные гостевые входы – выбрать «включить» и нажать Ok)
Правим конфиг samba
node1:~# vim /etc/samba/smb.conf
[global]
unix charset = UTF-8
dos charset = cp866
workgroup = CORP1
security = user
map to guest = Bad User
[pub_share]
path = /disk2/samba
guest ok = yes
read only = no
force user = games
node1:~# scpn2 /etc/samba/smb.conf
Настраиваем менеджер кластера на монтирование на мастер узле зеркалируемого раздела в каталог /disk2, назначение ip адреса 172.16.1.30 и запуск сервера samba
Создаем примитив с названием «pr_srv_smbd» , который запускает smbd демон через systemd
configure# primitive pr_srv_smbd systemd:smbd
Создаем примитив с именем «pr_ip_smbd» ,который назначает ip на сетевой интерфейс через скрипт хартбита
configure# primitive pr_ip_smbd ocf:heartbeat:IPaddr2 params ip=172.16.1.30 cidr_netmask=32 nic=enp0s3
Создаем группу из ранее созданных примитивов
configure# group gr_ip_fs pr_fs_r0 pr_ip_smbd pr_srv_smbd
На node1 должна быть смонтированная файловая система, назначен ip 172.16.1.30 и запущена сама samba
Тестирование:
Закидываем в публичную шару любой файл
Останавливаем MASTER сервер и дожидаемся монтирования на SLAVE узле “половины” зеркалируемого раздела в каталог /disk2, назначение ip адреса 172.16.1.30 и запуск сервера samba
Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала
Ситуация SplitBrain:
Закидываем на сервер samba текстовый файл
Редактируем этот текстовый файл текстовым редактором и сохраняем
Выключаем node1, после включаем node2
Редактируем тот-же файл редактором,сохраняем,после этого включаем node1
Получилось так,что файл имеющийся на диске имеет разные версии редактирования
node1:~# cat /proc/drbd
cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r——
В данной ситуации придется принять решение системному администратору о актуальности данных и указать это вручную.
Выбираем узел, данные которого будут затерты
nodeX:~# service pacemaker stop
nodeX:~# drbdadm invalidate r0
nodeX:~# service pacemaker start
Письма о SplitBrain так-же приходят на почтовый ящик root
Так-же можно настроить доступ к шаре по паролю и т.д Настройка сервера samba.
© Copyright 2022 64-bits.ru — All Rights Reserved