Сначала некоторый фон: Я работаю в компании, которая выполняет PHP-webapplication. Нам смонтировали бэкенд устройства хранения данных по NFS на нескольких веб-серверах. Сегодня у нас есть проблема, если один веб-сервер пишет файл по NFS, иногда файл не появляется в других смонтированных клиентах до несколько минут спустя. Это также не избыточно, таким образом, мы не можем выполнить "невидимое" обслуживание.
Я смотрел на миграцию на решение GlusterFS (два или три дублируемых кирпича/машины для дублирования). Теперь, использование XFS как файловая система устройства хранения данных "позади" Gluster работает очень хорошо, мудрая производительность. Gluster также, кажется, не упоминает выше синхронизирующую проблему.
Однако я хотел бы использовать ZFS в качестве файловой системы бэкенда, при этом причины были бы;
В моей демонстрационной установке решения у меня есть три сервера с Дублируемым 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% оперативной памяти в байтах (Edit: try 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
и настроить ваш профиль на virtual-guest с помощью tuned-adm профиля virtual-guest
.
Попробуйте их и посмотрите, сохранилась ли проблема.
Редактирование:
Выполните zfs set xattr=sa storage
. Вот почему. Возможно, вам придется стереть тома и начать все заново (Я бы определенно порекомендовал это сделать ).