Вопрос или проблема
- Я получаю доступ к удаленному SAN на базе iscsi, используя multipath.
- Сеть на стороне сервера имеет известные прерывистые проблемы, такие как отказы сессий и отказы путей/ввод-вывод. Я не пытаюсь решить эту проблему, так как она уже на стадии работы в процессе.
- Теперь проблема в том, что, например, я пытаюсь форматировать или разбить устройство на разделы через процесс/сервис, команда parted/mkfs зависает, вызывая панику ядра. Это значение установлено на 240 секунд.
- Теперь, что я хочу избежать — это паника ядра, я хочу, чтобы команда parted/mkfs неудачно завершилась и вернулась без вызова паники ядра.
- Я искал и пытался изменить различные параметры (iscsid, sysfs, multipath), но безрезультатно.
Вот моя конфигурация iscsid
iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket
node.startup = automatic
node.leading_login = No
node.session.timeo.replacement_timeout = 30
node.conn[0].timeo.login_timeout = 30
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.tgt_reset_timeout = 30
node.session.initial_login_retry_max = 8
node.session.cmds_max = 128
node.session.queue_depth = 2
node.session.xmit_thread_priority = -20
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 262144
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.MaxXmitDataSegmentLength = 262144
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
node.conn[0].iscsi.HeaderDigest = CRC32C
node.conn[0].iscsi.DataDigest = CRC32C
node.session.nr_sessions = 1
node.session.reopen_max = 0
node.session.iscsi.FastAbort = Yes
node.session.scan = auto
конфигурация multipath
defaults {
path_checker none
user_friendly_names yes # Для создания имен ‘mpathn’ для многопутевых устройств
path_grouping_policy multibus # Чтобы разместить все свои пути в одной группе приоритета
path_selector "round-robin 0" # Чтобы использовать алгоритм round robin для определения пути для следующей операции ввода-вывода
failback immediate # Для немедленного возврата на путь с наивысшим приоритетом с активными путями
no_path_retry 1 # Для отключения очереди ввода-вывода после одного повторного запроса, когда все пути недоступны
}
И я установил все значения таймаута sysfs для всех подчиненных путей на 30 секунд.
Но даже при этом parted/mkfs никогда не завершает работу и не возвращается, когда возникает проблема с сетью (смоделирована). Чего мне не хватает?
Моя версия multipath немного устарела, но я не могу обновить ее, так как это поддерживаемая версия на Rocky 8.
multipath-tools v0.8.4 (05/04, 2020)
iscsid версия 6.2.1.4-1
Ответ или решение
Теория (Theory)
Когда вы сталкиваетесь с проблемой, связанной с высоким временем ожидания ввода-вывода на устройствах iSCSI с включенным multipath, это часто связано с несовершенством настройки вашего логического и физического уровня взаимодействия с сетью хранения данных. iSCSI (Internet Small Computer System Interface) позволяет организациям использовать уже имеющиеся сетевые ресурсы для использования сетей хранения данных (SAN), что делает его популярным выбором для многих компаний. Однако его эффективная работа требует тщательной конфигурации, особенно в условиях, когда сеть испытывает проблемы с надежностью.
Multipath – это технология, которая позволяет нескольким физическим путям к устройству хранения данных существовать одновременно. Это обеспечивает отказоустойчивость и балансировку нагрузки. Вместо того чтобы зависеть от одного подключения, multipath может автоматически переключаться на другой, более надежный путь.
Пример (Example)
Ваш случай с iSCSI SAN демонстрирует довольно распространённую проблему: меры, направленные на улучшение устойчивости через использование multipath, могут иногда стать причиной дополнительных сложностей, если сеть нестабильна. Даже с конфигурацией failover и настройками времени потребления, оптимальными для восстановления, parted или mkfs могут повиснуть, если сетевые отказы возникают слишком часто или на слишком долгий срок, что может привести к панике ядра.
Вы уже внесли изменения в конфигурационные файлы iscsid и multipath с целью минимизации таких задержек, но результата добиться не удалось. Проблема может возникать из-за сочетания факторов: некорректных параметров таймаута, слишком агрессивной политики повторных попыток, неверных значений для управления потоком данных, или даже ошибок в настройках самого multipath.
Применение (Application)
-
Переосмыслите настройку iSCSI:
- Проверьте конфигурацию
iscsid.conf
, в частности,node.session.timeo.replacement_timeout
. Это значение определяет, как долго сессия будет пытаться восстановиться. В большинстве случаев, 30 секунд должно быть достаточно, но иногда возможно имеет смысл увеличить его для большей устойчивости, но это может привести к задержкам. - Сократите количество повторных попыток. Убедитесь, что
node.session.reopen_max
установлен в разумное число. Нулевое значение позволяет неограниченное количество, что может привести к подвисаниям.
- Проверьте конфигурацию
-
Адаптация конфигурации multipath:
- Ваша конфигурация
multipath
имеетno_path_retry
= 1, что отключает очередь ввода-вывода после одного сбоя всех путей, но это может оказаться непоказательным, если сеть часто "дрожит". Попробуйте изменить это значение на более высокое количество попыток илиfail
, чтобы операционная система могла управлять ошибочным завершением. - Убедитесь, что в вашей модели сервера учтено распределение нагрузки и отказоустойчивость. От вас также потребуется регулярное планирование и тестирование.
- Ваша конфигурация
-
Настройка sysfs таймаутов:
- Вы установили таймауты sysfs в 30 секунд. Попробуйте увеличить их, чтобы посмотреть, снизит ли это частоту паники ядра. Таймауты должны быть согласованы между iSCSI и ОС.
-
Долгосрочные стратегии:
- Пока рабочая группа решает сетевые проблемы, временно переведите workload на менее критический уровень, чтобы уменьшить нагрузку.
- Рассмотрите возможность модернизации сетевых компонентов или замены ключевых звеньев в сети на более надежные.
- Разработайте план развертывания или улучшения производственной инфраструктуры.
Таким образом, ваша задача – сосредоточиться на минимизации последствий отказов, обусловленных сетевым наложением iSCSI и multipath, путем адаптации параметров и политики ваших конфигурационных файлов, а также с помощью альтернативных решений, таких как архитектурные изменения или временные замены.