У меня есть установка реплики узла 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).