ALUA (Asymmetric Logical Unit Access) — это механизм в системах хранения данных, который позволяет хосту понимать и учитывать различие в путях доступа к одному и тому же устройству хранения (LUN — Logical Unit Number).
Простой пример:
Допустим, у тебя СХД с двумя контроллерами (A и B), и у каждого есть доступ к одному и тому же диску. ALUA говорит операционной системе:
"Контроллер A — оптимальный путь, а контроллер B — альтернативный, медленнее или неэффективнее".
Зачем нужен ALUA?
В системах с несколькими путями к одному LUN (например, в SAN-сетях) важно знать:
Какой путь быстрый и прямой (active/optimized)
А какой только резервный (active/non-optimized или standby).
Благодаря ALUA:
Система может автоматически выбирать оптимальный путь к данным;
Можно обеспечить отказоустойчивость: если основной путь перестанет работать, данные будут доступны по альтернативному пути;
Повышается производительность и предсказуемость работы СХД.
Где используется:
В протоколах iSCSI, Fibre Channel, SAS.
В ОС — ALUA поддерживается, например, в Windows, Linux (через multipathd), VMware vSphere и др.
На СХД от производителей, таких как Dell EMC, HPE, NetApp, Huawei и других.
ALUA и MPIO (Multipath I/O):
ALUA — это часть технологии мультипутизации (MPIO). Она передаёт ОС информацию о приоритетах путей. MPIO использует эту информацию, чтобы направлять запросы на чтение/запись по оптимальному пути.
Что такое ALUA — в деталях?
ALUA (Asymmetric Logical Unit Access) — это стандарт, определённый в спецификации SCSI (SPC-3), который позволяет инициатору (серверу/хосту) понимать, что у него есть несколько путей к одному логическому устройству хранения (LUN), и что не все эти пути равнозначны.
ALUA сообщает хосту:
Есть несколько путей к LUN.
Некоторые пути более производительные или предпочтительные.
Некоторые пути использовать только при сбое основных.
Где применяется ALUA
ALUA применяется в двухконтроллерных системах хранения или в кластерах СХД, где каждый контроллер может иметь доступ к одним и тем же LUN'ам.
Типичный сценарий:
Два контроллера в СХД (например, контроллер A и B).
LUN экспортируется обоим.
Контроллер A — "владелец" этого LUN (Active/Optimized).
Контроллер B — может обрабатывать запросы, но менее эффективно (Active/Non-Optimized) или только в случае отказа (Standby).
Пример на пальцах (упрощённо)
У нас есть:
- СХД с двумя контроллерами: A и B.
- Сервер подключён к обоим контроллерам через SAN.
LUN 0:
- Физически находится под контролем контроллера A.
- Сервер может обратиться к нему как через A (Active/Optimized), так и через B (Active/Non-Optimized).
Если путь через A сломался — сервер автоматически переключается на B, благодаря ALUA и MPIO.
ALUA и MPIO (Multipath I/O)
MPIO (мультипутизация) — это ПО на сервере:
Оно управляет всеми доступными путями к LUN.
Использует ALUA, чтобы понять, какой путь лучший, какой резервный.
Как это работает:
- Сервер обнаруживает несколько путей к одному и тому же LUN.
- Через ALUA получает информацию, какие пути оптимальны.
- Настраивает использование путей: активный — основной, остальные — резервные.
- В случае сбоя пути — происходит автоматическое переключение.
Какие СХД поддерживают ALUA?
- Dell EMC (VNX, Unity)
- NetApp (ONTAP)
- HPE 3PAR, Primera, Alletra
- IBM Storwize
- Huawei OceanStor
- TrueNAS (в режиме failover)
- Почти все системы с iSCSI/Fibre Channel и SCSI LUN'ами
Типы ALUA-конфигураций в СХД
Вендоры реализуют ALUA в зависимости от архитектуры своей СХД. Вот какие бывают виды ALUA-конфигураций:
1. Implicit ALUA
ALUA-информация автоматически управляется СХД.
Хост просто получает сведения о путях и не может их менять.
Большинство систем работают в этом режиме.
Преимущество: просто и безопасно.
Недостаток: меньше гибкости.
2. Explicit ALUA
Хост может запрашивать изменение состояния путей.
Используется, например, в некоторых высокоуровневых отказоустойчивых конфигурациях или при ручном управлении путями.
Преимущество: гибкий контроль.
Требует корректной реализации на обеих сторонах (СХД и ОС).
Основные виды ALUA-доступа (Access States)
ALUA определяет 6 типов состояний доступа (access state):
Active/Optimized
Основной, быстрый путь. Контроллер — "владелец" LUN и обрабатывает запросы напрямую.
Active/Non-Optimized
Активный, но не оптимальный путь. Контроллер может обрабатывать запросы, но с задержкой (например, через внутреннюю маршрутизацию).
Standby
Путь не активен, но может быть активирован вручную или автоматически при сбое.
Unavailable
Путь физически недоступен — ни один контроллер не может его использовать.
LBA Dependent Не поддерживается большинством систем. Предполагает разную доступность путей в зависимости от диапазонов блоков.
Offline Устройство сознательно отключено, запросы не обрабатываются.
LUA в контексте архитектур СХД
Active/Active
Все контроллеры могут одновременно обрабатывать LUN'ы. ALUA сообщает, какой путь быстрее.
Active/Passive
Только один контроллер активен для конкретного LUN. ALUA сообщает, что другие пути — standby или non-optimized.
Dual Active (ALUA)
Оба контроллера доступны, но с разной производительностью. Используется Active/Optimized и Active/Non-Optimized.
Подводим итог
ALUA бывает:
- По типу состояния пути: 6 access state'ов.
- По механизму управления: implicit vs explicit.
- В разных СХД-архитектурах: Active/Active, Active/Passive, Dual Active.
Теперь когда производитель указывает Вам: ALUA уточняйте какой именно.