Let's Encrypt на ZFS
Что: cc1ebd60bd524b94e27b00ec70cc661670ae6b43
Когда: 2021-01-23 12:52:31+03:00
Темы: 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 версии и так очень
хорошо себя ведут.
оставить комментарий
Сгенерирован: SGBlog 0.34.0