멀티패스(Multipath)란 SAN 스위치와 스토리지 사용 환경에서 하나의 볼륨이 다중경로로 표시될 때, 논리적으로 하나의 볼륨으로 묶어주는 기능이다.
하나의 저장소가 컴퓨터에서 여러개로 인식되는 상황에서 그것들을 다시 하나로 만들어주는 기능이다.
Path가 무엇인지는 [SAN Switch - (2) SAN 스위치 설정 zoning]를 참고.
멀티패스(Multipath)란
이런식으로 연결이 되어 스토리지에서 서버에 볼륨을 할당해주게 되면
서버는 아래와같이 총 4개의 path로 해당 스토리지 볼륨을 조회하게 된다.
동일 볼륨을 4가지 경로로 바라보게 되는 것이다.
SAN 스위치를 사용해서 이더넷이 아닌 HBA로 연결하게 되면 디스크를 추가했을 때처럼 인식된다.
패스 하나당 하나의 볼륨으로 인식되기 때문에 위와 같이 패스가 4개라면 1개의 볼륨이 4개의 볼륨으로 인식된다.
멀티패스는 동일 볼륨의 경우 하나의 논리적 볼륨으로 인식하게 해주는 기능인데 과거에는 주로 스토리지에서 제공하는 기능이었으나 요즘은 OS에서 멀티패스 설정이 가능하다.
DM-Multipath
레드햇에서 제공하는 멀티패스 툴은 DM-Multipath(Device Mapper Multipathing)이라고 부른다.
RHEL과 CentOS, Rocky에서 사용 가능하다.
기존의 여러개로 보이는 볼륨들을 묶어 대표하는 하나의 논리적 볼륨을 생성하는 방식으로 동작한다.
위의 사진과 같이 PowerEdge R740서버에서 Unity 스토리지로부터 100GB의 볼륨을 할당받아 4개의 path로 연결된 상황을 설정해 DM-Multipath를 사용해 볼 것이다.
먼저는 스토리지에서 서버에 볼륨을 할당해준다.
필요에 맞게 레플리카 옵션 등을 줄 수 있다.
멀티패스 실습을 위한 볼륨임으로 별다른 옵션없이 100GB를 할당하여 R740과 연결해 주었다.
서버(R740/Rocky9)에서 lsblk로 확인해보면 아래와 같이 나온다.
sdd, sde, sdf, sdg가 각각 100G로 총 4개의 100GB 볼륨이 확인됨을 볼 수 있다.
이는 4개의 path로 볼륨을 조회하고 있기 때문에 발생한다.
해당 볼륨을 마운트하여 사용하기 위해 멀티패스를 사용해줘야 한다.
DM-Multipath는 리눅스 커널의 일부로 디바이스 매퍼(Device Mapper) 프레임워크를 사용하여 제공되기 때문에 RHEL 5 부터는 별도의 패키지 설치 없이도 이 기능을 사용할 수 있다.
Red Hat Enterprise Linux, CentOS, Rocky 등 레드햇 계열은 모두 사용 가능하며 명령어도 동일하다.
만약 패키지가 내장되어있지 않은 경우 아래의 명령어로 패키지 설치가 가능하다.
sudo yum -y install device-mapper-multipath
현재 설치된 Rocky9에는 별도로 설치가 필요없으므로 바로 멀티패스 설정파일을 활성화해준다.
mpathconf --enable
/etc/multipath.conf 파일이 생성된다.
멀티패스 설정에 넣을 수 있는 옵션은 아래와 같다.
defaults { # 이 섹션에서는 모든 멀티패스 장치에 적용되는 기본 설정을 지정
user_friendly_names yes/no # 이 옵션을 설정하면 자동으로 멀티패스에 대한 이름을 mpath'n' 형식으로 제공
find_multipaths yes/no # 이 옵션은 단일 경로 장치를 멀티패스로 처리할지 여부를 결정
enable_foreign "^$" # 이 옵션은 외부 도구에서 처리된 장치에 대한 멀티패스 설정을 가능하게 함. "^$"는 비활성화 옵션값
path_grouping_policy group_by_prio # 이 옵션은 멀티패스 장치의 경로를 그룹화하는 정책을 설정
path_selector "round-robin 0" # 이 옵션은 I/O 요청을 보낼 경로를 선택하는 정책을 설정
path_checker readsector0 # 이 옵션은 경로의 상태를 확인하는 방법을 설정
failback immediate # 이 옵션은 primary 경로가 복구된 후 언제 failback을 수행할지 설정
no_path_retry fail # 이 옵션은 모든 경로가 실패했을 때 어떻게 동작할지 설정
rr_min_io_rq 1 # 이 옵션은 round-robin 경로 선택자가 경로를 전환하기 전에 보내는 I/O 요청 수를 설정
}
blacklist { # 이 섹션에서는 멀티패스 설정을 적용하지 않을 장치를 지정
wwid "3600c0ff000d7a48b9e3a495800000001" # 이 옵션은 blacklist에 추가할 장치의 WWID를 지정
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" # 이 옵션은 blacklist에 추가할 장치의 노드 이름을 지정
}
blacklist_exceptions { # blacklist에서 지정한 장치 중에서 예외적으로 멀티패스 설정을 적용할 장치를 지정
wwid "3600c0ff000d7a48b9e3a495800000001" # 이 옵션은 blacklist_exceptions에 추가할 장치의 WWID를 지정
devnode "^sda[0-9]*" # 이 옵션은 blacklist_exceptions에 추가할 장치의 노드 이름을 지정
}
devices { # 이 섹션에서는 특정 장치에 대한 설정을 지정
device {
vendor "IBM" # 이 옵션은 장치의 제조사를 지정
product "S/390 DASD ECKD" # 이 옵션은 장치의 제품 이름을 지정
path_grouping_policy group_by_prio # 이 옵션은 장치의 경로를 그룹화하는 정책을 설정
}
}
multipaths { # 이 섹션에서는 멀티패스 경로 장치에 대한 설정을 지정
multipath {
wwid "3600c0ff000d7a48b9e3a495800000001" # 첫번째 멀티패스 장치의 WWID를 지정
alias multipathname1 # 첫번째 멀티패스 장치의 별칭을 지정
}
multipath {
wwid "3600c0ff000d7a48b9e3a495800000002" # 두번째 멀티패스 장치의 WWID를 지정
alias multipathname2 # 두번째 멀티패스 장치의 별칭을 지정
}
}
처음 생성되었을 때에는 아래와 같이 defaults 섹션에서 멀티패스에 자동으로 mpath넘버링을 할당하는 user_friendly_name 옵션과 자동으로 멀티패스를 인식하고 설정하는 find_multipaths 옵션이 활성화가 되어있다.
OS 버전에 따라(eg. RHEL8.4) defaults 섹션에서 외부 장치에서 설정된 디스크도 처리하게끔 하는 enable_foreign옵션이 "^$" 값으로 설정되어있는 경우가 있으나 "^$"는 비활성화를 의미하는 옵션값이기 때문에 무시해도 무방하다.
# device-mapper-multipath configuration file
# For a complete list of the default configuration values, run either:
# # multipath -t
# or
# # multipathd show config
# For a list of configuration options with descriptions, see the
# multipath.conf man page.
defaults {
user_friendly_names yes
find_multipaths yes
enable_foreign "^$"
}
blacklist_exceptions {
property "(SCSI_IDENT_|ID_WWN)"
}
blacklist {
}
이 상태로 DM-Multipath를 활성화 하면 자동으로 연결된 볼륨중 동일한 볼륨들을 인식하여 mpath로 시작하는 이름을 지닌 멀티패스를 생성하게 된다.
즉, 현재 환경에서는 sdd, sde, sdf, sdg 4개의 볼륨을 자동으로 인식하여(find_multipaths) mpatha라는 이름의(user_friendly_name) 멀티패스 1개를 생성하게 될 것이다.
멀티패스를 활성화한다.
systemctl start multipathd
systemctl enable multipathd
그 후 다시 lsblk로 확인해보면 멀티패스가 생성되었음을 볼 수 있다.
볼륨이 여러개라 멀티패스에 mpath[a,b,c] 순으로 붙는 이름을 그대로 사용하지 않고 개별적으로 이름을 주고 싶다면 멀티패스 이름 변경이 가능하다.
Multipath Alias
스토리지가 서버에 저장공간을 할당하기 위해 볼륨을 생성할때, 해당 볼륨에 WWID(World Wide Identifier)를 부여하게된다. WWID는 WWN처럼 고유한 식별로 볼륨이 생성될때 함께 부여되어 생명주기 동안 변경되지 않는다.
DM-Multipath는 볼륨의 WWID를 기반으로 동일 볼륨임을 판별하고 멀티패스를 구성하게 된다.
멀티패스의 WWID는 2가지 방법으로 확인이 가능하다.
'multipath -ll' 명령을 사용하거나, '/etc/multipath/bindings'의 내용을 확인하면 된다.
'multipath -ll' 명령을 사용하면 아래와 같이 활성화된 멀티패스의 이름, WWID, 멀티패스로 묶인 디스크들이 표시된다.
'/etc/multipath/bindings'에는 아래와 같이 등록된 멀티패스들의 alias와 WWID가 보인다.
bindings에 등록된 정보는 일부러 수정하기 전에는 삭제되지 않고 멀티패스들 정보를 계속 유지한다.
bindings 파일에 정보가 유지되기 때문에 기존의 멀티패스를 연결 해제하고 새로운 멀티패스를 생성하면 네이밍이 처음이(eg. mpatha) 아닌 중간부터(eg. mpathb, mpathc) 다시 시작된다.
이 WWID와 해당 볼륨에 매칭할 alias를 설정파일에 등록해 이름을 개별 지정해 줄 수 있다. 2가지 방법이 있는데 하나는 DM-Multipath 설정파일인 '/etc/multipath.conf' 나머지 하나는 '/etc/multipath/bindings'이다.
'/etc/multipath/bindings'는 현재까지 등록된적 있는 멀티패스들에 대한 데이터이고 해당 데이터를 불러와 멀티패스를 구성하게 된다.
즉, '/etc/multipath/bindings'에서 alias를 수정하고 데몬을 재실행하거나 설정파일을 다시 읽어오게 되면 변경 내용이 바로 적용된다.
'/etc/multipath/bindings' 안에서 자동 생성 멀티패스 이름인 'mpatha'를 'test2_mpath'로 변경하고 아래의 명령을 사용하여 multipathd가 설정파일을 다시 읽어오게 해주면 정상적으로 멀티패스 alias가 변경되었음을 확인할 수 있다.
# 둘중 하나 사용
multipathd reconfigure # 설정파일 새로 읽어오기
systemctl restart multipathd # 데몬 재실행
'/etc/multipath.conf'에서는 위에서 설명한 바와 같이 multipaths 섹션을 추가하여 작성하면 된다.
multipaths {
multipath {
wwid 3600601605db04e00888ca0652f0daee9
alias test_multipath_volume
}
}
'/etc/multipath/bindings/'와 마찬가지로 multipathd를 재실행해주면 적용된다.
# 둘중 하나 사용
multipathd reconfigure # 설정파일 새로 읽어오기
systemctl restart multipathd # 데몬 재실행
multipath.conf와 bindings 둘 중 하나만 수정하면 되는데 두 파일에서 WWID 등록된 alias가 다를 경우 multipath.conf가 우선된다.
Multipath Mount
멀티패스가 등록되었다면 실제로 스토리지에서 할당받은 볼륨을 사용하기 위해 시스템에 마운트 시켜줘야 한다.
일반적으로 디스크를 추가때와 마운트 과정에 차이가 거의 없으나 마운팅 디스크 위치를 선택할때 멀티패스를 잘 선택해 주는 것이 중요하다.
일반적인 디스크는 /dev/ 바로 아래에 존재하는데 DM-Multipath로 생성된 멀티패스 볼륨은 /dev/mapper/ 아래에 존재한다.
멀티패스 볼륨에 파티션을 생성해준다.
fdisk /dev/mapper/test2_path
별 다른 설정 없이 디폴드 옵션으로 파티션을 생성해주었다.
필요에 따라 맞게 설정하면 된다.
파티션 생성 후 저장을 하게되면 에러가 나타난다.
OS 버전에 따라 정확한 문구는 다를 수 있다.
RHEL8.4의 경우 'Failed to add partition 1 to system: Invalid argument'
Rocky9의 경우 'Re-reading the partition table failed.: Invalid argument' 가 출력된다.
이는 커널이 생성된 새로운 파티션 테이블을 인식하지 못했다는 경고 문구이고 다른 디스크의 파티션과 달리 멀티패스의 파티션 테이블 변경은 커널이 즉시 인식하지 못하기 때문에 발생한다.
파티션 자체는 정상적으로 생성되었기 때문에 무시해도 무방하다.
만에 하나를 대비하여 파티션에 오류가 없는지 검증하고 싶다면
partprobe /dev/mapper/test2_mpath
partprobe 명령을 사용하여 파티션 검증을 해볼 수 있다.
이상이 없다면 명령 후 아무것도 리턴되지 않는다.
파티션이 생성 되었다면 파티션에 파일 시스템 포멧을 결정한다.
리눅스 환경에서 많이 사용되는 파일시스템중 하나인 ext4로 진행하였다.
mkfs.ext4 /dev/mapper/test2_mpath1
파일시스템이 생성되었다면 해당 파티션을 원하는 폴더에 마운트 해주면 된다.
mkdir /testmount
mount /dev/mapper/test2_mpath1 /testmount
재부팅시에도 마운트를 유지하기 위해 blkid로 UUID를 확인 후 /etc/fstab에 등록해줄 수 있다.
blkid
vi /etc/fstab
설정파일 수정까지 마치면 멀티패스 마운트 작업이 완료된다.
ETC
레드햇 리눅스에서 제공하는 DM-Multipath 외에는
Veritas FCS 및 LUN 확인 명령어 실행:
vxdmpadm getsubpaths all
이 명령어는 Veritas Dynamic Multi-Pathing(DMP)를 통해 구성된 서브패스(FCS)와 LUN의 정보를 출력
Veritas 멀티패스 갯수 및 FCS 확인 명령어 실행:
vxdmpadm listctlr all
이 명령어는 시스템에서 인식된 멀티패스 갯수와 사용 중인 FCS 정보를 출력
Veritas VCS 핫빗카드 체크 명령어 실행:
lltconfig -a list
lltstat -nvv | more
위 명령어는 VCS(Cluster Server)의 핫빗카드(내부 핫빗용) 정보를 확인 가능
Veritas VX disk 확인 명령어 실행:
vxdg list
vxdisk list
vxprint -ht
AIX Disk 갯수 확인 명령어 실행:
lsdev -Cc disk | wc -l
위 명령어는 시스템에서 인식된 디스크의 갯수와 디스크 정보를 확인할 수 있다. 멀티패스 갯수는 이 값을 실제 LUN 갯수로 나누면 얻을 수 있다.
AIX에서 VXVM Disk 확인 명령어 실행:
vxdisk list | wc -l
vxdisk list
이 명령어는 AIX에서 구성된 VXVM(Volume Manager)의 디스크 정보를 확인할 수 있다. 동일한 LUN 갯수를 확인하고 PATH 갯수를 기록할 수 있다.
AIX 이더채널 카드 체크 명령어 실행:
lsdev -Cc adapter
ifconfig -a
lsattr -El entx (x: Interface)
lsdev -Cc adapter | grep -i fcs
lscfg -vl fcs0 | grep -i net
lsmpio -ar
lspath
위 세 가지 명령어를 통해 AIX에서 이더넷 채널 카드(Enternet Channel Adapter) 정보 및 인터페이스 설정을 확인할 수 있다. Active-Active, Active-Standby 등의 설정을 확인할 수 있다.
EMC PowerPath 정보 확인 명령어 실행:
powerrmt display
이 명령어는 EMC PowerPath의 구성 정보를 표시
Logical device 확인 명령어 실행:
powerrmt display dev=all
이 명령어는 모든 논리 디바이스(Logical Device)의 정보를 표시
LUN 상태 및 Path 상태 확인 명령어 실행:
powerrmt display paths
이 명령어는 LUN의 상태와 각 경로(Path)의 상태를 확인할 수 있다.
Windows 명령 프롬프트(CMD)
다중 경로 구성 캡처 명령어 실행:
mpclaim.exe -v c:\multipathconfig.txt
등이 있다.
'Server' 카테고리의 다른 글
Linux Network Bond (0) | 2024.02.13 |
---|---|
iODD 아이오드 (0) | 2024.02.05 |
DNS 서버 구축 (0) | 2024.01.08 |
NTP 서버와 클라이언트 (0) | 2024.01.04 |
CLI로 고정 IP 할당 (0) | 2023.12.27 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!