Кластер файловый сервер linux

Кластер файловый сервер linux

Создание отказоустойчивого кластерного файлового сервера SMB/CIFS(samba).

Mobirise Website Builder

Предварительные настройки.

На обоих узлах необходимо настроить 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

Синхронизация данных:

Читайте также:  Linux connect to windows cmd

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″ тип файловой системы

Читайте также:  Install vim linux ubuntu

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)

Читайте также:  Установить видеодрайвер amd линукс

Правим конфиг 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

Источник

Оцените статью
Adblock
detector