---
title: 'Монтировать кластерную файловую систему'
sidebar_label: 'Монтировать кластерную файловую систему'
sidebar_position: 6
description: 'Как монтировать кластерную файловую систему на сетевой диск'
---

import Formbricks from '@theme/MDXComponents/Formbricks'

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

В примере монтируется кластерная файловая система GFS2 (Global File System 2). Подробнее о настройке ресурсов кластера и поведения кластера при сбоях в разделе [High Availability Add-On Overview](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/high_availability_add-on_overview/index) документации Red Hat Enterprise.

GFS2 (Global File System 2) — это кластерная файловая система с совместным доступом к данным. Она предоставляет возможность нескольким узлам одновременно работать с одной файловой системой, обеспечивая согласованность и высокую производительность. Подробнее о GFS2 в разделе [Global File System 2](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/global_file_system_2/) документации Red Hat Enterprise.

В примере для работы GFS2 используются:

* `corosync` — служба межузлового взаимодействия, которая обеспечивает обмен сообщениями между узлами кластера, контроль их доступности и определение кворума — минимально необходимого числа активных узлов для безопасной работы кластера;
* `pacemaker` — менеджер ресурсов кластера, который управляет запуском, остановкой и перемещением ресурсов между узлами кластера в случае отказа одного из них;
* `dlm` — распределенный менеджер блокировок, который координирует в кластере доступ к совместно используемым ресурсам.

Чтобы смонтировать кластерную файловую систему:

1. [Подключите сетевой диск к каждому серверу](#connect-block-storage-to-each-server).
2. [Настройте каждый узел кластера](#configure-each-node-in-cluster).
3. [Монтируйте кластерную файловую систему](#mount-cluster-file-system).

## 1. Подключить сетевой диск к каждому серверу \{#connect-block-storage-to-each-server}

Используйте инструкцию [Подключить сетевой диск к выделенному серверу с ОС Linux](/block-storage/manage/connect-block-storage-to-linux.mdx).

## 2. Настроить каждый узел кластера \{#configure-each-node-in-cluster}

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

1. Подключитесь к серверу по [SSH](/dedicated/manage/connect-to-server.mdx#connect-via-ssh) или через [KVM-консоль](/dedicated/manage/connect-to-server.mdx#connect-via-kvm-console).

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

   ```bash
   vi /etc/netplan/50-cloud-init.yaml
   ```

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

   ```bash
   <eth_name>:
   addresses:
       - <ip_address>
   ```

   Укажите:

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

4. Выйдите из текстового редактора `vi` с сохранением изменений:

   ```bash
   :wq
   ```

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

   ```bash
   netplan apply
   ```

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

   ```bash
   ip a
   ```

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

   ```bash
   apt install corosync pacemaker gfs2-utils pcs resource-agents ldmtool dlm-controld
   ```

8. Перезагрузите сервер.

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

   ```bash
   vi /etc/hosts
   ```

10. Добавьте IP-адреса и имена узлов в `/etc/hosts`:

    ```bash
    <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` с сохранением изменений:

    ```bash
    :wq
    ```

## 2. Монтировать кластерную файловую систему \{#mount-cluster-file-system}

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

1. Подключитесь к серверу по [SSH](/dedicated/manage/connect-to-server.mdx#connect-via-ssh) или через [KVM-консоль](/dedicated/manage/connect-to-server.mdx#connect-via-kvm-console).

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

   ```bash
   ip a
   ```

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

   ```bash
   apt install corosync pacemaker gfs2-utils pcs resource-agents ldmtool dlm-controld
   ```

4. Перезагрузите сервер.

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

   ```bash
   corosync-keygen
   ```

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

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

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

   Укажите `<node_name>` — имя узла в приватной сети, который вы указали при [настройке узла кластера](#configure-each-node-in-cluster) на шаге 10.

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

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

   Укажите:

   * `<cluster_name>` — имя кластера;
   * `<node_name_1>` — имя текущего узла в приватной сети, который вы указали при  [настройке узла кластера](#configure-each-node-in-cluster) на шаге 10;
   * `<node_name_2>` — имя второго узла в приватной сети, который вы указали при  [настройке узла кластера](#configure-each-node-in-cluster) на шаге 10.

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

   ```bash
   pcs cluster start --all
   ```

9. Убедитесь, что кластер перешел в статус `online`:

   ```bash
   pcs status
   ```

10. Убедитесь, что в конфигурационном файле `/etc/corosync/corosync.conf` заданы корректные параметры кластера:

    ```bash
    cat /etc/corosync/corosync.conf
    ```

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

    ```bash
    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. Выведите информацию о сетевых дисках:

    ```bash
    multipath -ll
    ```

    В выводе команды отобразится информация об устройствах.
    Например:

    ```bash
    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:

    ```bash
    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` — кластерный механизм блокировок:

    ```bash
    pcs resource start dlm
    ```

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

    ```bash
    pcs property set no-quorum-policy=freeze
    ```

15. Создайте точку монтирования:

    ```bash
    mkdir -p /mnt/<mount_point_name>
    ```

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

16. Создайте ресурс, который кластер будет монтировать как файловую систему GFS2 на всех узлах при запуске:

    ```bash
    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. Убедитесь, что кластер работает корректно:

    ```bash
    crm status
    ```

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

    ```bash
    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` установил соединение с другими узлами кластера:

    ```bash
    corosync-cfgtool -s
    ```

    В ответе появится информация о сетевых подключениях `corosync`.
    Например:

    ```bash
    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` работает корректно и все узлы кластера обнаружены:

    ```bash
    dlm_tool status
    ```

    В ответе появится информация о состоянии ресурса `dlm`.
    Например:

    ```bash
    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. Убедитесь, что сетевой диск отображается в системе и смонтирован в нужную точку:

    ```bash
    lsblk
    ```

    В ответе появится информация о дисках и их точках монтирования.
    Например:

    ```bash
    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 смонтирована корректно:

    ```bash
    mount | grep gfs
    ```

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

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

    Здесь:

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

<Formbricks />
