Кластер файлового сервера linux
Все-таки система получается необновляемой. Неужели действительно тяжело собрать через rpmbuild нативно, и написать в спеке те опции сборки, что нравятся?
А кто будет следить за _версиями_ (не коммитов, а ПО), за необходимостью обновления, и т д?
Может быть, еще парсилку комментариев напишем, и внесем в скрипт, который будет по ssh в цикле обходить машины, проверять, и т д?
Чем это лучше LFS? Зачем вообще тогда брать какой-то дистрибутив?
Альтернатива, не изобретение велосипедов. Например, для RH платформы, использованной автором(CentOS, RHEL, Fedora и все остальные) есть очень и очень удобный инструмент для управления ПО:
(если закрыть глаза на Жабу и Оракл, каналы с ПО просто потрясающе удобно!)
У SLE (ZenWorks) и у Ubuntu (LaunchPad) есть аналогичные решения (я с ними не работала, и удобность, плюсы и минусы прокомментировать не могу)
Даже чистые rpm(что стоит только rpm -V), dpkg, yum, up2date, zypper, apt/aptitude, если не боятся ими пользоваться, умеют гораздо больше, и являются инструментами, созданными специально для этой цели.
В конце концов, есть порты в той же Gentoo и FreeBSD, хотите все собирать, но ленитесь править спек rpm-а (а поправить строчку с configure в секции %build в vim можно парой-тройкой команд 🙂 ), мешает религия? Есть системы, которые ориентированы на source-бэйсед подход (что и там, особенно во фре, не мешает пользоваться бинарными пакетами)
А зачем? Работает — нетрож, глючит проверяй.
Вон блин, в Дебиане, grub самообновился до grub2, а я его с утра и не узнал.
Записываем: за версиями будет следить друхх павлина Глючит-Проверяй! |-)
где-то туда, иногда надо переносить не бинарники, а строку для кофигуре Вот у . текст свёрнут, показать
И Истина открылась непросвещённым И возрадовались они И поверили в Путь Бээсдэ. текст свёрнут, показать
Ну, я тоже те спеки, что правила, в Subversion храню И все-таки Вы не правы . текст свёрнут, показать
gt оверквотинг удален zypper up Загрузка данных о репозиториях Чтение уст. большой текст свёрнут, показать
Ждем пока собирутся пакеты
8 * 4 = 32 Мбит — это скорость в хреновой сети на хабах, с сетевухами Realtek 8139
>Samba без CTDB
>2,15
>2,16
>2,13
>2,09
см. выше
>Samba + CTDB
>24,73
>23,42
>23,26
>23,15
> Сервер был доступен по кналу 1 Гб/с,
>поэтому суммарно использовано около 75% пропускной способности.
А по-моему 19.2% пропускной способности.
24,73 * 8 бит = 192 Mbit в сек.
Господа, у Вас проблемы с сетью.
> Скорость записи идентична, не намного уступает, определяется
> скорее возможностями файловой системы.
Ага. но только после 400 Mb/sec, и для FC SAS II
— это просто номера клиентов, которые одновременно используют сервер.
>24,73
>23,42
>23,26
>23,15
результаты dbench в студию!
http://ctdb.samba.org/
особенно это:
— CTDB is the core component that provides pCIFS («parallel CIFS») with Samba3/4.
— CTDB provides HA features such as node monitoring, node failover, and IP takeover.
>Ну и тесты я думаю здесь если и нужно проводить то уже никак не копированием файлов.
а чем? и чем не устраивает?
В данном случае использован следующий набор ПО для High-Aviability:
Операционная система — CentOS 5.4
Кластерное ПО — все от RedHat (группы пакетов «Cluster» и «Cluster Storage»)
Файловая система для общего хранилища — GFS2.
Репликация дисков DRBD8 (замечу, все узлы в режиме «primary»)
Механизм «сердцебиения» — опционально(далее поясню, почему) — HeartBeat.
автор, не могли бы вы перечислить вообще софт используемый для этого, а то из вашего текста выходит — что заведется это на любом дистре, стоит только там поставить самбу и ctdb.
а ниче что spec файл уже есть в исходниках, видать разработчики самбы для прикола его туда положили 🙂
> А зачем? Работает — нетрож, глючит проверяй.
> с чего вообще взяли, что он должен объяснять, что такое CTDB?
а какой тогда глубокий смысл в статье?
> Samba использует легковесную базу данных (TDB) для приведения соответствия Windows SID к Unix UID/GID
Кластерное хранилище Pacemaker + DRBD (Dual primary) + samba
В продолжение статьи «Кластерное хранилище Pacemaker + DRBD (Dual primary) + ctdb» представляю полностью готовый и рабочий вариант HA кластера файловой шары на 2-4 ноды для centos 6 и centos 7. Если вы хотите реализовать такое, вы либо извращенец, либо вам не дали никакого выбора, и реализовать надо хоть как-то.
Я просто опишу слоёный пирог, который мы будем собирать:
На блочном устройстве создаём таблицу gpt => один раздел на всё пространство под лвм => группу томов лвм на всё доступное пространство => лвм том на всё доступное пространство => drbd устройство => dlm => размечаем как физический том лвм на всё доступное пространство => на него кластерную группу томов лвм => лвм том на всё доступное пространство => размечаем фс gfs2 => подключаем в точку монтирования.
И рулить всем этим будет pacemaker c virtual ip адресом.
Процессор 1 ядро
1 Гб минимум оперативной памяти
15 Гб диск + место на котором вы будете хранить данные
Дисков может быть сколько угодно, даже один.
Если у вас один диск, то лучше размечать его следующим образом:
Таблица разделов gpt => раздел 200 Мб для efi (опционально) => раздел 1Гб для /boot => всё остальное место под лвм.
На лвм томе вам необходимо создать 2 группы томов. Первая группа томов под ОС размером 10 Гб + удвоенному размеру оперативной памяти, но не более 4 Гб.
Кто бы, что не говорил, но подкачка иногда очень выручает, поэтому на лвм группе создаём лвм раздел для подкачки равный удвоенному размеру оперативной памяти, но не более 4 Гб и оставшееся место отводим под корень ОС.
Вторая группа лвм под хранение данных. Создаём лвм раздел на всё оставшееся место.
По условиям нам дали 2 виртуальные машины и на этом всё. Ceph для корректной работы лучше ставить на 6 нодах, минимум 4, плюс было бы неплохо иметь какой-нибудь опыт работы с ним, а то получится как у cloudmouse. Gluster для сотен тысяч мелких файлов по производительности не пройдёт, это обмусолено на просторах хабра много раз. ipfs, lustre и тому подобные имеют такие же требования как у ceph или даже больше.
Начнём сражение! У меня было две виртуальные машины на CentOS 7 с 2мя дисками.
1) Pacemaker версии 1.1 не работает с ip корректно, поэтому для надёжности добавляем в /etc/hosts записи:
192.168.0.1 node1 192.168.0.2 node2
2) В стандартных репозиториях DRBD нет, поэтому надо подключить сторонний.
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum localinstall -y http://ftp.nluug.nl/os/Linux/distr/elrepo/elrepo/el7/x86_64/RPMS/$(curl -s http://ftp.nluug.nl/os/Linux/distr/elrepo/elrepo/el7/x86_64/RPMS/ | grep -oP ">elrepo-release.*rpm" | cut -c 2-)
3) Устанавливаем drbd версии 8.4
yum install -y kmod-drbd84 drbd84-utils
4) Активируем и включаем в автозагрузку модуль ядра drbd
modprobe drbd echo drbd > /etc/modules-load.d/drbd.conf
5) Создаём раздел диска и настраиваем лвм
echo -e "g\nn\n\n\n\nt\n8e\nw\n" | fdisk /dev/sdb vgcreate drbd_vg /dev/sdb1 lvcreate -l +100%FREE --name r0 drbd_vg
6) Создаем конфигурационный файл ресурса drbd /etc/drbd.d/r0.res
resource r0 < protocol C; device /dev/drbd1; meta-disk internal; disk /dev/mapper/drbd_vg-r0; net < allow-two-primaries; >disk < fencing resource-and-stonith; >handlers < fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh"; >startup < become-primary-on both; >on node1 < address 192.168.0.1:7788; >on node2
7) Убираем сервис drbd из авозагрузки (позже его за него будет отвечать pacemaker), создаем метаданные для диска drbd, поднимаем ресурс
systemctl disable drbd drbdadm create-md r0 drbdadm up r0
8) На первой ноде делаем ресурс первичным
yum install -y pacemaker corosync pcs resource-agents fence-agents-all
10) Устанавливаем пароль для пользователя hacluster для авторизации на нодах
echo CHANGEME | passwd --stdin hacluster
11) Запускаем pcsd на обоих нодах
systemctl enable pcsd systemctl start pcsd
12) Авторизуемся в кластере. C этого этапа делаем все на одной ноде
pcs cluster auth node1 node2 -u hacluster -p CHANGEME --force
13) Создаем кластер с именем samba_cluster
pcs cluster setup --force --name samba_cluster node1 node2
14) активируем ноды и добавляем сервисы в автозагрузку и запускаем их
pcs cluster enable --all pcs cluster start --all systemctl start corosync pcsd pacemaker systemctl enable corosync pcsd pacemaker
15) Так как в качестве серверов у нас выступают виртуальные машины, то отключаем механизм STONITH, так как мы не имеем никаких механизмов для управления ими. Так же у нас машин всего 2, поэтому кворум тоже отключаем, он работает только при 3х и более машинах.
pcs property set stonith-enabled=false pcs property set no-quorum-policy=ignore
pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.0.10 cidr_netmask=32 nic=eth0 clusterip_hash=sourceip-sourceport op monitor interval=1s
pcs resource create DRBD1 ocf:linbit:drbd drbd_resource=r0 op monitor interval=60s master master-max=2 master-node-max=1 clone-node-max=1 clone-max=2 notify=true op start interval=0s timeout=240 promote interval=0s timeout=130 monitor interval=150s role=Master monitor interval=155s role=Slave
18) Устанавливаем необходимые пакеты для clvm и подготавливаем clvm
yum install -y lvm2-cluster gfs2-utils /sbin/lvmconf --enable-cluster
19) Добавляем ресурс dlm и clvd в pacemaker
pcs resource create dlm ocf:pacemaker:controld allow_stonith_disabled=true clone meta interleave=true pcs resource create clvmd ocf:heartbeat:clvm clone meta interleave=true
20) Запрещаем LVM писать кэш и очищаем его. На обоих нодах
sed -i 's/write_cache_state = 1/write_cache_state = 0/' /etc/lvm/lvm.conf rm /etc/lvm/cache/*
21) Создаем CLVM раздел. Делаем только на одной ноде
vgcreate -A y -c y cl_vg /dev/drbd1 lvcreate -l 100%FREE -n r0 cl_vg
22) Размечаем раздел в gfs2, здесь важно чтобы таблица блокировок имела тоже имя что и наш кластер в peacemaker. Делаем только на одной ноде
mkfs.gfs2 -j 2 -p lock_dlm -t samba_cluster:r0 /dev/cl_vg/r0
23) Дальше добавляем монтирование этого раздела в pacemaker и говорим ему грузиться после clvmd
pcs resource create fs ocf:heartbeat:Filesystem device="/dev/cl_vg/r0" directory="/mnt" fstype="gfs2" clone interleave=true
24) Теперь наcтал черед ctdb, который будет запускать samba
yum install -y samba ctdb cifs-utils
25) Правим конфиг /etc/ctdb/ctdbd.conf
CTDB_RECOVERY_LOCK="/mnt/ctdb/.ctdb.lock" CTDB_NODES=/etc/ctdb/nodes CTDB_MANAGES_SAMBA=yes CTDB_LOGGING=file:/var/log/ctdb.log CTDB_DEBUGLEVEL=NOTICE
26) Создаем файл со списком нод /etc/ctdb/nodes
ВНИМАНИЕ! После каждого адреса в списке должен присутствовать перевод строки. Иначе нода не будет включаться при инициализации.
27) И наконец создаем ресурс ctdb
pcs resource create samba systemd:ctdb clone meta interleave=true
28) Задаем очередь загрузки и зависимости ресурсов для запуска
pcs constraint colocation add dlm-clone with DRBD1-master pcs constraint colocation add clvmd-clone with dlm-clone pcs constraint colocation add fs-clone with clvmd-clone pcs constraint colocation add samba-clone with fs-clone pcs constraint colocation add virtual_ip with samba-clone pcs constraint order promote DRBD1-master then dlm-clone pcs constraint order start dlm-clone then clvmd-clone pcs constraint order start clvmd-clone then fs-clone pcs constraint order start fs-clone then samba-clone
29) Задаем очередь остановки ресурсов, без этого ваша машина может зависнуть на моменте выключения
pcs constraint order stop fs-clone then stop clvmd-clone pcs constraint order stop clvmd-clone then stop dlm-clone pcs constraint order stop dlm-clone then stop DRBD1-master pcs constraint order stop samba-clone then stop fs-clone
P.S.
Сама шара может быть и на nfs, и на samba, но подключение к ним fail-over по IP, хотя само хранилище HA. Если вы хотите полный HA, то вместо samba и nfs вам надо ставить iSCSI и подключать через multipath. К тому же можно получить splitbrain в случае если одна из нод умрёт, а когда поднимется мастера не будет. Я проверил, что если ОС корректно выключается, то после поднятия ноды, когда мастера нет, она переходит в режим out-of-date и не становится мастером во избежание сплит брейна. Варианты с кворумом(DRBD и\или pacemaker) и любые извращения из каскадных конструкций DRBD после вашей настройки несостоятельны по причине высокой сложности, другой админ будет долго разбираться. Хотя с тем, что я написал не лучше, не делайте так.