[О блоге]
[наверх]
[пред]
[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 версии и так очень
хорошо себя ведут.
[оставить комментарий]