Организация хранения данных при построении IT-инфраструктуры у IaaS-провайдера всегда связана с обеспечением приемлемого уровня отказоустойчивости и доступности. Традиционный вариант использования выделенных серверов предполагает, что надежность хранения данных можно обеспечить при помощи RAID-массивов, аппаратных или программных.

Тем не менее, вариант с зеркалированием всегда означает, что вы не сможете использовать все дисковое пространство на сервере. Если это обычный RAID1, то вы в любом случае получаете в 2 раза меньше доступного места на диске — это неизбежная плата за обеспечение надежности хранения данных. Как только данных становится больше, приходится сталкиваться с проблемой масштабирования и зачастую переноса данных.

Чтобы значительно упростить процесс организации хранения данных, мы в Selectel создали новую услугу «Файловое хранилище», позволяющую получить дисковое пространство любого объема и использовать его в различных сценариях работы с прочими услугами. Под катом рассказываем о преимуществах такого хранения и показываем, как его настроить в Ubuntu, Proxmox, VMware ESXi и FreeNAS.

Несколько простых сценариев, с которыми сталкиваются системные администраторы:

  • выделение места для бэкапов;
  • организация переноса данных;
  • обеспечение резервного дискового пространства (если на хосте заканчивается место, то можно временно подключить хранилище и обеспечить дополнительное место для хранения данных).

Те, кто уже пользуется нашими услугами знает, что у нас уже давным-давно существует услуга объектного хранилища данных с поддержкой S3 API, которое отлично подходит для хранения бэкапов, но требует использования дополнительного ПО.

Любое хранилище проще всего использовать штатными методами, например, примонтировав его к файловой системе. Это дает возможность софту обращаться с дополнительным хранилищем так, словно оно локально расположено на сервере. Достигается это организацией связности по L3, о чем мы рассказывали в одной из предыдущих статей, а также использованием одного из двух протоколов — NFS или CIFS.

При заказе услуги пользователь сам выбирает любую удобную для него локальную подсеть, шлюз которой будет шлюзом до хранилища. Далее все просто:

  1. Прописать сетевые настройки на интерфейсе локальной сети из выбранной подсети.
  2. Создать статический маршрут через шлюз.
  3. Создать директорию в качестве точки монтирования.
  4. Примонтировать хранилище в созданную директорию.

Попробуем проделать это в Ubuntu 16.04 LTS.

Настройка в Ubuntu 16.04


Предположим, что в качестве маршрутизируемой локальной сети мы выбрали 192.168.10.0/24. Хранилище нам доступно через NFS по адресу 10.130.9.103:/efd47034-24a1-4701-8058-ce6e36587b0f.

Открываем сетевые интерфейсы на редактирование:

sudo nano /etc/network/interfaces

Конфигурируем сетевую карту, подключенную к маршрутизатору локальной сети (в нашем примере это enp3s0):

iface enp3s0 inet static
       address 192.168.10.10
       netmask 255.255.255.0

up route add -net 10.130.9.0/24 gw 192.168.10.254

IP-адрес прописывается любой удобный из этой подсети. Теперь создаем директорию, куда будем монтировать хранилище:

sudo mkdir /mnt/nfs

Устанавливаем утилиту mount.nfs4, если она не была инсталлирована раньше:

sudo apt install nfs-common

Осталось лишь настроить автоматическое монтирование хранилища при старте системы:

sudo nano /etc/fstab

Дополним файл следующими строками:

# Selectel NFS
10.130.9.103:/efd47034-24a1-4701-8058-ce6e36587b0f      /mnt/nfs        nfs     defaults        0       0

Теперь можно смело перезагружать операционную систему и файловое хранилище будет автоматически примонтировано при запуске.

Проверяем, что хранилище смонтировалось:

user@test:~$ df -h
Файл.система                                       Размер Использовано  Дост Использовано% Cмонтировано в
udev                                                  12G            0   12G            0% /dev
tmpfs                                                2,4G         9,0M  2,4G            1% /run
/dev/sda5                                            913G         2,3G  911G            1% /
tmpfs                                                 12G            0   12G            0% /dev/shm
tmpfs                                                5,0M            0  5,0M            0% /run/lock
tmpfs                                                 12G            0   12G            0% /sys/fs/cgroup
/dev/sda1                                            922M          71M  805M            9% /boot
tmpfs                                                2,4G            0  2,4G            0% /run/user/1000
10.130.9.103:/efd47034-24a1-4701-8058-ce6e36587b0f   1,1T         7,7G  1,1T            1% /mnt/nfs

Таким образом, мы можем записывать любые данные в /mnt/nfs, и они будут записаны в «Файловое хранилище». А дальше немного магии, которая обеспечит надежное хранение. Любые, попавшие в хранилище данные, троекратно реплицируются на разные диски в разных серверах, находящихся в разных серверных стойках.

Скорость чтения/записи — 120/100 IOPS. Риск потери данных при этом серьезно снижается: даже выход из строя двух разных дисков в двух разных серверах не вызовет каких-либо проблем. Кроме того, если заказанное пространство закончилось, его можно без проблем увеличивать до любого необходимого значения.

Действия для свежих версий Ubuntu имеют похожую логику с тем отличием, что сетевые настройки задаются через netplan. Актуальная инструкция для этого есть в нашей Базе знаний.

Настройка в VMware ESXi


Услуга «Файловое хранилище» достаточно универсальна, чтобы использовать ее для расширения возможностей хостов виртуализации, таких как VMware ESXi. Этот гипервизор позволяет смонтировать NFS-шару как Datastore, что даст возможность, к примеру, хранить там ISO-образы или редко запрашиваемые данные. Обратите внимание, что услуга не подойдет для хранения дисков виртуальных машин.

Чтобы выполнить монтирование, потребуется выполнить несколько дополнительных действий. Не станем останавливаться на вопросах настройки сети, главное — присвоить IP-адрес сетевому адаптеру из подсети 192.168.10.0/24. Единственным нетривиальным действием станет прописывание статического маршрута в гипервизор. Это выполняется через консоль:

esxcli network ip route ipv4 add --gateway 192.168.10.254 --network 10.130.9.0/24

Проверяем, что новый маршрут появился в Web-интерфейсе.


Теперь можно спокойно добавлять Datastore. Выбираем пункт Mount NFS datastore.


Задаем любое имя, в поле NFS server указываем адрес хранилища, а в поле NFS share — идентификатор. Выбираем версию протокола NFS4, при этом не задавая имя пользователя и пароль.


Новый Datastore появится в списке доступных.


Теперь место в файловом хранилище можно использовать в любой момент, когда оно потребуется.

Настройка в Proxmox


Не только VMware ESXi поддерживает возможность работы с NFS, но и другие гипервизоры, такие как Proxmox. Поскольку Proxmox актуальной версии (на момент написания статьи это версия 11) базируется на Debian, то штатная команда по добавлению статического маршрута route add не сработает без дополнительных действий. Чтобы продолжать пользоваться привычными командами вначале установите пакет net-tools:

apt update

apt install net-tools

Теперь можно добавить маршрут:

route add -net 10.130.9.0/24 gw 192.168.10.254

Новый статический маршрут отобразится в таблице маршрутизации:

10.130.9.0/24 via 192.168.10.254 dev enp3s0

К сожалению, штатные функции по монтированию NFS- и CIFS-хранилищ не всегда работают правильно, так что авторам системы явно есть куда развиваться. При попытке смонтировать хранилище через Web-интерфейс вы скорее всего столкнетесь с ошибкой вида «storage is not online», даже несмотря на полную доступность:


Придется использовать workaround-решение по монтированию NFS-хранилищ, как в случае Ubuntu. Затем добавим хранилище как обычную директорию.


После добавления директории, куда смонтировано хранилище, можно будет использовать его как для хранения ISO-образов, так и для бэкапов.


Наличие такого хранилища дает дополнительные возможности. В первую очередь это позволяет использовать общее дисковое пространство для нескольких одиночных серверов или хостов виртуализации. Второй вариант более интересен, а именно — миграция с одной системы виртуализации на другую. Например, с того же Proxmox на VMware ESXi, используя утилиту конвертирования образов дисков qemu-img:

qemu-img convert -f qcow2 test.qcow2 -O vmdk test.vmdk

Теперь полученный образ test.vmdk можно положить в хранилище и забрать его из VMware ESXi. NFS максимально абстрагирован от файловой системы сервера, поэтому такой трюк будет успешно работать.

Настройка в FreeNAS


Сетевые хранилища часто реализуют на базе специализированных ОС, таких как OpenMediaVault (основана на Debian) и FreeNAS (основана на FreeBSD). Последняя давно заслужила всеобщее признание и часто используется как в «быту», так и в ЦОД. Посмотрим, как услуга работает в случае использования FreeNAS.

Первоначальные сетевые настройки задаются сразу в главном консольном меню, что значительно упрощает процесс настройки. Задаем IP-адреса для сетевых адаптеров, маршрут по умолчанию и сразу же статический маршрут до хранилища (пункт Configure Static Routes).


Заходим в web-интерфейс. Теперь наша задача — включить NFS-клиент, который изначально отключен, поэтому потребуется внести изменения в конфигурацию:

vi /conf/base/etc/rc.conf

Нажимаем клавишу I и вносим строку:

nfs_client_enable="YES"

Нажимаем ESC и вводим команду сохранения и выхода из vi:

:wq!

Перезагружаемся и приступаем к монтированию. В любой доступной директории создаем новую папку, которая послужит точкой монтирования:

mkdir /mnt/Test/nfs

Монтируем наше хранилище, команда слегка отличается от привычной в Linux:

mount -t nfs 10.130.9.103:/efd47034-24a1-4701-8058-ce6e36587b0f /mnt/Test/nfs

Проверяем, что наше хранилище смонтировалось:


Теперь мы можем использовать дисковое пространство в файловом хранилище по необходимости — к примеру, чтобы перенести какие-либо данные.

Вместо заключения


Единая точка хранения данных, зарезервированная троекратно и доступная по NFS/CIFS, — хороший способ объединить разные элементы внутри единой IT-инфраструктуры. Она позволит значительно улучшить гибкость работы с данными, как на постоянной, так и временной основе: миграция, перенос бэкапов, необходимость в дополнительном дисковом пространстве.

Мы надеемся, что «Файловое хранилище» придется по вкусу нашим клиентам, которые уже арендуют у нас выделенные или облачные серверы, а также упростит процесс создания собственной IT-инфраструктуры для новых пользователей. Будем рады узнать ваше мнение и готовы ответить на вопросы в комментариях.

Спасибо, что дочитали текст до конца! Если он вам понравился, не забудьте подписаться на блог облачного провайдера Selectel, чтобы не пропустить другие интересные статьи. В блоге мы пишем не только про разработку облачных сервисов в компании, но и делаем обзоры уникального «железа», дискутируем на актуальные темы из мира IT и балуем читателей интересным научпопом по выходным.

Комментарии (14)


  1. popov-as
    06.08.2021 23:27
    +2

    Добрый! Пользуюсь услугами.

    Любые, попавшие в хранилище данные, троекратно реплицируются на разные диски в разных серверах, находящихся в разных серверных стойках.

    Репликацию делаете с помощью DRBD? Если да, то синхронно (ожидая реплики) или асинхронно (реплицируется после записи)?


    1. fortyseven
      07.08.2021 14:26
      +1

      Репликация средствами ceph, синхронная.


  1. DuD
    09.08.2021 17:39

    Если под капотом ceph, почему для Proxmox не рекомендуете подключение к нему? Есть какие-то ограничения?

    Proxmox умеет нативно в него ходить: https://pve.proxmox.com/wiki/Storage:_RBD


    1. werter_l
      10.08.2021 13:30

      Предположу, что nfs\cifs — более универсальное решение в отличие от ceph.


    1. fortyseven
      11.08.2021 14:27
      +1

      потому что Ceph надо еще уметь приготовить


  1. HuckF1nn
    11.08.2021 11:31
    +1

    Насколько я помню (поправьте, пожалуйста, если не прав - мог подзабыть):

    • CIFS драйвер для Linux не поддерживает многопользовательское использование шары, под каким пользователем подключили, таким и будем пользоваться.

    • У NFS есть опция all_squash, но она тоже делает немного не то. Фактически в NFS тоже только один UID для одного пользователя

    Как вы обходите это? Бывали ли кейсы разграничения по пользователям в подключаемой шаре по CIFS или NFS (как в ванильном Linux - один каталог принадлежит одному пользователю, другой - другому. Читается по битам прав доступа)?

    Я в свое время не смог такого добиться.

    Заранее спасибо за ответы.


  1. nukler
    13.08.2021 16:26
    +1

    Хотелось бы подробнее остановится на ProxMox. Почему шару так и не смог смонтировать?

    Первый раз с таким сталкиваюсь. Да NFS4.2 действительно есть косяки, но на 4.1 всегда корректно монтируется. И да, на NFS можно разместить диск машины. Работает, ну такое, для теста, но работает.


    1. fortyseven
      14.08.2021 08:57
      +1

      Попробуйте 3 версию. И мы сейчас тюним кэширование для решения проблем низкой производительности.


      1. nukler
        16.08.2021 10:39

        Нет нет, у меня все очень хорошо в этом плане, спасибо. Я монтирую NFS с версией 4.1 и ни разу у меня никаких проблем с монтирование не возникало (ну ладно, был разок, сам опростофилился).

        А Вот почему возникла проблема у топикстартера, хотелось бы узнать.

        Спасибо.


        1. fortyseven
          16.08.2021 11:22

          Сложно сказать, скорее всего какая-то бага в веб-интерфейсе proxmox. Лучше на их форумах уточнять, предварительно собрав логи ошибки.


  1. connected201
    14.08.2021 11:40

    Пара моментов:

    Момент 1:

    Придется использовать workaround-решение по монтированию NFS-хранилищ

    Где само решение?

    Момент 2: актуальная версия Proxmox Version: 7.0-1 . базируется на Debian 11

    Момент 3: FreeNas не запустится без 8 Гигабайт оперативной памяти.


    1. Darksa Автор
      15.08.2021 18:40

      1. Имеется в виду не пользоваться GUI и смонтировать как Linux-директорию.
      2. У меня на скрине четко видно 7.0-8.
      3. Полагаете, что 8 Гб оперативной памяти это много?


      1. connected201
        17.08.2021 19:13

        Полагаете, что 8 Гб оперативной памяти это много?

        И да и нет, смотря что Freenas даёт за эти 8 гигабайт, ещё учитывая что статья написана для домашнего использования (или нет?), то 8 гигов, это много, у меня на интел нюке,с 8 гигабайтами крутятся 4 виртуалки, и всём всё хватает.+ Proxmox на ZFS разделе,


        1. connected201
          17.08.2021 19:44

          У меня на скрине четко видно 7.0-8.

          (на момент написания статьи это версия 11)

          Я хотел указать на то что версия 11 это Debian bullseye, а версия Proxmox 7.0-1 взята с сайта разработчика, сейчас микроверсия будет 7.0.11