Настройка кластеризации серверов 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/
Запишите идентификатор диска /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
Запустите команду 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, разрешите порты сервера 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 с помощью кардиостимулятора. Пожалуйста, поделитесь своими отзывами и комментариями в разделе комментариев ниже.