이제 구성된 CentOS + ZFS RAIDZ1 시스템의 zpool 에서 일정 부분을 iSCSi Target 으로 설정하여,
ESXi 하이퍼바이저 하에서 다른 가상 시스템의 메인 하드디스크 용도로 사용할 것입니다.
방법은 어렵지 않습니다. ZFS 시스템에서 부분적으로 파티션( /~ ) 이 아닌 DISK 장치 ( /dev/~ ) 를 만들고,
그것을 네트워크 Target 으로 삼아, 게시하는 것입니다.
[ 계획도 ]
- SSD 데이터스토어에 설치한 가상 CentOS(20GB) 시스템 메인에서
외부의 모든 물리 하드디스크를 원시매핑(RDM) 하여, OpenZFS로 디스크 전체 Zpool 을 구성한 상태.
그 상태에서 외부 가상시스템의 메인 하드디스크로 iSCSi 를 내보내기 위해 Target 을 구성.
1. iSCSi Target 생성을 위해 Package 를 설치합니다. ( Yum install scsi-target-utils )
- 의존성 패키지가 추가로 같이 설치 될 것입니다.
Installed:
scsi-target-utils.x86_64 0:1.0.24-16.el6
Dependency Installed:
libibverbs.x86_64 0:1.1.8-3.el6 librdmacm.x86_64 0:1.0.18.1-1.el6
perl-Config-General.noarch 0:2.52-1.el6 sg3_utils.x86_64 0:1.28-6.el6
2. chkconfig | grep tgtd 로 해당 서비스가 정상적으로 올라왔는지 확인 합니다
- 보통 모든 init 레벨에서 해제되어 있으므로 chkconfig tgtd on 으로 켜 주도록 합시다.
tgtd 0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제
그리고 서비스 스타트도 잊지 말아야 합니다. ( 꺼져 있으면 tgtadm 이 실행되지 않습니다 )
# service tgtd start 또는 /etc/init.d/tgtd start
3. iSCSi Target Controller와 Name 을 LUN 0 으로 우선 등록해 줍니다.
- 네트워크에서 검색될 도메인명과 기본 Lun 을 지정해 주는 단계입니다.
원하는 도메인명(실제 도메인이 아님! 원하는대로) 을 입력하면 됩니다. ( ex : 도메인 : 스토리지 구분 네이밍 )
[ 네트워크 상에서 myunginy.iptime.org:storage.win 라는 이름으로 검색할 수 있게 생성 ]
#tgtadm --lld iscsi --op new --mode target --tid 1 -T myunginy.iptime.org:storage.win
정상적으로 생성되었다면 엔터 후 아무 메세지도 나오지 않아야 합니다.
--tid 값은 새 Target 을 만들 때 증가시켜 주면 됩니다.
[ 정상적으로 위의 내용이 생성되었는지 확인하기 ]
#tgtadm --lld iscsi --op show --mode target
Target 1: myunginy.iptime.org:storage.win
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
Account information:
ACL information:
와 유사하게 나오면 정상적으로 생성이 된 것입니다.
생성만 하였지 실제 DISK 와 매핑시키지 않았기에 용량 정보가 없어야 합니다.
4. ZFS 파일시스템에서 50GB 를 DISK Device 로 할당한 후 iSCSi 의 Lun 1 에 매핑시킵니다
정상적인 물리 디스크라면 df -h 에 표시되는 /dev/sda 같은. 원하는 디바이스를 그대로 매핑하면 됩니다만
여기서는 현재 CentOS 에 RDM + RAIDZ 된 Zpool 에서 50GB 만을 논리적으로 장치화하여 매핑할 것입니다.
방법은 간단합니다
#1. 파티션이 아닌, 장치를 생성합니다
#zfs create -V 50G main/windows
main 은 zpool 이름이고 그 아래로 windows 라는 disk 를 만들겠다는 의미입니다. 엔터 후에 아무 표시도 되지 않으면 정상.
이것은 파티션이 아닌 장치이므로 마운트를 거치지 않아 df -h 에 바로 보이지 않습니다.
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 7.6G 367M 6.9G 6% /
tmpfs 939M 4.0K 939M 1% /dev/shm
/dev/sda1 190M 62M 119M 34% /boot
/dev/sda7 187M 1.6M 176M 1% /home
/dev/sda3 5.7G 1.4G 4.1G 25% /usr
/dev/sda6 1.9G 467M 1.4G 26% /var
main 7.7T 128K 7.7T 1% /main
main/ftp 8.0T 240G 7.7T 3% /main/ftp zpool의 범주 ( 생성한 windows 는 보이지 않습니다 )
main/owncloud 7.8T 40G 7.7T 1% /main/owncloud
생성한 장치는 다음 위치에 있습니다.
# cd /dev/zvol/main/windows
해당 /dev/zvol/main/windows 라는 disk 를 iSCSi Target 의 Lun 1 로 매핑하면 됩니다.
#2. Lun 1 에 매핑
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/zvol/main/windows
엔터 후 아무 메세지도 나오지 않으면 설정 된 것입니다.
정상적으로 생성되었는지 위에서 사용한 show 명령어를 이용하여 확인합니다.
#tgtadm --lld iscsi --op show --mode target
Target 1: myunginy.iptime.org:storage.win
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 53687 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/zvol/main/windows
Backing store flags:
Account information:
ACL information:
네 LUN 1에 아까 zfs create -V 50G 로 생성한 크기만큼 매핑이 되어 있습니다. 경로도 맞군요.
이제 네트워크 게시가 끝난 것입니다. 저번에 물리하드를 가상화에 직접 연결하던 RDM 과 어찌보면 다를 게 없죠? ^^
이제 저걸 외부에서 검색해서 찾아가기만 하면 되는 것입니다.
그러기 위해서는 네트워크의 해당 iSCSi Target PORT 가 열려 있어야 합니다. 보통 디폴트는 3260 포트 입니다.
바인드 해 주어야겠죠? ( 일종의 네트워크 포트 포워딩입니다 )
[ 외부 전체에 BIND 하기 ]
#tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
엔터 후 아무 메세지도 나오지 않으면 성립된 것입니다.
말 그대로 target 1 을 ALL 전체 BIND 하겠다는 커맨드입니다.
[ BIND 후 포트가 열려 있는지 확인하기 ]
#netstat -atunp | grep 3260
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 14245/tgtd
tcp 0 0 :::3260 :::* LISTEN 14245/tgtd
[ 현재 설정한 내용을 환경파일에 저장하기 ]
#tgt-admin --dump > /etc/tgt/targets.conf
※ 기존에 이미 관련 정보가 있다면 > 말고 >> 로 추가해 주시면 됩니다.
타겟 시스템에서 기본 구성은 끝났습니다. 이젠 ESXi vSphere Client 에서 불러오면 됩니다.
#1. 관리 Client인 vSphere Client 에서 소프트웨어적인 iSCSi 컨트롤러를 설치 해 줍니다.
[스토리지 어댑터] 탭에서 [추가] 버튼을 누르거나 , 마우스 오른쪽 버튼으로 추가할 수 있습니다.
구성은 모두 디폴트로 세팅 합니다.
#2. 자동으로 iSCSi Target 추가하기
우리는 앞에서 이미 구성을 했으므로, 단순히 찾아만 주면 됩니다.
추가된 iSCSI 컨트롤러 속성에 가셔서 [동적 구성] 탭에서 CentOS 의 IP 를 추가해 주면 됩니다. 포트는 기본 그대로입니다.
아이피만 입력하고 확인을 누르면, 서버 위치에 저렇게 뜨면 정상입니다.
#3. 확인 후 바깥으로 나오면 iSCSi 컨트롤러에 이제 경로가 추가되어 있습니다.
이제 연결이 완료된 것입니다. 쉽죠?
6. 새 가상 시스템 만들어서 해당 iSCSi Target 의 LUM 1 을 메인 하드디스크로 사용하기
네 이 작업을 하려고 기나긴 1~5를 해온 것인데요.
이제 기본적으로 새 가상시스템 설치를 진행하도록 합니다.
방식은
[표준 설치] 선택 후 하드디스크 [없음] 으로 진행하여, 시스템 생성한 뒤 [편집] 에서 추가하는 방법과
[사용자 지정] 선택 후, 하드디스크 선택에서 [가상 디바이스] 를 선택하는 방법이 있습니다.
그간 비활성화되어 있던 [원시 디바이스] 탭이 활성화되어 있을 것입니다.
나머지는 적당히 디폴트로 진행하셔도 됩니다.
이로써, 별도의 하드디스크를 사용하지 않고,
CentOS 에서 ZFS 구성한 Zpool 에서 50GB만을 별도로 하드디스크화해서 사용하게 되었습니다!
고생하셨습니다.
다음 게시물은 CentOS 에 네트워크 모니터링 툴 설치 항목입니다.