Настройка кластеризации серверов NFS с помощью Pacemaker в CentOS 7 / RHEL 7

Настройка кластеризации серверов NFS с помощью Pacemaker в CentOS 7 / RHEL 7

 

NFS (сетевая файловая система) — наиболее распространенный сервер для передачи файлов по сети. С помощью сервера NFS мы можем обмениваться папками по сети, а разрешенные клиенты или система могут получать доступ к этим общим папкам и использовать их в своих приложениях. Когда дело доходит до производственной среды, мы должны настроить сервер nfs на высокую доступность, чтобы исключить единую точку отказа.

В этой статье мы обсудим, как мы можем настроить кластеризацию высокой доступности nfs-сервера (активный-пассивный) с кардиостимулятором на CentOS 7 или RHEL 7.

Ниже приведены данные моей лаборатории, которые я использовал для этой статьи.

  • Сервер NFS 1 (nfs1.example.com) — 192.168.1.40 — Минимальная CentOS 7 / RHEL 7
  • Сервер NFS 2 (nfs2.example.com) — 192.168.1.50 — Минимальная CentOS 7 / RHEL 7
  • VIP-сервер NFS — 192.168.1.51
  • Брандмауэр включен
  • SELinux включен

Выполните следующие шаги, чтобы настроить активно-пассивную кластеризацию NFS-сервера на CentOS 7 / RHEL 7.

Шаг 1) Установите имя хоста на обоих серверах nfs и обновите файл /etc/hosts

Войдите на оба сервера nfs и установите имя хоста как «nfs1.example.com» и «nfs2.example.com» соответственно с помощью команды hostnamectl. Пример показан ниже.

~]# hostnamectl set-hostname "nfs1.example.com"
~]# exec bash

Обновите файл / etc / hosts на обоих серверах nfs,

192.168.1.40  nfs1.example.com
192.168.1.50  nfs2.example.com

Шаг 2) Обновите оба сервера nfs и установите пакеты ПК

Используйте команду ‘yum update’ ниже, чтобы применить все обновления на обоих серверах nfs, а затем перезагрузиться один раз.

~]# yum update && reboot

Установите ПК и пакеты с агентами на оба сервера nfs,

[root@nfs1 ~]# yum install -y pcs fence-agents-all
[root@nfs2 ~]# yum install -y pcs fence-agents-all

После установки пакетов ПК и агентов ограждения разрешите связанные с ПК порты в брандмауэре ОС с обоих серверов nfs,

~]# firewall-cmd --permanent --add-service=high-availability
~]# firewall-cmd --reload

Теперь запустите и включите службу pcsd на обоих узлах nfs, используя следующие команды:

~]# systemctl enable pcsd
~]# systemctl start  pcsd

Шаг 3) Аутентифицируйте узлы nfs и сформируйте кластер

Установите пароль для пользователя hacluster, служба pcsd будет использовать этого пользователя для аутентификации узлов кластера, поэтому давайте сначала установим пароль для пользователя hacluster на обоих узлах,

[root@nfs1 ~]# echo "enter_password" | passwd --stdin hacluster
[root@nfs2 ~]# echo "enter_password" | passwd --stdin hacluster

Теперь аутентифицируйте узлы кластера. В нашем случае nfs2.example.com будет аутентифицирован на nfs1.example.com, выполните следующую команду кластера ПК на «nfs1»

[root@nfs1 ~]# pcs cluster auth nfs1.example.com nfs2.example.com
Username: hacluster
Password:
nfs1.example.com: Authorized
nfs2.example.com: Authorized
[root@nfs1 ~]#

Теперь пришло время сформировать кластер с именем « nfs_cluster » и добавить к нему оба узла nfs. Выполните команду « Установка кластера ПК » с любого узла nfs,

[root@nfs1 ~]# pcs cluster setup --start --name nfs_cluster nfs1.example.com \
 nfs2.example.com

Включите службу кластера ПК на обоих узлах, чтобы узлы автоматически присоединялись к кластеру после перезагрузки. Выполните команду ниже с любого из узлов nfs,

[root@nfs1 ~]# pcs cluster enable --all
nfs1.example.com: Cluster Enabled
nfs2.example.com: Cluster Enabled
[root@nfs1 ~]#

Шаг 4) Определите устройство ограждения для каждого узла кластера

Ограждение — самая важная часть кластера. Если какой-либо узел выходит из строя, то устройство ограждения удаляет этот узел из кластера. В Pacemaker ограждение определяется с помощью ресурса Stonith (Shoot The Other Node In The Head).

В этом руководстве мы используем общий диск размером 1 ГБ (/ dev / sdc) в качестве устройства ограждения. Давайте сначала узнаем идентификатор диска / dev / sdc

In this tutorial we are using a shared disk of size 1 GB (/dev/sdc) as a fencing device. Let’s first find out the id of /dev/sdc disk

[root@nfs1 ~]# ls -l /dev/disk/by-id/

Настройка кластеризации серверов NFS с помощью Pacemaker в CentOS 7

Запишите идентификатор диска /dev/sdc, как мы это сделаем в команде « pcs stonith ».

Теперь выполните команду «pcs stonith» на любом из узлов, чтобы создать устройство ограждения (disk_fencing).

[root@nfs1 ~]# pcs stonith create disk_fencing fence_scsi \ 
pcmk_host_list="nfs1.example.com nfs2.example.com" \ 
pcmk_monitor_action="metadata" pcmk_reboot_action="off" \ 
devices="/dev/disk/by-id/wwn-0x6001405e49919dad5824dc2af5fb3ca0" \ 
meta provides="unfencing"
[root@nfs1 ~]#

Проверьте статус stonith, используя команду ниже,

[root@nfs1 ~]# pcs stonith show
 disk_fencing   (stonith:fence_scsi):   Started nfs1.example.com
[root@nfs1 ~]#

Запустите команду « pcs status », чтобы просмотреть статус кластера.

[root@nfs1 ~]# pcs status
Cluster name: nfs_cluster
Stack: corosync
Current DC: nfs2.example.com (version 1.1.16-12.el7_4.7-94ff4df) \
 - partition with quorum
Last updated: Sun Mar  4 03:18:47 2018
Last change: Sun Mar  4 03:16:09 2018 by root via cibadmin on nfs1.example.com

2 nodes configured
1 resource configured
Online: [ nfs1.example.com nfs2.example.com ]
Full list of resources:
 disk_fencing   (stonith:fence_scsi):   Started nfs1.example.com
Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled
[root@nfs1 ~]#

Примечание. Если ваши узлы кластера являются виртуальными машинами и размещены на VMware, вы можете использовать агент ограждения« забор_vmware_soap ». Чтобы настроить «Забор_vmware_soap» в качестве агента ограждения, выполните следующие логические шаги:

1) Убедитесь, что узлы кластера могут подключиться к гипервизору VMware или Vcenter.

# fence_vmware_soap -a <vCenter_IP_address> -l <user_name> -p <password> \
 --ssl -z -v -o list |egrep "(nfs1.example.com|nfs2.example.com)"
or
# fence_vmware_soap -a <vCenter_IP_address> -l <user_name> -p <password> \ 
--ssl -z -o list |egrep "(nfs1.example.com|nfs2.example.com)"

Если вы можете видеть имена виртуальных машин в выходных данных, это нормально, иначе вам нужно проверить, почему узлы кластера не могут установить соединение esxi или vcenter.

2) Определите устройство ограждения, используя команду ниже,

# pcs stonith create vmware_fence fence_vmware_soap \ 
pcmk_host_map="node1:nfs1.example.com;node2:nfs2.example.com" \ 
ipaddr=<vCenter_IP_address> ssl=1 login=<user_name> passwd=<password>

3) проверьте статус камня, используя команду ниже,

# pcs stonith show

Шаг 5) Установите nfs и отформатируйте общий диск nfs

Установите пакет nfs-utils на оба сервера nfs

[root@nfs1 ~]# yum install nfs-utils -y
[root@nfs2 ~]# yum install nfs-utils -y

Остановите и отключите локальную службу « nfs-lock » на обоих узлах, так как эта служба будет контролироваться кардиостимулятором.

[root@nfs1 ~]# systemctl stop nfs-lock &&  systemctl disable nfs-lock
[root@nfs2 ~]# systemctl stop nfs-lock &&  systemctl disable nfs-lock

Предположим, у нас есть общий диск «/dev/sdb» размером 10 ГБ между двумя узлами кластера. Создайте на нем раздел и отформатируйте его как файловую систему xfs.

[root@nfs1 ~]# fdisk /dev/sdb

 

Настройка кластеризации серверов NFS с помощью Pacemaker в CentOS 7

Запустите команду partprobe на обоих узлах и перезагрузитесь один раз.

~]# partprobe

Теперь отформатируйте «/dev/sdb1» как файловую систему xfs.

[root@nfs1 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=655296 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=2621184, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@nfs1 ~]#

Создайте точку монтирования для этой файловой системы на обоих узлах,

[root@nfs1 ~]# mkdir /nfsshare
[root@nfs2 ~]# mkdir /nfsshare

Шаг 6) Настройте все необходимые ресурсы NFS на узлах кластера.

Ниже приведены необходимые ресурсы NFS:

  • Ресурс файловой системы
  • ресурс nfsserver
  • ресурс exportfs
  • Ресурс плавающего IP-адреса IPaddr2

Для ресурса файловой системы нам нужно общее хранилище между узлами кластера, мы уже создали раздел на общем диске (/ dev / sdb1) в вышеуказанных шагах, поэтому мы будем использовать этот раздел. Используйте приведенную ниже команду « pcs resource create », чтобы определить ресурс файловой системы с любого узла,

[root@nfs1 ~]# pcs resource create nfsshare Filesystem device=/dev/sdb1 \
  directory=/nfsshare fstype=xfs --group nfsgrp
[root@nfs1 ~]#

В приведенной выше команде мы определили файловую систему NFS как « nfsshare » в группе « nfsgrp ». Теперь все ресурсы nfs будут созданы в группе nfsgrp.

Создайте ресурс nfsserver с именем nfsd , используя следующую команду:

[root@nfs1~]# pcs resource create nfsd nfsserver \ 
nfs_shared_infodir=/nfsshare/nfsinfo --group nfsgrp
[root@nfs1~]#

Создайте ресурс exportfs с именем « nfsroot ».

[root@nfs1 ~]#  pcs resource create nfsroot exportfs clientspec="192.168.1.0/24" options=rw,sync,no_root_squash directory=/nfsshare fsid=0 --group nfsgrp
[root@nfs1 ~]#

В приведенной выше команде clientpec указывает разрешенных клиентов, которые могут получить доступ к nfsshare.

Создайте ресурс NFS IPaddr2, используя команду ниже,

[root@nfs1 ~]# pcs resource create nfsip IPaddr2 ip=192.168.1.51 \ 
cidr_netmask=24 --group nfsgrp
[root@nfs1 ~]#

Теперь просмотрите и проверьте кластер, используя статус ПК.

[root@nfs1 ~]# pcs status

Настройка кластеризации серверов NFS с помощью Pacemaker в CentOS 7

Как только вы закончите с ресурсами NFS, разрешите порты сервера nfs в брандмауэре ОС с обоих серверов nfs,

~]# firewall-cmd --permanent --add-service=nfs
~]#  firewall-cmd --permanent --add-service=mountd
~]#  firewall-cmd --permanent --add-service=rpc-bind
~]#  firewall-cmd --reload

Шаг 7) Попробуйте подключить общий ресурс NFS на клиентах

Теперь попробуйте смонтировать общий ресурс nfs с помощью команды mount, пример показан ниже.

[root@localhost ~]# mkdir /mnt/nfsshare
[root@localhost ~]# mount 192.168.1.51:/ /mnt/nfsshare/
[root@localhost ~]# df -Th /mnt/nfsshare
Filesystem     Type  Size  Used Avail Use% Mounted on
192.168.1.51:/ nfs4   10G   32M   10G   1% /mnt/nfsshare
[root@localhost ~]#
[root@localhost nfsshare]# cd /mnt/nfsshare/
[root@localhost nfsshare]# ls
nfsinfo
[root@localhost nfsshare]#

Для тестирования кластера остановите службу кластера на любом из узлов и посмотрите, доступен ли nfsshare или нет. Предположим, я собираюсь остановить службу кластеров на «nfs1.example.com».

[root@nfs1 ~]# pcs cluster stop
Stopping Cluster (pacemaker)...
Stopping Cluster (corosync)...
[root@nfs1 ~]#

Теперь перейдите на клиентский компьютер и посмотрите, доступен ли по-прежнему nfsshare. В моем случае я все еще могу получить к нему доступ и создавать на нем файлы.

[root@localhost]# touch test
[root@localhost]#

Теперь включите службу кластеров на «nfs1.example.com», используя следующую команду:

[root@nfs1 ~]# pcs cluster start
Starting Cluster...
[root@nfs1 ~]#

Вот и все из этой статьи, она подтверждает, что мы успешно настроили активно-пассивную кластеризацию NFS с помощью кардиостимулятора. Пожалуйста, поделитесь своими отзывами и комментариями в разделе комментариев ниже.