Монтировать кластерную файловую систему
В примере монтируется кластерная файловая система GFS2 (Global File System 2). Подробнее о настройке ресурсов кластера и поведения кластера при сбоях в разделе High Availability Add-On Overview документации Red Hat Enterprise.
GFS2 (Global File System 2) — это кластерная файловая система с совместным доступом к данным. Она предоставляет возможность нескольким узлам одновременно работать с одной файловой системой, обеспечивая согласованность и высокую производительность. Подробнее о GFS2 в разделе Global File System 2 документации Red Hat Enterprise.
В примере для работы GFS2 используются:
corosync
— служба межузлового взаимодействия, которая обеспечивает обмен сообщениями между узлами кластера, контроль их доступности и определение кворума — минимально необходимого числа активных узлов для безопасной работы кластера;pacemaker
— менеджер ресурсов кластера, который управляет запуском, остановкой и перемещением ресурсов между узлами кластера в случае отказа одного из них;dlm
— распределенный менеджер блокировок, который координирует в кластере доступ к совместно используемым ресурсам.
Чтобы смонтировать кластерную файловую систему:
- Подключите сетевой диск к каждому серверу.
- Настройте каждый узел кластера.
- Монтируйте кластерную файловую систему.
1. Подключить сетевой диск к каждому серверу
Используйте инструкцию Подключить сетевой диск к выделенном у серверу.
2. Настроить каждый узел кластера
Чтобы обеспечить совместную работу узлов в кластере, настройте каждый узел.
-
Подключитесь к серверу по SSH или через KVM-консоль.
-
Откройте конфигурационный файл утилиты
netplan
текстовым редакторомvi
:vi /etc/netplan/50-cloud-init.yaml
-
На сетевой интерфейс, задействованный для работы службы
corosync
, добавьте IP-адреса из приватного диапазона. Серверы должны иметь доступ друг к другу по этим адресам. Адреса iSCSI, которые используются для подключения сетевых дисков, иcorocync
не должны пересекаться.<eth_name>:
addresses:
- <ip_address>Укажите:
<eth_name>
— имя сетевого интерфейса приватной сети для основного канала обмена сообщениями между узлами кластера;<ip_address>
— приватный IP-адрес текущего узла в основной кластерной сети.
-
Выйдите из текстового редактора
vi
с сохранением изменений::wq
-
Примените конфигурацию:
netplan apply
-
Убедитесь, что сетевые интерфейсы настроены корректно:
ip a
-
Установите компоненты для настройки кластерной среды:
apt install corosync pacemaker gfs2-utils pcs resource-agents ldmtool dlm-controld
-
Перезагрузите сервер.
-
Откройте конфигурационный файл
/etc/hosts
текстовым редакторомvi
:vi /etc/hosts
-
Добавьте IP-адреса и имена узлов в
/etc/hosts
:<ip_address_1> <node_name_1>
<ip_address_2> <node_name_2>Укажите:
<ip_address_1>
— основной IP-адрес первого узла в приватной сети;<node_name_1>
— имя первого узла в приватной сети, напримерnode-1
;<ip_address_2>
— основной IP-адрес второго узла в приватной сети;<node_name_2>
— имя второго узла в приватной сети, напримерnode-2
.
-
Выйдите из текстового редактора
vi
с сохранением изменений::wq
2. Монтировать кластерную файловую систему
На одном из узлов кластера выполните настройку кластера и монтируйте на сетевой диск кластерную файловую систему.
-
Подключитесь к серверу по SSH или через KVM-консоль.
-
Убедитесь, что сетевые интерфейсы настроены корректно:
ip a
-
Установите компоненты для настройки кластерной среды:
apt install corosync pacemaker gfs2-utils pcs resource-agents ldmtool dlm-controld
-
Перезагрузите сервер.
-
Создайте ключ безопасности для
corosync
:corosync-keygen
Файл ключа будет сохранен в директории
/etc/corosync/authkey
. -
Распространите ключ на узлы кластера с помощью утилиты
scp
, для этого выполните команду для каждого узла:scp /etc/corosync/authkey root@<node_name>:/etc/corosync/authkey
Укажите
<node_name>
— имя узла в приватной сети, который вы указали при настройке узла кластера на шаге 10. -
Создайте кластер:
pcs cluster setup <cluster_name> <node_name_1> <node_name_2>
Укажите:
<cluster_name>
— имя кластера;<node_name_1>
— имя текущего узла в приватной сети, который вы указали при настройке узла кластера на шаге 10;<node_name_2>
— имя второго узла в приватной сети, который вы указали при настройке узла кластера на шаге 10.
-
Запустите службы
corosync
иpacemaker
для всех узлов кластера:pcs cluster start --all
-
Убедитесь, что кластер перешел в статус
online
:pcs status
-
Убедитесь, что в конфигурационном файле
/etc/corosync/corosync.conf
заданы корректные параметры кластера:cat /etc/corosync/corosync.conf
В ответе появится содержимое конфигурационного файла. Например:
totem {
version: 2
cluster_name: cluster_name
transport: knet
crypto_cipher: aes256
crypto_hash: sha256
}
nodelist {
node {
ring0_addr: node-1
name: node-1
nodeid: 1
}
node {
ring0_addr: node-2
name: node-2
nodeid: 2
}
}
quorum {
provider: corosync_votequorum
two_node: 1
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}Здесь:
cluster_name
— имя кластера, которое вы указали на шаге 7;node-1
— имя текущего узла в кластерной сети;node-2
— имя второго узла в кластерной сети.
-
Выведите информацию о сетевых дисках:
multipath -ll
В выводе команды отобразится информация об устройствах. Например:
mpatha (3600140530fab7e779fa41038a0a08f8e) dm-0 LIO-ORG,TCMU device
size=20G features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=10 status=active
| `- 8:0:0:0 sdc 8:32 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
`- 9:0:0:0 sdd 8:48 active ready runningЗдесь
mpatha
— имя сетевого диска. -
Отформатируйте сетевой диск в файловую систему GFS2:
mkfs.gfs2 -p lock_dlm -t <cluster_name>:<cluster_volume_name> -j <number_of_cluster_nodes> /dev/mapper/<block_storage_name>
Укажите:
<cluster_name>:<cluster_volume_name>
— идентификатор GFS2-файловой системы в пределах кластера, он состоит из двух значений и в сумме должен быть не более 16 символов, где:<cluster_name>
— имя кластера, которое вы указали на шаге 7;<cluster_volume_name>
— имя файловой системы;
<number_of_cluster_nodes>
— количество журналов файловой системы GFS2, по одному журналу на каждый узел кластера;<block_storage_name>
— имя сетевого диска, который вы получили на шаге 11.
-
Запустите
dlm
— кластерный механизм блокировок:pcs resource start dlm
-
Настройте политику поведения кластера при потере кворума:
pcs property set no-quorum-policy=freeze
-
Создайте точку монтирования:
mkdir -p /mnt/<mount_point_name>
Укажите
<mount_point_name>
— имя каталога, в который будет монтироваться кластерная файловая система. -
Создайте ресурс, который кластер будет монтировать как файловую систему GFS2 на всех узлах при запуске:
crm configure primitive <resource_name> ocf:heartbeat:Filesystem device /dev/mapper/<block_storage_name> directory /mnt/<mount_point_name> fstype gfs2
Укажите:
<resource_name>
— уникальное имя ресурса внутри кластера;<block_storage_name>
— имя сетевого диска, которое вы получили на шаге 11;<mount_point_name>
— имя каталога на сетевом диске, который вы создали на шаге 15.
-
Убедитесь, что кластер работает корректно:
crm status
В ответе появится информация о состоянии кластера. Например:
Cluster Summary:
* Stack: corosync
* Current DC: node-1 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Mon Feb 10 11:58:13 2025
* Last change: Fri Feb 7 19:19:07 2025 by root via cibadmin on node-1
* 2 nodes configured
* 2 resource instances configured
Node List:
* Online: [ node-1 node-2 ]
Full List of Resources:
* dlm (ocf:pacemaker:controld): Started [ node-1 node-2 ]
* ClusterFS (ocf:heartbeat:Filesystem): Started [ node-1 node-2 ]Здесь:
- в строке
Current DC
отображен управляющий узел кластера. Состояниеpartition with quorum
означает, что кластер достиг кворума и работает корректно; - в блоке
Node List
перечислены узлы кластера. СтатусOnline
означает, что узлы доступны и участвуют в работе; - в блоке
Full List of Resources
отображено состояние ресурсов кластера. СтатусStarted
означает, что ресурсы успешно запущены на указанных узлах кластера.
- в строке
-
Убедитесь, что
corosync
установил соединение с другими узлами кластера:corosync-cfgtool -s
В ответе появится информация о сетевых подключениях
corosync
. Например:Local node ID 2, transport knet
LINK ID 0 udp
addr = 192.168.1.23
status:
nodeid: 1: connected
nodeid: 2: localhostЗдесь в блоке
Status
указано состояние подключения к каждому узлу кластера:nodeid: 1: connected
— узел доступен, соединение установлено;nodeid: 2: localhost
— текущий узел.
-
Убедитесь, что ресурс кластера
dlm
работает корректно и все узлы кластера обнаружены:dlm_tool status
В ответе появится информация о состоянии ресурса
dlm
. Например:cluster nodeid 2 quorate 1 ring seq 80 80
daemon now 234888 fence_pid 0
node 1 M add 630 rem 212 fail 60 fence 159 at 1 1738943226
node 2 M add 61 rem 0 fail 0 fence 0 at 0 0Здесь:
quorate 1
— кластер достиг кворума;node 1
иnode 2
со статусомM
— узлы кластера активны и участвуют в работе кластера.
-
Убедитесь, что сетевой диск отображается в системе и смонтирован в нужную точку:
lsblk
В ответе появится информация о дисках и их точках монтирования. Например:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
----
sdc 8:32 0 150G 0 disk
└─mpatha 252:0 0 150G 0 mpath /mnt/gfs
sdd 8:48 0 150G 0 disk
└─mpatha 252:0 0 150G 0 mpath /mnt/gfsЗдесь:
sdc
,sdd
— сетевые диски;mpatha
— устройство с многопутевым доступом;/mnt/gfs
— точка монтирования файловой системы GFS2.
-
Убедитесь, что файловая система GFS2 смонтирована корректно:
mount | grep gfs
В ответе появится информация о файловой системе. Например:
/dev/mapper/mpatha on /mnt/gfs type gfs2 (rw,relatime,rgrplvb)
Здесь:
/dev/mapper/mpatha
— сетевой диск, на котором размещена файловая система GFS2;/mnt/gfs
— точка монтирования файловой системы;gfs2
— тип файловой системы.