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

Какое разумное время переключения хранилища при отказе может выдержать большинство ОС (ВМ)?

У меня есть установка реплики узла 2 GlusterFS 2. Я планирую использовать его как хранилище экземпляров OpenStack, в котором хранится образ диска виртуальной машины.

Судя по моим тестам, если узел GlusterFS, на котором в настоящее время монтируется гипервизор, выходит из строя (с использованием настроек GlusterFS по умолчанию), для подключения к тайм-ауту требуется около 45 секунд, и клиент glusterfs переключается на другой узел. В течение этих 45 секунд операции ввода-вывода будут зависать с точки зрения виртуальной машины, что означает, что диск перестанет отвечать.

Я знаю, что для Linux, если диск перестанет отвечать, через некоторое время (я не уверен, сколько времени) ядро ​​перемонтирует файловую систему как доступную только для чтения.

Я также могу уменьшить значение тома GlusterFS network.ping-timeout, что сократит время переключения при отказе.

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

Чтобы быть более точным, я хотел бы знать время, когда диск не отвечает, которое может выдержать Windows NTFS, FreeBSD UFS / ZFS и Linux ext4. Какие параметры задействованы? (например, /sys/block/sda/device/timeout в Linux)

связанная информация:

Обновление: @ the-wabbit ответил о Linux и Windows, я также хотел бы узнать о FreeBSD

Драйвер диска обычно будет ждать, пока не истечет настраиваемый тайм-аут, прежде чем даже сообщать об ошибке для запрошенной операции.

Как вы выяснили, это /sys/block/<devicename>/device/timeout в Linux и по умолчанию 60 30 секунд.

Windows хранит эту конфигурацию как глобальные настройки TimeoutValue (REG_DWORD) в HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk\ по умолчанию 60 секунд.

Пока в восходящем направлении не сообщается об ошибке, вы не увидите никаких немедленных действий (например, перемонтирование FS), даже после истечения тайм-аута вы, как правило, увидите больше действий обработчика ошибок (ведение журнала, сброс устройства и т. Д.) До ошибка передается обратно на верхний уровень.

Но имейте в виду, что будут и другие последствия, влияющие на общую доступность.

  • приложения или системные службы могут реализовывать собственные тайм-ауты и выдавать исключения по истечении срока
  • на серверах с большим количеством запросов вы увидите заполнение очередей и исчерпание памяти, поскольку новые клиенты продолжают отправлять новые запросы, а старые запросы все еще ждут ответа хранилища.
  • если у вас есть место подкачки на отказавшем устройстве, все запросы на ввод / вывод страниц будут остановлены, эффективно блокируя процессы, работающие на этих страницах памяти.

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

FreeBSD имеет geom_mountver (https://www.freebsd.org/cgi/man.cgi?gmountver), что можно использовать, чтобы заставить его выдерживать любое время переключения при отказе. Если вы используете ZFS, вам может потребоваться отключить таймер deadman; он вызовет панику, если ввод-вывод не завершится за 15 минут (IIRC).