Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

MPIO

MPIO(Multipath I/O)는 컴퓨터 스토리지에서 사용하는 기술이다. 기술의 사용 목적은 아래와 같다.
  • 성능 향상 : 더 많은 데이터를 읽고 쓸수 있다.
  • 장애 내성 : 하나의 입출력 경로가 실패하더라도, 다른 입출력 경로로 입출력을 할 수 있다.
iSCSI를 이용한 입출력시, 두 개 이상의 네트워크 채널로 명령을 전송한다. 두 개의 NIC을 이용하기 때문에 대역폭을 확보 할 수 있으며, 하나의 NIC 혹은 데이터가 경유하는 스위치에 문제가 생기더라도 여전히 iSCSI 명령을 전송할 수 있다.(물론 이 경우 I/O 지연을 예상 할 수 있겠으나 서비스 실패보다는 낫다.)

네트워크 레벨에서 좀 더 자세히 묘사한 그림이다.

구축을 위해서 필요한 요구사항들이다.
  • 두 개의 분리된 네트워크가 필요하다.
  • 스토리지 노드와 클라이언트 노드 모두 2개의 네트워크 인터페이스(NIC)를 가지고 있어야 한다.
  • 네트워크 인터페이스는 물리적으로 분리된 스위치에 연결해야 한다.
  • 가능하면, 서로 다른 제조업체에서 만든 스위치와 NIC를 사용한다.
리눅스는 커널 2.6부터 DM-Multipathing(DM-MPIO)로 지원하고 있다.

LACP vs MPIO

Bonding는 여러 개의 네트워크 인터페이스를 묶어서 대역폭과 가용성을 확보하는 일체의 기술을 가리킨다. LACP(Link aggregation, 802.3ad)는 bonding의 구동모드 중 하나다.두개 이상의 물리적인 NIC을 하나로 묶어서 대역폭을 확보한다. MPIO와 목적은 비슷하지만 작동 방식은 전혀 다르다.

LACP는 단일 I/O 흐름(flow)에 대해서는 대역폭 증가를 기대할 수 없다. 단일 흐름은 항상 하나의 패스만을 따라가기 때문이다. LACP는 여러개의 unique 흐름이 있을 때, 이득을 얻을 수 있다. 각 각의 흐름은 hash 알고리즘에 의해서 하나의 NIC을 선택해서 데이터를 전송한다. 따라서 여러개의 unique 흐름이 있을 경우에는 여러개의 NIC을 묶으면 그만큼의 대역폭을 확보할 수 있다.

MPIO는 스토리지 노드와 클라이언트 노드간에 작동하며, 스위치는 여기에 개입하지 않는다. LACP는 스위치와 노드사이의 작동이다. 일반적으로 클라이언트 노드는 하나의 NIC으로 스위치와 연결하고, (데이터가 집중되는)스토리지 노드와 스위치간에 LACP를 구성한다. 아래 그림은 본딩을 이용한 SAN 구성을 묘사하고 있다.

  • 1G NIC을 가진 20개의 노드들이 있다. 총 대역폭은 20G다.
  • 2개의 스토리지 노드들이 있다. 이 노드는 10G NIC으로 서비스를 한다. 총 대역폭은 20G다.
  • 스위치 구간을 보자. 하나의 10G 링크로는 20G의 대역폭을 감당할 수 없다. 그래서 10G 포트 두개를 묶어서 20G의 대역폭을 확보했다.