Сначала немного предыстории: я работаю в компании, которая запускает веб-приложение на PHP. У нас есть серверная часть хранилища, смонтированная через NFS на нескольких веб-серверах. Сегодня у нас есть проблема, если один веб-сервер записывает файл через NFS, иногда файл не появляется на других подключенных клиентах до нескольких минут спустя. Он также не является избыточным, поэтому мы не можем выполнять «невидимое» обслуживание.
Я искал возможность перехода на решение GlusterFS (два или три реплицированных кирпича / машины для избыточности). Теперь использование XFS в качестве файловой системы хранения "позади" Gluster работает очень хорошо с точки зрения производительности. У Gluster также, похоже, нет упомянутой выше проблемы с синхронизацией.
Однако я бы хотел использовать ZFS в качестве серверной файловой системы по причинам:
В моей демонстрационной настройке решения у меня есть три сервера с Replicated Gluster с внутренним пулом ZFS на отдельном диске на каждом сервере. Я использую CentOS 6.5 с ZFS в Linux (0.6.2) + GlusterFS 3.4. Я также пробовал с Ubuntu 13.10. Все есть в VMware ESX.
Чтобы проверить эту настройку, я смонтировал том поверх Gluster, а затем запустил BlogBench (http://www.pureftpd.org/project/blogbench) для имитации нагрузки. Проблема, с которой я столкнулся, заключается в том, что в конце теста хранилище ZFS, похоже, застряло в тупике. На всех трех машинах zfs_iput_taskq работает на 90–100% ЦП, и тест зависает. Если я прерву тест, тупиковая ситуация не исчезнет, единственный вариант - полная перезагрузка.
Я пытался:
Идеи? Должен ли я просто отказаться от ZFS и выбрать что-нибудь другое? альтернативы?
С уважением, Оскар
Чтобы ZFS в Linux работала под нагрузкой, требуется небольшая настройка. Существует небольшая борьба между ZFS ARC и подсистемой виртуальной памяти Linux.
Для ваших систем CentOS попробуйте следующее:
Создать /etc/modprobe.d/zfs.conf
Файл конфигурации. Это читается во время загрузки / загрузки модуля.
Добавьте что-то вроде:
options zfs zfs_arc_max=40000000000
options zfs zfs_vdev_max_pending=24
Где zfs_arc_max составляет примерно 40% вашей оперативной памяти в байтах (Изменить: попробуйте zfs_arc_max=1200000000
). По умолчанию для zfs_vdev_max_pending установлено значение 8 или 10, в зависимости от версии. Значение должно быть высоким (48) для SSD или дисков с малой задержкой. Может быть, 12-24 для SAS. В противном случае оставьте значение по умолчанию.
Вы также захотите иметь некоторые значения пола в /etc/sysctl.conf
vm.swappiness = 10
vm.min_free_kbytes = 512000
Наконец, с CentOS вы можете установить tuned
и tuned-utils
и установите свой профиль на виртуальный гость с помощью tuned-adm profile virtual-guest
.
Попробуйте это и посмотрите, сохраняется ли проблема.
Редактировать:
Бегать zfs set xattr=sa storage
. Вот почему. Возможно, вам придется стереть тома и начать заново (Я определенно рекомендую сделать это).