Как эффективно делиться папкой хоста с гостями KVM?

Я настраиваю сервис, который хранит множество файлов, загруженных с помощью nginx в /srv/storage dir на хост-системе. Эти файлы обрабатываются рабочими гостями KVM, которые могут создавать новые файлы или назначать расширенные атрибуты существующим. Файлы никогда не перезаписываются, но в конечном итоге удаляются одним из работников.

Таким образом, хост-сервер имеет скорость записи файлов около 177 МБ / с. Образ KVM - это файл QCOW2, хранящийся в файловой системе хоста, и образ достигает ~ 155 МБ / с внутри экземпляра KVM благодаря следующей настройке virtio:

<driver name='qemu' type='raw' cache='none' io='native'/>

Однако я не могу получить такие результаты для общей папки. Я получил максимум 40 МБ / с с помощью virtfs aka virtio 9p. Кажется, нет никакого AIO эквивалента для монтирования:

mount -t 9p -o trans=virtio,version=9p2000.L uploads /srv/storage

Я также думал о:

  • нет NFS - расширенные атрибуты отсутствуют
  • нет GlusterFS - работает, но производительность хуже, чем virtio, потому что в сети, что-то вроде избыточного на одном аппаратном компьютере,
  • Может быть, разделение объема LVM для R / W? - на самом деле папка хранится в отдельном разделе, однако я где-то читал, что LV не может быть совместным доступом, потому что это может привести к повреждению fs.
  • хранить загруженные файлы на QCOW2 и делиться ими со всеми сторонами?
  • сохранить nginx и загруженные файлы в экземпляре KVM на QCOW2, как-нибудь поделиться изображением со всеми гостями?
  • iSCSI - возможно с одним разделом?

Итак, как эффективно делиться папкой хоста с гостями KVM с работающими расширенными атрибутами).

4 ответа

CIFS может делать расширенные атрибуты. Вы можете настроить его с помощью Samba в Linux.

Если ваша проблема заключается в пропускной способности, вы можете выиграть от увеличения максимального размера пакета. По умолчанию это 8 КиБ (msize=8192).

Оптимальное значение может потребовать некоторых экспериментов и может варьироваться в зависимости от вашего использования и базовой файловой системы, но я обнаружил, что 256 КиБ (msize=262144) хорошо подходят для моих целей. Это позволило увеличить пропускную способность с ~150 МБ / с до ~ 1,5 ГБ / с.

Смотрите также: https://lime-technology.com/forum/index.php?topic=36345.15

Если вы решите поделиться томом LV напрямую или через iSCSI, вы не сможете поделиться им как r/w без кластерной FS. Если у вас недостаточно места, вы можете использовать два тома: один r/w на хосте, а другой r/w на гостевой, в то время как другой pary будет иметь только права на чтение на томе не-r/w. И синхронизируйте их с drbd или rsync.

Довольно некрасиво, но это то, что ты понимаешь, когда не можешь использовать NFS

Наконец, я перешел с KVM на контейнеризацию LXC+Docker, которая поддерживает монтирование bind. Выбранные каталоги хоста монтируются внутри контейнера. Так как не требуется никакой сети или трансляции, производительность такая же, как на хост-машине. Кроме того, несколько контейнеров могут записывать в один "том" одновременно без каких-либо исключительных блокировок.

Другие вопросы по тегам