Каждый выделенный сервер, который мы продаём, поставляется с двумя NVMe-дисками, и форма заказа спрашивает, как именно вы хотите их собрать. Вариант по умолчанию — зеркало — подходит почти всем, поэтому он и выбран по умолчанию. Эта статья — для тех случаев, когда это не так: когда ёмкость важнее избыточности, когда узкое место — запись и когда вам нужны контрольные суммы и снапшоты, которые даёт только ZFS.
Конфигурации
| Конфигурация | Дисков | Полезная ёмкость | Выдерживает | Скорость чтения | Скорость записи |
|---|---|---|---|---|---|
| RAID 1 (зеркало) | 2 | 1 диск | отказ 1 диска | ~2× одного диска | 1× одного диска |
| RAID 0 (страйп) | 2 | 2 диска | ничего | ~2× | ~2× |
| RAID 10 | 4 | 2 диска | по 1 диску в каждой зеркальной паре | ~4× | ~2× |
| Зеркало ZFS | 2 | 1 диск, минус ~3% | отказ 1 диска, а также скрытое повреждение данных | ~2× | ~0.9× одного диска |
| ZFS RAIDZ1 | 3+ | n − 1 дисков | отказ 1 диска | хорошая | ниже на мелких случайных записях |
«Скорость» здесь указана относительно одного серверного NVMe-диска, который и сам выдаёт сотни тысяч IOPS; для большинства нагрузок конфигурация не меняет того, что вы ощущаете. Важны столбцы о ёмкости и о том, что случится, когда диск умрёт.
Зеркало: вариант по умолчанию и почему
Два диска, и каждый хранит всё. Когда один выходит из строя, сервер продолжает работать на другом, мы заменяем вышедший из строя диск в ближайшее окно обслуживания (или раньше, если вы попросите), а зеркало перестраивается в фоне примерно за двадцать минут для диска на 2 TB. Без простоя и без восстановления из копии. Чтение обслуживается с обоих дисков, поэтому нагрузки с преобладанием чтения, такие как базы данных и раздача веб-страниц, работают чуть быстрее, чем на одном диске. Вы отдаёте половину сырой ёмкости, что на сервере с двумя дисками по 2 TB означает 2 TB полезного объёма.
По умолчанию для зеркала мы используем программный RAID Linux (mdadm): нет аппаратного контроллера, который может отказать или скрыть от вас ошибки, а cat /proc/mdstat в любой момент показывает правду. Вкладка Хранилище в панели показывает то же состояние и присылает вам письмо, когда диск деградирует.
Страйп: когда ёмкость важнее
Страйп использует оба диска как один большой диск без избыточности. Выбирайте его для данных, которые можно воссоздать: кэшей сборки, временного пространства для рендеринга, реплики базы данных, основной экземпляр которой живёт в другом месте, узла транскодирования. Отказ одного диска приводит к потере всего на обоих, поэтому действует правило: ничто на страйпе не должно быть единственной копией чего бы то ни было. При нормальной резервной копии вне площадки это выгодный размен на вдвое больший объём.
RAID 10: четыре диска, когда важна запись
В конфигурациях с четырьмя дисками RAID 10 выполняет чередование поверх двух зеркал: полезного места на 2 диска, в каждой паре может выйти из строя любой один диск, а запись распределяется по двум зеркалам, а не упирается в одно. Это схема для баз данных и очередей сообщений с интенсивной записью, где потолок записи зеркала, равный скорости одного диска, проявляется в перцентилях задержки. Если у вас нагрузка с преобладанием чтения, лишние диски дают скорее ёмкость, чем скорость, и часто лучше использовать их иначе: зеркальная пара плюс пара в страйпе, разделённые по назначению.
ZFS: контрольные суммы, снапшоты, репликация
Дополнение ZFS on root устанавливает базовую систему на зеркало ZFS вместо mdadm. Вместе с ним вы получаете три возможности, которых не даёт ни одна другая конфигурация:
- Сквозные контрольные суммы. Каждый блок проверяется при чтении. Диск, который молча возвращает неверные данные (а это случается чаще, чем громкий отказ), обнаруживается, после чего исправная копия с другого диска используется и перезаписывается. mdadm не может определить, какая сторона зеркала верна, а ZFS может.
- Снапшоты, которые ничего не стоят.
zfs snapshot rpool/data@before-upgradeвыполняется за миллисекунды и не занимает места, пока данные не изменились. Идея та же, что у снапшота в панели, но этот снапшот в вашем распоряжении: его можно автоматизировать скриптами, делать отдельно для каждого датасета, а откат занимает секунду. - Репликация.
zfs send | ssh other-server zfs receiveотправляет инкрементальные снапшоты на второй сервер — это самый дешёвый из известных нам способов держать «тёплую» копию выделенного сервера на другой площадке.
Цена — около 5% сырой пропускной способности на мелких записях и порядка 1 GB RAM на терабайт, чтобы кэш был полезен; на сервере с 64 GB это пустяк. Единственное правило: никогда не ставьте ZFS поверх тома аппаратного RAID, и мы так не делаем — дополнение отдаёт ZFS «сырые» диски.
Таблица решений
- Веб, приложение, база данных, всё, что вам было бы жаль потерять: зеркало (по умолчанию) или зеркало ZFS, если нужны снапшоты и контрольные суммы.
- Временные данные, кэши, реплики, узлы рендеринга: страйп, с пониманием того, что эти данные не жалко потерять.
- Базы данных с интенсивной записью на серверах с четырьмя дисками: RAID 10.
- Хранилища резервных копий, файловые серверы, всё, где много дисков: ZFS RAIDZ1 или пул из зеркал, выбирается вместе с нами через тикет.
Когда диск выходит из строя
Сервер отправляет вам письмо и помечает массив в панели как деградировавший. Для зеркала и RAID 10 больше ничего не меняется. Откройте тикет или дождитесь нашего: мы заменим диск в ближайшее окно, а перестроение запустится само. Для страйпа сервер лежит, пока мы не заменим диск, а вы не переустановите систему, — и именно в этот момент люди жалеют, что не прочли эту статью. Весь смысл выбора конфигурации при заказе в том, что на случай отказа решение принимается, пока он ещё гипотетический.
