Назад | Перейти на главную страницу

Преобразование зеркала ZFS с 3 активными дисками в 2 + 1 горячий резерв

После установки Proxmox VE 3.4 с ZFS и raid1 с использованием трех дисков я получаю следующий пул:

root@pve:~# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sda3    ONLINE       0     0     0
            sdb3    ONLINE       0     0     0
            sdc3    ONLINE       0     0     0

Если я правильно понимаю настройку, все данные будут отражены на трех дисках. Несмотря на то, что это будет поддерживать имитацию отказа сразу 2 дисков, я предполагаю, что запись всего на два диска снижает производительность. Думаю, двух было бы достаточно.

Как мне преобразовать sdc3 в горячий резерв? Я хочу, чтобы он автоматически стал активным и заменил сломанный диск в случае отказа диска.

Примечание: использование горячего резерва в этой ситуации, вероятно, не лучшая идея. Причину этого см. Ниже, ниже ответ на заданный вопрос.


Ответ на заданный вопрос:

Перед сокращением избыточности пула я настоятельно рекомендую запустить одну полную очистку, чтобы убедиться, что все устройства работают и нет скрытых ошибок данных:

# zpool scrub rpool
... wait for it to finish, check zpool status for the status of the scrub ...

Зеркала ZFS позволяют добавлять и удалять зеркальные стороны (это называется прикреплением и отсоединением), поэтому освободить sdc3 легко:

# zpool detach rpool sdc3

Затем вы можете добавить его как запасной. Возможно, вам сначала потребуется пометить его очистить (иначе ZFS может пожаловаться, что он является частью существующего пула):

# zpool labelclear /dev/sdc3

Обратите внимание, что после очистки метки ZFS не будет знать, как читать устройство, поэтому это эффективно удаляет все данные с него. Следовательно, быть осторожен с помощью указанной выше команды.

Затем посмотрите, что сделает добавление его в качестве горячего резерва без каких-либо изменений:

# zpool add -n rpool spare /dev/sdc3

Результатом выше должна быть конфигурация, подобная следующей:

    NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        sda3    ONLINE       0     0     0
        sdb3    ONLINE       0     0     0
      spares
        sdc3    AVAIL

Обратите внимание, что раздел «запасные части» может не отображаться; здесь важно то, что вы не добавляете еще один vdev на одном уровне с зеркалом-0. Другими словами, приведенный ниже пример неверен:

    NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        sda3    ONLINE       0     0     0
        sdb3    ONLINE       0     0     0
      sdc3      ONLINE       0     0     0

Убедившись, что команда выполнит то, что вы намереваетесь, удалите -n чтобы произвести изменение. В частности, не проходить -f к zpool add если ты не абсолютно уверен что он будет делать то, что вы хотите.

Обратите внимание, что вышеупомянутое касается только фактической настройки устройства как запасного. Не знаю, как настроить его как горячий запасная и автоматическая замена на Proxmox VE.


Что касается того, почему это может быть не лучшая идея:

Помните, что для горячего резерва потребуется resilver, как только он станет необходим, и он недоступен для обслуживания каких-либо запросов на чтение во время нормальной работы, поэтому делая это ты на самом деле сокращение устойчивость вашего пула к сбоям, а также потенциальное снижение производительности чтения. В настоящее время, если один из sd [abc] 3 выходит из строя, у вас по-прежнему работают два диска, обеспечивая избыточность; с конфигурацией горячего резерва, если какой-либо из sd [ab] 3 выйдет из строя, то для поддержки полного переноса данных на sdc3 горячего резерва без ошибок потребуется единственный оставшийся диск. Если любой Ошибки чтения обнаруживаются на единственном функциональном диске в процессе переноса данных на «горячий» резерв для его обновления, после чего вы теряете данные.

Если предположить, что HBA способен выдерживать нагрузку, N-образное зеркало будет иметь производительность записи одного диска, независимо от количества устройств в зеркале, поскольку все они должны быть обновлены, прежде чем запись будет считаться выполненной, а записи выполняются параллельно на физических устройствах. На читать, в зависимости от конкретных характеристик вы можете получить любую производительность от одного диска до производительности всех N дисков.

Если ваша рабочая нагрузка тяжелая при синхронной записи, что, как я ожидал, скорее всего вызовет конкуренцию за производительность записи, вместо этого рассмотрите возможность добавления хорошего SSD для использования в качестве SLOG. Это должно улучшить производительность записи при синхронной записи. Если большинство ваших операций записи являются асинхронными (что обычно используется по умолчанию, за исключением таких вещей, как NFS), вы не увидите большой разницы, но вы также не заметите большого влияния на производительность трехстороннего зеркала, имеющего запись производительность только одного диска до тех пор, пока у вас не закончится ОЗУ ARC и двустороннее зеркало не будет быстрее; если это так, подумайте о добавлении RAM для использования ZFS в качестве ARC.

Плохая идея использовать диск в качестве запасного в этой настройке: вы потеряете скорость чтения третьего диска и почти ничего не получите в скорости записи. Ключевой момент, который нужно понять, заключается в том, что записи записываются одновременно, поэтому (почти) нет замедления при наличии 3-дискового зеркала по сравнению с 2-дисковым.