dm-multipath의 아키텍처: 커널과 사용자 공간의 협력 구조
dm-multipath는 Linux 커널의 Device Mapper 프레임워크 위에 구축되며, 물리적 SAN 연결(케이블, 스위치, 컨트롤러)을 통한 여러 I/O 경로를 하나의 가상 블록 디바이스(/dev/mapper/mpathN)로 통합합니다. 이 다중화 계층은 커널 모듈과 사용자 공간 데몬의 이분 구조로 동작합니다. dm_multipath 커널 모듈은 I/O 요청 재라우팅과 경로 그룹 장애 조치를 담당하며, multipathd 데몬은 경로 상태를 지속적으로 모니터링하고 장애 감지 시 경로 그룹 전환을 조율합니다.
경로 선택과 I/O 분산의 작동 원리
dm-multipath는 두 가지 주요 구성 모드를 지원합니다. Active/Passive 구성에서는 주어진 시점에 활성 경로 그룹만 I/O를 처리하며, 그룹 내 모든 경로가 실패할 경우에만 대기 그룹으로 전환됩니다. Active/Active 구성에서는 모든 경로에 걸쳐 I/O를 분산하며, Round-Robin, Service-Time 또는 동적 로드 밸런싱 정책에 따라 다음 I/O가 전송될 경로를 결정합니다. 경로 우선순위는 저장소 제어기의 SCSI-3 ALUA 설정, 네트워크 지연, 대기 중인 I/O 요청 수 같은 인자에 의해 동적으로 계산됩니다.
I/O 실패 처리와 투명한 재시도 메커니즘
dm-multipath는 한 경로에서의 I/O 실패를 감지하면 자동으로 같은 LUN에 대한 다른 경로로 요청을 재전송합니다. 이 재시도는 전용 멀티경로 워커 스레드 컨텍스트에서 수행되어 SCSI 미드레이어 또는 완료 핸들러의 소프트 인터럽트 문맥에서의 블로킹을 방지합니다. 모든 경로가 실패한 후에만 애플리케이션에 I/O 오류가 반환되며, queue_if_no_path 옵션을 활성화하면 경로 복구 대기 중 I/O를 큐에 보관할 수 있습니다.
실무 주의점: 경로 모니터링과 구성의 함정
경로 모니터링 주기(기본값 5초)와 no_path_retry 설정이 총 I/O 큐 시간을 결정하므로, 예를 들어 no_path_retry=6이면 최대 약 30초간 I/O가 큐에 머물 수 있습니다. LVM을 사용할 때는 주의가 필요한데, 배열이 I/O 수신 시 능동적으로 경로를 전환하는 경우 LVM 스캔으로 인한 반복적인 장애 조치와 복구가 발생할 수 있으므로 multipath.conf와 lvm.conf에서 기저 디바이스를 필터링해야 합니다. 또한 dm-multipath는 경로 자체의 장애만 보호하며, 저장소 매체 오류 같은 디바이스 내부 결함은 감지하지 못합니다.