Skip to main content
Монтировать кластерную файловую систему
Last update:

Монтировать кластерную файловую систему

В примере монтируется кластерная файловая система 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. Настройте каждый узел кластера.
  3. Монтируйте кластерную файловую систему.

1. Подключить сетевой диск к каждому серверу

Используйте инструкцию Подключить сетевой диск к выделенному серверу.

2. Настроить каждый узел кластера

Чтобы обеспечить совместную работу узлов в кластере, настройте каждый узел.

  1. Подключитесь к серверу по SSH или через KVM-консоль.

  2. Откройте конфигурационный файл утилиты netplan текстовым редактором vi:

    vi /etc/netplan/50-cloud-init.yaml
  3. На сетевой интерфейс, задействованный для работы службы corosync, добавьте IP-адреса из приватного диапазона. Серверы должны иметь доступ друг к другу по этим адресам. Адреса iSCSI, которые используются для подключения сетевых дисков, и corocync не должны пересекаться.

    <eth_name>:
    addresses:
    - <ip_address>

    Укажите:

    • <eth_name> — имя сетевого интерфейса приватной сети для основного канала обмена сообщениями между узлами кластера;
    • <ip_address> — приватный IP-адрес текущего узла в основной кластерной сети.
  4. Выйдите из текстового редактора vi с сохранением изменений:

    :wq
  5. Примените конфигурацию:

    netplan apply
  6. Убедитесь, что сетевые интерфейсы настроены корректно:

    ip a
  7. Установите компоненты для настройки кластерной среды:

    apt install corosync pacemaker gfs2-utils pcs resource-agents ldmtool dlm-controld
  8. Перезагрузите сервер.

  9. Откройте конфигурационный файл /etc/hosts текстовым редактором vi:

    vi /etc/hosts
  10. Добавьте 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.
  11. Выйдите из текстового редактора vi с сохранением изменений:

    :wq

2. Монтировать кластерную файловую систему

На одном из узлов кластера выполните настройку кластера и монтируйте на сетевой диск кластерную файловую систему.

  1. Подключитесь к серверу по SSH или через KVM-консоль.

  2. Убедитесь, что сетевые интерфейсы настроены корректно:

    ip a
  3. Установите компоненты для настройки кластерной среды:

    apt install corosync pacemaker gfs2-utils pcs resource-agents ldmtool dlm-controld
  4. Перезагрузите сервер.

  5. Создайте ключ безопасности для corosync:

    corosync-keygen

    Файл ключа будет сохранен в директории /etc/corosync/authkey.

  6. Распространите ключ на узлы кластера с помощью утилиты scp, для этого выполните команду для каждого узла:

    scp /etc/corosync/authkey root@<node_name>:/etc/corosync/authkey

    Укажите <node_name> — имя узла в приватной сети, который вы указали при настройке узла кластера на шаге 10.

  7. Создайте кластер:

    pcs cluster setup <cluster_name> <node_name_1> <node_name_2>

    Укажите:

  8. Запустите службы corosync и pacemaker для всех узлов кластера:

    pcs cluster start --all
  9. Убедитесь, что кластер перешел в статус online:

    pcs status
  10. Убедитесь, что в конфигурационном файле /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 — имя второго узла в кластерной сети.
  11. Выведите информацию о сетевых дисках:

    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 — имя сетевого диска.

  12. Отформатируйте сетевой диск в файловую систему 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.
  13. Запустите dlm — кластерный механизм блокировок:

    pcs resource start dlm
  14. Настройте политику поведения кластера при потере кворума:

    pcs property set no-quorum-policy=freeze
  15. Создайте точку монтирования:

    mkdir -p /mnt/<mount_point_name>

    Укажите <mount_point_name> — имя каталога, в который будет монтироваться кластерная файловая система.

  16. Создайте ресурс, который кластер будет монтировать как файловую систему 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.
  17. Убедитесь, что кластер работает корректно:

    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 означает, что ресурсы успешно запущены на указанных узлах кластера.
  18. Убедитесь, что 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 — текущий узел.
  19. Убедитесь, что ресурс кластера 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 — узлы кластера активны и участвуют в работе кластера.
  20. Убедитесь, что сетевой диск отображается в системе и смонтирован в нужную точку:

    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.
  21. Убедитесь, что файловая система GFS2 смонтирована корректно:

    mount | grep gfs

    В ответе появится информация о файловой системе. Например:

    /dev/mapper/mpatha on /mnt/gfs type gfs2 (rw,relatime,rgrplvb)

    Здесь:

    • /dev/mapper/mpatha — сетевой диск, на котором размещена файловая система GFS2;
    • /mnt/gfs — точка монтирования файловой системы;
    • gfs2 — тип файловой системы.