Вводные данные:
- fs-01.rpn.int - первый сервер в кластере
- fs-02.rpn.int - второй сервер в кластере
- fs.rpn.int - сервер, имеющий виртуальный адрес по которому будут обращаться пользователи.
Все работы, как обычно, будут проводиться на ОС Rosa Enterprice Server 7.2 (он же CentOS 7, он же RedHat 7).
Подготовительные работы, производимые на каждом сервере.
- Устанавливаем ОС в режиме минимальной установки.
- Добавляем в
/etc/hosts
имена наших серверов:192.168.209.20 fs-01.rpn.int fs-01 192.168.209.21 fs-02.rpn.int fs-02
- Устанавливаем необходимые пакеты:
yum install pcs fence-agents-all
- Настраиваем firewalld:
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --permanent --add-service=nfs # firewall-cmd --permanent --add-service=mountd # firewall-cmd --permanent --add-service=rpc-bind # firewall-cmd --reload
- Запрещаем Selinux (
/etc/selinux/config
):SELINUX=disabled
- Выключаем обе виртуальные машины.
- Подключаем общий диск, как было описано ранее.
- Включаем обе виртуальные машины.
- Проверяем увидели ли виртуальные машины новый диск:
# fdisk -l | grep sdb
- Если оба сервера видят диск, то приступаем к настройке кластера
Подготавливаем диск на первом сервере - fs-01.rpn.int
- Создаем PV, VG и LV:
# pvcreate /dev/sdb # vgcreate nfsvg01 /dev/sdb # lvcreate --nname nfsvol01 -l +100%FREE nfsvg01
- Форматируем LV и монтируем в каталог
/export
# mkfs.xfs /dev/nfsvg01/nfsvol01 # mkdir /export # mount /dev/nfsvg01/nfsvol01 /export
- Создаем на новом диске каталог
home
# mkdir /export/home
- После этого перезагружаем второй сервер (fs-02.rpn.int) и проверяем доступность нового LVM
# vgchange -ay - активируем все группы томов # lvscan ACTIVE '/dev/nfsvg01/nfsvol01' [2,00 TiB] inherit
Выполняем действия на обоих серверах.
- На текущий момент демон
lvmetad
не потдерживается в кластерных системах. Поэтому отключаем его в файле конфигурации LVM/etc/lvm/lvm.conf
use_lvmetad = 0
- Пересоздаем
initrd
для того, чтобы в действия вступили новые настройки LVM. Не забываем перед этим сделать резервные копии, что бы не пришлось переустанавливать ядро, если что-то пойдет не так.# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
- Перезагружаем оба сервера.
Установка кластерного ПО.
На обоих хостах производим следующие действия:
- Устанавливаем ПО:
# yum groupinstall "High Availability"
- Стартуем необходимый сервис и разрешаем его автозапуск:
# systemctl start pcsd.service # systemctl enable pcsd.service
- Устанавливаем пароль для администратора кластера (пользователь
hacluster
):# echo ‘SuperPassword’ | passwd hacluster --stdin
Создание сластера.
На на одном из хостов кластера выполняем:
- Авторизуем оба хоста в кластере:
# pcs cluster auth fs-01.rpn.int fs-02.rpn.int
- Создаем и стартуем кластер:
# pcs cluster setup --start --name NAME_CLUSTER fs-01.rpn.int fs-02.rpn.int
- Включаем запуск кластера при запуске системы и запуске службы:
# pcs cluster enable –all # pcs cluster start –all
- Отключаем STONITH:
# pcs property set stonith-enabled=false
- Устанавливаем признак "симметричного" кластера:
# pcs property set symmetric-cluster=true
Мелочь, а приятно. Управлять кластером можно через web-интерфейс. Для этого нужно открыть любой хост в кластере через порт 2224 по протоколу https. Например: https://fs-01.rpn.int:2224
. В интерфейсе можно сделать все тоже самое, что и в CLI. Но мы продолжим работы именно в CLI, т.к. на мой взгляд это будет быстрее.
Создание ресурсов кластера.
- Создаем файловый ресурс и монтируем его:
# pcs resource create CL_RS Filesystem device="/dev/nfsvg01/nfsvol01" directory="/export" fstype="xfs" --group UANFSHA
- Добавляем виртуальный IP-адрес для общего доступа NFS. Этот IP-адрес будет использоваться клиентами NFS для использования общих ресурсов:
# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.209.22 cidr_netmask=24 op monitor interval=10s --group UANFSHA
Не забываем привязать этот IP адрес в ДНС к имени (например fs.rpn.int) - Создаем ресурс NFS сервера:
# pcs resource create NFS_home nfsserver nfs_shared_infodir=/export nfs_ip=192.168.209.22 --group UANFSHA
- Создаем общий ресурс высокой доступности (HA) на сервере NFS:
# pcs resource create NFS_home_sh exportfs clientspec=192.168.209.0/255.255.255.0 options=rw,sync,no_root_squash directory=/export/home fsid=1 --group UANFSHA
- Проверяем статус созданного кластера:
# pcs status Cluster name: NAME_CLUSTER Stack: corosync Current DC: fs-01.rpn.int (version 1.1.15-11.res7c.4-e174ec8) - partition with quorum Last updated: Mon Feb 19 11:09:48 2018 Last change: Fri Feb 16 12:41:35 2018 by root via cibadmin on fs-01.rpn.int 2 nodes and 4 resources configured Online: [ fs-01.rpn.int fs-02.rpn.int ] Full list of resources: Resource Group: UANFSHA CL_RS (ocf::heartbeat:Filesystem): Started fs-01.rpn.int ClusterIP (ocf::heartbeat:IPaddr2): Started fs-01.rpn.int NFS_home (ocf::heartbeat:nfsserver): Started fs-01.rpn.int NFS_home_sh (ocf::heartbeat:exportfs): Started fs-01.rpn.int Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
Проверка и монтирование общего ресурса на клиенте
Переходим на любой клиентский ПК в сети (в данном случае имеется ввиду ПК под управлением ОС Linux (unix) и выполняем следующие действия:
- Проверяем доступность общего ресурса на виртуальном сервере (на сервере, имеющим ранее созданный виртуальный IP адрес):
# showmount -e fs.rpn.int Export list for fs..rpn.int: /export/home 192.168.209.0/255.255.255.0
- Монтируем общий ресурс на клиенте:
#mkdir /nfsmount #mount -t nfs -o vers=4 fs.rpn.int:/export/home/ /nfsmount
- Проверяем доступность ресурса при сбое одного из серверов. Для этого отключаем от сети (выключаем/перезагружаем) активный в данный момент сервер. Убеждаемся, что доступ к ресурсу не пропал, а второй сервер стал активным:
# pcs status Cluster name: NAME_CLUSTER Stack: corosync Current DC: fs-01.rpn.int (version 1.1.15-11.res7c.4-e174ec8) - partition with quorum Last updated: Mon Feb 19 11:09:48 2018 Last change: Fri Feb 16 12:41:35 2018 by root via cibadmin on fs-01.rpn.int 2 nodes and 4 resources configured Online: [ fs-01.rpn.int fs-02.rpn.int ] Full list of resources: Resource Group: UANFSHA CL_RS (ocf::heartbeat:Filesystem): Started fs-02.rpn.int ClusterIP (ocf::heartbeat:IPaddr2): Started fs-02.rpn.int NFS_home (ocf::heartbeat:nfsserver): Started fs-02.rpn.int NFS_home_sh (ocf::heartbeat:exportfs): Started fs-02.rpn.int Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
- После перезагрузки (включения) первого сервера убеждаемся, что оба сервера в кластере подключены:
pcs cluster status Cluster Status: Stack: corosync Current DC: fs-02.rpn.int (version 1.1.15-11.res7c.4-e174ec8) - partition with quorum Last updated: Mon Feb 19 11:29:28 2018 Last change: Fri Feb 16 12:41:35 2018 by root via cibadmin on fs-02.rpn.int 2 nodes and 4 resources configured PCSD Status: fs-01.rpn.int: Online fs-02.rpn.int: Online
На этом основные настройка файлового кластера завершены. Клиенты имеют постоянный доступ к ресурсу, даже если один из серверов по какой-то причине выходит из строя.
Основная сложность заключается в том, что с ресурсами NFS хорошо работают клиенты UNIX. Для клиентов MS Windows возникают большие сложности получить доступ на этот ресурс. Главным образом из-за того, что Microsoft считает, что в сети должен быть только один сервис, предоставляющий доступ на ресурсы - его собственный. И просто в большенстве версий Windows отсутствует потдержка клиента NFS. А там где она есть имеется крайне скудный функционал. Приходится выкручиваться установкой сторонних клиентов, что ни есть хороший выход.
Но, как говорится, безвыходных ситуаций нет. В следующей статье я покажу как сделать HA файловый кластер на Samba специально для тех, кто еще работает на Windows.