SAN 스위치는 서버와 스토리지 사이에서 중간다리 역할을 해준다.
'서버-SAN-스토리지'의 구조로 FC 케이블로 연결되어 경로(path)를 생성한다.
서버도 스위치도 스토리지도 여러 포트가 있기 때문에 같은 기기간이더라도 여러개의 path를 생성할 수가 있고,
도로의 차선이 넓으면 교통체증이 적고, 사고로 1,2차선이 마비되더라도 차량통행이 가능한 것처럼,
path가 많으면 일부 path에 장애가 발생하더라도 연결이 유지되고 이론상 데이터 전송 속도도 더 빨라진다.
SAN 스위치를 사용하면 대략 이런 구조로 설치하게된다.
저 구조 그대로 연결한다고 가정하면 하나 서버가 하나의 SAN스위치를 통해 스토리지로 도달하는데에 총 4개의 path가, 총 8개의 path가 생기게 된다.
그런데 이렇게 하드웨어적으로 path를 구성해주고 별도로 소프트웨어적으로 구분을 해주지 않으면, 모든 통로가 붙어있고 차선번경이 자유로운 하나의 큰 8차선 도로처럼 동작하게 된다.
불필요한 트래픽을 방지하고, 특정 장치가 다른 장치에 접근하는 것을 제한하여 네트워크의 보안을 강화하고, 장애 발생시 통로를 관리하기 위해서는 별도로 설정을 해줄 필요가 있다.
이걸 조닝(zoning)이라고 한다.
SAN 스위치 설정은 직렬포트 연결을 통해 직접 접속하는 방법과 SAN 스위치에 할당된 IP를 통해 SSH 접속 하는 방법이 있다.
SAN에서 설정할 것은 크게 3가지로 분류된다.
cfg(configuration), zone, alias 이다.
alias는 리눅스를 써봤다면 익숙할 것이다. 각 장치의 물리적 포트에는 WWN(World Wide Name)라는 MAC주소 역할을 하는 고유번호가 있다. 각 WWN에, 혹은 SAN스위치의 포트 넘버에 별칭을 지정해 호출하는데에 사용한다.
zone은 path를 묶는 영역이다. 같은 존에 속한 패쓰끼리는 통신이 허용된다.
cfg는 zone 설정들을 모아놓은 프리셋이다. 여러 조닝 설정을 포함한 다양한 cfg를 생성해두고 필요에따라 다른 cfg를 활성화함으로서 쉽게 설정을 변경할 수 있다. 동시에 하나의 cfg만이 적용 가능하며 생성한 cfg는 cfgenable을 하기 전까지는 적용되지 않는다.
SAN 스위치의 조닝은, 각 포트, 혹은 WWN에 alias를 생성하고, alias를 묶어 zone을 생성하고, zone을 모아 cfg를 생성하는 방식으로 진행된다.
CISCO, DELL 등 제조사에 따라 SAN CLI 명령어가 다르다. 본 글은 DELL EMC SAN 스위치를 기반으로 작성되었다.
DELL EMC SAN 스위치는 Brocade 스위치와 동일한 명령어 체계를 가지고 있다.
SAN 스위치 유지보수 과정에서 자주 사용하면 명령어는 아래와 같다.
switchshow | 스위치 정보 확인. 스위치의 이름, 종류 상태 등와 포트 정보 확인 가능. |
portshow [포트번호] | 포트의 상태, 에러 발생 정보 등 확인 가능. |
alishow, zoneshow, cfgshow |
SAN스위치 내의 cfg, zone, ali를 일괄 출력. |
alicreate "[alias이름]", "[WWN]" | WWN에 alias 연결 |
alicreate "[alias이름]", "[스위치번호],[포트번호]" | 포트에 alias 연결 |
alidelete "[alias 이름]" | alias 삭제 |
zonecreate "[zone이름]", "[alias1]; [alias2]; …; [aliasn]" | alias을 지정하여 zone 생성 |
zoneadd "[zone이름]", "[alias이름]" | zone에 alias 추가 |
zoneremove "[zone이름]", "[alias이름]" | zone에서 특정 alias 삭제 |
zonedelete "[zone이름]" | zone 삭제 |
cfgcreate “[cfg이름]”, “[zone1]; [zone2]; …;[zonen]” | zone을 지정하여 cfg 생성 |
cfgadd “[cfg이름]”, “[zone1]; [zone2]” | zone을 지정하여 cfg에 추가 |
cfgremove “[cfg이름]”, "[zone1]; [zone2]” | zone을 지정하여 cfg에서 제거 |
cfgclear “[cfg이름]” | cfg 내의 모든 zone 제거 |
cfgdelete “[cfg이름]” | cfg 삭제 |
cfgenable "[cfg이름]" | 해당 cfg 활성화 |
먼저 SAN스위치 CLI에 SSH접속한다.
현재 저장되어있는 설정을 확인하고 싶다면 cfgshow, zoneshow, alishow중 어느것이든 사용하면 된다. 어느 명령어든 동일하게 cfg, zone, alias를 모두 출력하기 때문에 셋 중 마음에 드는 것을 사용하면 된다.
초기상태면 출력될 정보가 없을 것이고 기존에 설정이 되어있다면 하단의 예시처럼
존재하는 모든 cfg와 각 cfg에 속한 zone,
존재하는 모든 zone과 각 zone에 속한 alias,
존재하는 모든 alias,
현재 적용중인 cfg와 그 세부 내용 순으로 출력이 된다.
SAN-01:admin> cfgshow
Defined configuration:
cfg: cfg1 zone1; zone2; zone3; zone4
cfg: cfg2 zoneA; zoneB; zoneC; zoneD
zone: zone1 alias1; alias2
zone: zone2 alias3; alias4
zone: zone3 alias5; alias6
zone: zone4 alias7; alias8
zone: zoneA aliasA; aliasB
zone: zoneB aliasC; aliasD
zone: zoneC aliasE; aliasF
zone: zoneD aliasG; aliasH
alias: alias1 00:00:00:00:00:00:00:01
alias: alias2 00:00:00:00:00:00:00:02
alias: alias3 00:00:00:00:00:00:00:03
alias: alias4 00:00:00:00:00:00:00:04
alias: alias5 1,1
alias: alias6 1,2
alias: alias7 2,1
alias: alias8 2,2
Effective configuration:
cfg: cfg1
zone: zone1
00:00:00:00:00:00:00:01
00:00:00:00:00:00:00:02
zone: zone2
00:00:00:00:00:00:00:03
00:00:00:00:00:00:00:04
zone: zone3
1,1
1,2
zone: zone4
2,1
2,2
굳이 기존의 cfg를 제거할 필요 없이 새로운 cfg를 만들어 활성화 cfg만 변경해도 되고, 기존 cfg 설정에서 약간의 변동만 있는 경우 cfgadd, cfgremove, zoneadd, zoneremove 등의 명령어들을 사용하여 기존 cfg를 수정해도 된다.
이 글은 cfg를 새로 생성하는 기준으로 작성한다.
상황
서버 3대 (R740 1ea, R750 2ea), SAN 스위치 1대, 스토리지 1대(Unity680F 1ea)로 구성되어있다.
SAN 스위치는 1번 도메인으로 등록되어있다.
각 장치의 포트 WWN은 아래와 같다.
운영용 R750의 포트의 WWN: 21:43:62:A2:88:0C:6E:35 / 21:43:62:A2:88:0C:6E:36
DB용 R740의 포트의 WWN: 23:33:87:B5:89:1C:6E:77 / 23:33:87:B5:89:1C:6E:78
WAS용 R750의 포트의 WWN: 20:12:66:C7:98:0C:6E:51 / 20:12:66:C7:99:0C:6E:52
Unity680F의 포트의 WWN: 55:02:43:B4:10:2C:6E:11 / 55:02:43:B4:10:2C:6E:12
각 장치의 포트가 연결된 SAN 스위치의 포트 번호는 아래와 같다.
R750(OPS) : 0 / 1
R740(DB) : 8 / 9
R750(WAS) : 16 / 17
Unity680F : 22 / 23
WWN을 사용한 zone의 cfg와 port번호를 사용한 zone의 cfg 2가지를 만들 것이다.
실제로는 둘 중 하나만 만들어 cfg를 활성화시키면 되며 일반적으로는 WWN을 활용한 zone 구성을 주로 사용한다.
WWN을 사용해 zone을 구성할 경우 포트에 상관없이 WWN의 영향을 받기 때문에 SAN스위치의 포트에 문제가 발생해 다른 포트로 옴겨 연결하더라도 zone이 그대로 기능한다.
Port를 사용하여 zone을 구성할 경우 장치에 상관없이 해당 포트에 연결된 모든 장비에서 동작한다. 서버나 스토리지가 고장나 장비를 통째로 교체하더라도 SAN 스위치의 같은 포트에 연결하면 zone이 그대로 기능한다.
일반적으로 서버 to 스토리지의 경로를 기준으로 하나의 경로(path)를 하나의 zone으로 구성한다.
즉, 이 예시 상황의 경우에는
3개의 서버 x 각 서버당 2개의 포트 x 스토리지 2개의 포트 = 12개의 path = 12개의 zone
이 될 예정이다.
cfg와 zone의 구성요소들을 delete 명령어를 사용하여 한번에 없앨 수는 있으나 구성요소였던 zone과 alias들은 그대로 남아있다.
alias와 zone 자체를 지우고 싶다면 일일히 alidelete, zonedelete 명령어로 하나하나 지정하여 지워야한다.
리눅스 커멘드처럼 '*'을 사용한 일괄수정 및 삭제는 지원하지 않는다.
WWN Zoning
먼저 각 WWN별로 alias를 생성한다.
WWN을 직접 지정하여 zone을 구성하는것도 가능은 하나, 해당 WWN이 어느 장비의 어느 포트인지 구분하기가 어려워 유지보수에 어려움이 있다.
alias 별칭은 본인이 구별하기 쉽게 마음대로 작성하면 된다. '-'(dash)는 사용이 불가능하다.
alicreate "alias이름", "WWN"
alicreate "R750_OPS_WWN0", "21:43:62:A2:88:0C:6E:35"
alicreate "R750_OPS_WWN1", "21:43:62:A2:88:0C:6E:36"
alicreate "R740_DB_WWN0", "23:33:87:B5:89:1C:6E:77"
alicreate "R740_DB_WWN1", "23:33:87:B5:89:1C:6E:78"
alicreate "R750_WAS_WWN0", "20:12:66:C7:98:0C:6E:51"
alicreate "R750_WAS_WWN1", "20:12:66:C7:98:0C:6E:52"
alicreate "Unity680F_WWN0", "55:02:43:B4:10:2C:6E:11"
alicreate "Unity680F_WWN1", "55:02:43:B4:10:2C:6E:12"
각 path별로 zone을 만든다.
일반적으로 zone에 붙이는 P1, P2 등은 경로(path) 번호 표시이다.
zonecreate "zone이름", "alias1; alias2"
zonecreate "R750_OPS_Unity680F_WWN_P1", "R750_OPS_WWN0; Unity680F_WWN0"
zonecreate "R750_OPS_Unity680F_WWN_P2", "R750_OPS_WWN0; Unity680F_WWN1"
zonecreate "R750_OPS_Unity680F_WWN_P3", "R750_OPS_WWN1; Unity680F_WWN0"
zonecreate "R750_OPS_Unity680F_WWN_P4", "R750_OPS_WWN1; Unity680F_WWN1"
zonecreate "R740_DB_Unity680F_WWN_P1", "R740_DB_WWN0; Unity680F_WWN0"
zonecreate "R740_DB_Unity680F_WWN_P2", "R740_DB_WWN0; Unity680F_WWN1"
zonecreate "R740_DB_Unity680F_WWN_P3", "R740_DB_WWN1; Unity680F_WWN0"
zonecreate "R740_DB_Unity680F_WWN_P4", "R740_DB_WWN1; Unity680F_WWN1"
zonecreate "R750_WAS_Unity680F_WWN_P1", "R750_WAS_WWN0; Unity680F_WWN0"
zonecreate "R750_WAS_Unity680F_WWN_P2", "R750_WAS_WWN0; Unity680F_WWN1"
zonecreate "R750_WAS_Unity680F_WWN_P3", "R750_WAS_WWN1; Unity680F_WWN0"
zonecreate "R750_WAS_Unity680F_WWN_P4", "R750_WAS_WWN1; Unity680F_WWN1"
메모장이나 엑셀에 명령어를 작성해두고 ssh로 cli에 붙여넣는 과정에서 저렇게 이상하게 출력될 때가 있는데 정상적으로 등록되니 걱정하지 않아도 된다.
zone 구성 후에는 원하는 zone을 모두 모아 cfg를 생성한다.
cfgcreate "cfg이름", "zone1; zone2; ...; zonen" 같은 방식으로 한번에 원하는 모든 zone을 선택할 수 있다.
cfgcreate "cfgwwn", "R750_OPS_Unity680F_WWN_P1; R750_OPS_Unity680F_WWN_P2; R750_OPS_Unity680F_WWN_P3; R750_OPS_Unity680F_WWN_P4; R740_DB_Unity680F_WWN_P1; R740_DB_Unity680F_WWN_P2; R740_DB_Unity680F_WWN_P3; R740_DB_Unity680F_WWN_P4; R750_WAS_Unity680F_WWN_P1; R750_WAS_Unity680F_WWN_P2; R750_WAS_Unity680F_WWN_P3; R750_WAS_Unity680F_WWN_P4"
cfgshow, zoneshow, alishow 중 하나를 이용해 잘 등록되었는지 확인할 수 있다.
Port Zoning
먼저 각 포트별로 alias를 생성한다.
alias 별칭은 본인이 구별하기 쉽게 마음대로 작성하면 된다. '-'(dash)는 사용이 불가능하다.
alicreate "alias이름", "스위치 도메인 번호, 포트 번호"
alicreate "R750_OPS_PORT0", "1, 0"
alicreate "R750_OPS_PORT1", "1, 1"
alicreate "R740_DB_PORT8", "1, 8"
alicreate "R740_DB_PORT9", "1, 9"
alicreate "R750_WAS_PORT16", "1, 16"
alicreate "R750_WAS_PORT17", "1, 17"
alicreate "Unity680F_PORT22", "1, 22"
alicreate "Unity680F_PORT23", "1, 23"
각 path별로 zone을 만든다.
일반적으로 zone에 붙이는 P1, P2 등은 경로(path) 번호 표시이다.
zonecreate "zone이름", "alias1; alias2"
zonecreate "R750_OPS_Unity680F_PORT_P1", "R750_OPS_PORT0; Unity680F_PORT22"
zonecreate "R750_OPS_Unity680F_PORT_P2", "R750_OPS_PORT0; Unity680F_PORT23"
zonecreate "R750_OPS_Unity680F_PORT_P3", "R750_OPS_PORT1; Unity680F_PORT22"
zonecreate "R750_OPS_Unity680F_PORT_P4", "R750_OPS_PORT1; Unity680F_PORT23"
zonecreate "R740_DB_Unity680F_PORT_P1", "R740_DB_PORT8; Unity680F_PORT22"
zonecreate "R740_DB_Unity680F_PORT_P2", "R740_DB_PORT8; Unity680F_PORT23"
zonecreate "R740_DB_Unity680F_PORT_P3", "R740_DB_PORT9; Unity680F_PORT22"
zonecreate "R740_DB_Unity680F_PORT_P4", "R740_DB_PORT9; Unity680F_PORT23"
zonecreate "R750_WAS_Unity680F_PORT_P1", "R750_WAS_PORT16; Unity680F_PORT22"
zonecreate "R750_WAS_Unity680F_PORT_P2", "R750_WAS_PORT16; Unity680F_PORT23"
zonecreate "R750_WAS_Unity680F_PORT_P3", "R750_WAS_PORT17; Unity680F_PORT22"
zonecreate "R750_WAS_Unity680F_PORT_P4", "R750_WAS_PORT17; Unity680F_PORT23"
zone 구성 후에는 원하는 zone을 모두 모아 cfg를 생성한다.
cfgcreate "cfg이름", "zone1; zone2; ...; zonen" 같은 방식으로 한번에 원하는 모든 zone을 선택할 수 있다.
cfgcreate "cfgport", "R750_OPS_Unity680F_PORT_P1; R750_OPS_Unity680F_PORT_P2; R750_OPS_Unity680F_PORT_P3; R750_OPS_Unity680F_PORT_P4; R740_DB_Unity680F_PORT_P1; R740_DB_Unity680F_PORT_P2; R740_DB_Unity680F_PORT_P3; R740_DB_Unity680F_PORT_P4; R750_WAS_Unity680F_PORT_P1; R750_WAS_Unity680F_PORT_P2; R750_WAS_Unity680F_PORT_P3; R750_WAS_Unity680F_PORT_P4"
cfgshow, zoneshow, alishow 중 하나를 이용해 잘 등록되었는지 확인할 수 있다.
cfgenable 명령을 사용하면 해당 cfg를 활성화할 수 있다.
cfg를 기존 cfg에서 변경하게되는 경우 서버와 스토리지의 연결이 끊어지는 참사가 발생할 수 있다.
초기 설정 과정이 아닌 기존 설정값이 존재하는 경우 cfg변경은 주의를 필요로 한다.
cfgshow, zoneshow, alishow 중 하나를 이용해 현재 등록되어있는 모든 cfg, zone, alias와 활성화중인 cfg가 확인이 가능하다.
'Storage' 카테고리의 다른 글
SAN Switch - (1) SAN 스위치란 (0) | 2023.12.20 |
---|
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!