Как настроить NFS-сервер, который кэширует сетевой ресурс?

14

Пользовательские данные хранятся в двух довольно больших (> 1 ПБ) хранилищах OpenStack Swift. Пусть они будут Кластер А и кластер В .

Кроме того, есть несколько PoP, которые должны взаимодействовать с этими данными. Серверы в этих PoP практически бездисковые, то есть пользовательские данные не хранятся и не загружаются на них. ПП могут быть сгруппированы в общие регионы мира (например, Северная Америка , Южная Африка , Центральная Европа и др.).

Некоторые PoP довольно далеко от конечных точек Swift любого из кластеров, что создает нежелательную задержку. Чтобы несколько смягчить это, я хочу настроить сервер шлюза кэширования в каждом из регионов, который будет кэшировать запросы на удаленный доступ к ближайшему кластеру.

В настоящее время клиенты в любом из PoP получают доступ к данным пользователя через постоянно смонтированную виртуальную файловую систему swift , которая представляет собой модуль FUSE, который монтирует Swift Object Storage в качестве блочного устройства (более или менее). Однако svfs не так уж и стабилен, и в будущем клиенты должны получать доступ к серверам кеша через NFS.

Это схема одной ветви желаемой архитектуры:

+------------------+                +------------------+    NFS   +------------------+
|    Cluster A     |     SVFS       |  Region 1 Cache  +---------->  R1 PoP a Client |
|                  +---------------->                  |          |                  |
|Persistent Storage|                |Ephemeral  Storage+----+     |Generates R/W Load|
+-----------------++                +------------------+    |     +------------------+
                  |                                         |
                  |                 +------------------+    | NFS +------------------+
                  |      SVFS       |  Region 2 Cache  |    +----->  R1 PoP b Client |
                  +----------------->                  |          |                  |
                                    |Ephemeral  Storage|          |Generates R/W Load|
                                    +------------------+          +------------------+

Я знаком с основами настройки NFS и svfs.

Вопрос заключается в следующем : как настроить сервер кэширования для использования всех доступных ресурсов (выделенный раздел кэша, ОЗУ) для максимально агрессивного кеширования и максимально возможного объема данных перед записью в точку монтирования svfs? В основном это сводится к следующему: Как я могу кэшировать каталог в Linux?

Если возможно, операции чтения и записи должны быть объединены, а размеры блоков в запросах FUSE должны быть не менее 128 КБ, если это возможно, чтобы максимизировать пропускную способность и минимизировать задержку, если кэш должен выполнять запись в кластер.

Приложение 1 : Я переключил модуль монтирования кластера с svfs на S3QL на нескольких серверах. Кеширование S3QL немного улучшило производительность. Я постараюсь получить некоторые данные о производительности для полноты.

mınxomaτ
источник
вы можете попробовать включить fs-кеш на клиентах nfs: cyberciti.biz/faq/…
kofemann
Пожалуйста, посмотрите на serverfault.com/a/441443/345699 . Возможно, это поможет в вашем квесте
Стивен K7FAQ

Ответы:

1

Если встроенные механизмы linux (например, cachefsaka cachefilesd) не работают и у вас есть бюджет, вы можете посмотреть на WAFS (глобальные файловые службы). Это устройства, предназначенные для агрессивного кеширования NFS (и CIFS), чтобы скрыть задержки, обычно связанные с каналами WAN.

Кристиан
источник
1

Я действительно не эксперт в этой области (но это, безусловно, интересно!).

В последнее время я смотрел в основном на dm-кеш для LVM, а для кеширующей части - SSD. Вот пример текста из readhat, который имеет хороший обзор, но он не привязан к RH: https://www.redhat.com/en/blog/improving-read-performance-dm-cache

Фредрик Лундхаг
источник