У меня есть сервер репозитория с большим количеством файлов и данных, которые используются несколькими узлами. В последнее время я столкнулся с проблемой высокой нагрузки на репозиторий из-за большого объема чтения с узлов.
Что я хотел сделать, так это иметь некоторые последние данные (скользящее окно), которые используются наиболее часто, локально на узлах, к счастью, у меня есть немного места на SSD на узлах. Лишь немногие задания, выполняемые на узлах, требуют старых данных из самого репозитория. Теперь вопрос в том, есть ли возможность объединить данные из общего ресурса NFS и локально хранящиеся в одной папке. Приложение, использующее данные, не имеет возможности переходить в разные папки. Структура следующая:
> Share: /data/YYYY/YYYYMM/.....
> Local: /local/YYYY/YYYYMM/.... (But only last 3 months)
Я хочу смонтировать его в той же папке, /mnt
например, что /mnt/2015/201512
будет на локальном SSD и /mnt/2015/201511
будет доступно с сервера репозитория
Вы мог используйте что-то вроде overlayfs: https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt
Существуют похожие пакеты ПО, такие как aufs или UnionFS. aufs, afaik, устарел.
У меня нет опыта работы с этими программными пакетами, и это кажется ужасным занятием. Я бы попытался решить проблему с добавлением кеша чтения к серверу NFS. Просто сделайте его достаточно большим и дайте ему поработать некоторое время, из вашего описания вы должны получить приличные показатели попадания.
Клиент nfs в Linux имеет встроенную поддержку кэширования данных на локальном диске - так называемый CacheFS. В большинстве случаев кэширования вам нужно просто настроить, где хранить данные, и указать клиенту с помощью параметра монтирования, чтобы включить локальное кэширование. Проверьте CentOS / RHEL CacheFS: ускорение доступа по NFS для подробностей.