[О блоге] [наверх] [пред] [2021-01-23 12:52:31+03:00] [cc1ebd60bd524b94e27b00ec70cc661670ae6b43]
Темы: [zfs]

Let's Encrypt на ZFS

https://letsencrypt.org/2021/01/21/next-gen-database-servers.html
https://github.com/letsencrypt/openzfs-nvme-databases
Let's Encrypt опубликовала то, как они живут с ZFS-ом и MariaDB для
своих довольно нагруженных задач. По железу ничего интересного: stripe
из 12 NVMe зеркал -- да там за миллион IOPS-ов должно быть! В памяти
можно ничего не хранить (индексы БД) -- одни IOPS-ы выжмут всё что надо.

А настройка ZFS ничем не примечательна, но грамотна. Именно такой и
должен быть подход и понимание особенностей dataset-ов:

* выставленный ashift -- must-have, для NVMe даже 8KiB поставили
* включённый hotspare -- так держать. Тем более что несколько терабайт
  для их NVMe это вопрос очень небольшого времени
* использование простых зеркал в stripe -- разумно, из-за NVMe и малого
  времени resilvering-а. Для HDD конечно было бы неразумно
* используют /dev/disk/by-id/ -- если диск честно отдаёт свой id, то
  разумно. Нормальные NVMe думаю что такое. Хотя лично я предпочитаю
  создавать GPT с label-ом... содержащим серийник диска :-)
* балансировка дисков по контроллерам и шинам -- как минимум понимают
  важность (всё ж у меня и не было сомнений что там квалифицированные
  специалисты работают) этого
* atime=off -- так держать. Лично у меня только единственный dataset с
  Maildir-ом моей почты для Mutt имеет atime=on
* compression=lz4 -- вообще в случае с дюжиной NVMe у меня бы были
  сомнения а не упрёмся ли мы в CPU, но видимо что LZ4 и CPU настолько
  хороши, что даже с такой дисковой подсистемой это не бутылочное горлышко
* primarycache=metadata -- правильно, учитывая что у СУБД своё неплохое
  кэширование (для задач)
* recordsize=128k -- ну это и так default, всё ok
* xattr=sa -- вот с этим, кроме как на Ceph, не сталкивался, но видел
  что надо бы. Хотя на FreeBSD эта настройка вообще не используется

InnoDB раздел -- особый. Как минимум в нём fsync:

* logbias=throughput -- разумно, ибо, как верно заметили, все диски и
  так одинаковы по производительности, плюс это не HDD где головку надо
  перемещать на ZIL и обратно. throughput тут позволяет "вне ZIL" сразу
  записывать данные, что для NVMe разумно
* recordsize=16k -- самая главная настройка по сути. В PostgreSQL это 8K.
  Это убирает дичайший overhead который бы был с recordsize=128K
* redundant_metadata=most -- убирает необходимость создания некоторых
  копий метаданных. Если это сильно вредит, и раз всё равно зеркало
  есть, то разумно

В самой MariaDB отключены checksum-ы -- разумно, так как оно есть в ZFS.
Отключён doublewrite -- ибо записи в ZFS атомарны. write ahead log
бессмысленнен на CoW -- выставлены в размер recordsize. Отключён AIO, ну
потому что это Linux и он говно в котором много что работает плохо, это
очевидно. flush_neighbors отключён, ибо это всё равно CoW и NVMe.

У меня придраться не к чему, всё как надо. Хотя я удивлён что sysctl
никак не настраивали. Но видимо современные ZFS версии и так очень
хорошо себя ведут.

    [оставить комментарий]