Версия для печати
Пятница, 16 февраля 2018 15:10

Настраиваем кластер высокой доступности NFS

Автор
Оцените материал
(8 голосов)

Файловый сервер предприятия - это один из наиболее выжных ресурсов, который должен быть непрерывно доступен. Виртуализация - хороший выход, если у вас есть кластер, работающий на нескольких хостах. Аппаратный выход из строя одного из хостов не приводит к остановке работы всей системы. Но иногда (в случае с Windows - регулярно) возникают ситуации, когда сам файловый сервер должен быть остановлен или перезагружен из-за пришедших на него обновлений. Для того, что бы работа компании не останавливалась (не все же админы хотят работать ночью) единственный выход - собрать кластер высокой доступности. Сбой или выключение одного из серверов в этом кластере не приведет к потере работоспособности сервиса. В предыдущей статье я рассказывал как подготовить "аппаратную" составляющую серверов в среде Vmware vSphere для работы в кластере. В этой статье будем поднимать простой файловый сервер NFS, работающий в режиме высокой доступности.

Вводные данные:

  • fs-01.rpn.int - первый сервер в кластере
  • fs-02.rpn.int - второй сервер в кластере
  • fs.rpn.int - сервер, имеющий виртуальный адрес по которому будут обращаться пользователи.

Все работы, как обычно, будут проводиться на ОС Rosa Enterprice Server 7.2 (он же CentOS 7, он же RedHat 7).

Подготовительные работы, производимые на каждом сервере.

  1. Устанавливаем ОС в режиме минимальной установки.
  2. Добавляем в /etc/hosts имена наших серверов:
    192.168.209.20   fs-01.rpn.int    fs-01
    192.168.209.21   fs-02.rpn.int    fs-02
    
  3. Устанавливаем необходимые пакеты:
    yum install pcs fence-agents-all
    
  4. Настраиваем 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
    
  5. Запрещаем Selinux (/etc/selinux/config):
    SELINUX=disabled
    
  6. Выключаем обе виртуальные машины.
  7. Подключаем общий диск, как было описано ранее.
  8. Включаем обе виртуальные машины.
  9. Проверяем увидели ли виртуальные машины новый диск:
    # fdisk -l | grep sdb
    
  10. Если оба сервера видят диск, то приступаем к настройке кластера

Подготавливаем диск на первом сервере - fs-01.rpn.int

  1. Создаем PV, VG и LV:
    # pvcreate /dev/sdb
    # vgcreate nfsvg01 /dev/sdb
    # lvcreate --nname nfsvol01 -l +100%FREE nfsvg01
    
  2. Форматируем LV и монтируем в каталог /export
    # mkfs.xfs /dev/nfsvg01/nfsvol01
    # mkdir /export
    # mount /dev/nfsvg01/nfsvol01 /export
    
  3. Создаем на новом диске каталог home
    # mkdir /export/home
    
  4. После этого перезагружаем второй сервер (fs-02.rpn.int) и проверяем доступность нового LVM
    # vgchange -ay  - активируем все группы томов
    # lvscan 
      ACTIVE            '/dev/nfsvg01/nfsvol01' [2,00 TiB] inherit
    

Выполняем действия на обоих серверах.

  1. На текущий момент демон lvmetad не потдерживается в кластерных системах. Поэтому отключаем его в файле конфигурации LVM /etc/lvm/lvm.conf
    use_lvmetad = 0
    
  2. Пересоздаем initrd для того, чтобы в действия вступили новые настройки LVM. Не забываем перед этим сделать резервные копии, что бы не пришлось переустанавливать ядро, если что-то пойдет не так.
    # dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
    
  3. Перезагружаем оба сервера.

Установка кластерного ПО.

На обоих хостах производим следующие действия:

  1. Устанавливаем ПО:
    # yum groupinstall "High Availability"
    
  2. Стартуем необходимый сервис и разрешаем его автозапуск:
    # systemctl start pcsd.service
    # systemctl enable pcsd.service
    
  3. Устанавливаем пароль для администратора кластера (пользователь hacluster):
    # echo ‘SuperPassword’ | passwd hacluster --stdin
    

Создание сластера.

На на одном из хостов кластера выполняем:

  1. Авторизуем оба хоста в кластере:
    # pcs cluster auth fs-01.rpn.int fs-02.rpn.int
    
  2. Создаем и стартуем кластер:
    # pcs cluster setup --start --name NAME_CLUSTER fs-01.rpn.int fs-02.rpn.int 
    
  3. Включаем запуск кластера при запуске системы и запуске службы:
    # pcs cluster enable –all
    # pcs cluster start –all
    
  4. Отключаем STONITH:
    # pcs property set stonith-enabled=false
    
  5. Устанавливаем признак "симметричного" кластера:
    # pcs property set symmetric-cluster=true
    

Мелочь, а приятно. Управлять кластером можно через web-интерфейс. Для этого нужно открыть любой хост в кластере через порт 2224 по протоколу https. Например: https://fs-01.rpn.int:2224. В интерфейсе можно сделать все тоже самое, что и в CLI. Но мы продолжим работы именно в CLI, т.к. на мой взгляд это будет быстрее.

Создание ресурсов кластера.

  1.  Создаем файловый ресурс и монтируем его:
    # pcs resource create CL_RS Filesystem device="/dev/nfsvg01/nfsvol01" directory="/export" fstype="xfs" --group UANFSHA
    
  2. Добавляем виртуальный 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)
  3. Создаем ресурс NFS сервера:
    # pcs resource create NFS_home nfsserver nfs_shared_infodir=/export nfs_ip=192.168.209.22 --group UANFSHA
    
  4. Создаем общий ресурс высокой доступности (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
    
  5. Проверяем статус созданного кластера:
    # 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) и выполняем следующие действия:

  1. Проверяем доступность общего ресурса на виртуальном сервере (на сервере, имеющим ранее созданный виртуальный IP адрес):
    # showmount -e fs.rpn.int
    Export list for fs..rpn.int:
    /export/home 192.168.209.0/255.255.255.0
    
  2. Монтируем общий ресурс на клиенте:
    #mkdir /nfsmount
    #mount -t nfs -o vers=4 fs.rpn.int:/export/home/ /nfsmount
    
  3. Проверяем доступность ресурса при сбое одного из серверов. Для этого отключаем от сети (выключаем/перезагружаем) активный в данный момент сервер. Убеждаемся, что доступ к ресурсу не пропал, а второй сервер стал активным:
    # 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
    
  4. После перезагрузки (включения) первого сервера убеждаемся, что оба сервера в кластере подключены:
    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.

 

Дополнительная информация

Прочитано 18895 раз Последнее изменение Понедельник, 26 февраля 2018 13:48
Андрей Иванов

Последнее от Андрей Иванов

Авторизуйтесь, чтобы получить возможность оставлять комментарии