Назад | Перейти на главную страницу

Gluster + ZFS, взаимоблокировка при тестировании: zfs_iput_taskq 100% cpu

Сначала немного предыстории: я работаю в компании, которая запускает веб-приложение на 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. Вот почему. Возможно, вам придется стереть тома и начать заново (Я определенно рекомендую сделать это).