CentOS에서 iSCSI Target 생성 및 관리
iSCSI는 Internet Small Computer System Interface의 약자이며, 저렴한 비용으로 데이터 저장소를 연결하는데 사용되는 인터넷 프로토콜 (IP) 기반의 Storage 네트워킹 표준이다. 즉, IP 네트웍 상에서 SCSI 명령을 수행함으로써 iSCSI가 로컬 영역 네트워크 (LAN), 광역 네트웍 (WAN) 또는 인터넷 상에서 보다 손쉽게 데이터를 전송하는 것이 가능하다. 따라서 iSCSI를 통해 저장소 서버의 Storage는 Local Disk처럼 사용될 수 있다. 물론 실제로는 Local에서 등록된 Disk는 Storage 서버에 존재하기에 Disk로 전송되는 모든 데이터는 네트웍을 통해서 Storage 서버로 전송된다.
또한 이렇게 Local Disk로 등록된 Storage는 서로 다른 서버에서 Storage를 공유해서 사용 할 수 있기에 그 활용도가 매우 높다. 예를 들면 Oracle RAC를 구축할 때 Sharing storge가 필요한데 이때 iSCSI를 이용하면 손쉽게 Oracle RAC의 Data 저장공간으로 활용할 수 있다.
따라서 본 글에서는 Oracle11g RAC 구축에 있어서 반드시 필요한 Sharing Storage에 대해서 iSCSI를 활용하는데 그 촛점이 맞추어져 있음을 사전에 밝혀둔다. 또한 iSCSI Target 생성 이후 iSCSI Client에서 이들 자원을 사용하는 방법은 CentOS에서 iSCSI Initiator 사용 및 관리를 참고하면 좋을듯하다.
Linux에서의 iSCSI Target
제공하는 Storage entity를 target이라 하고 이렇게 제공된 entity를 가져다가 사용하는 것을 initiator라고 정의한다. 즉, target은 iSCSI의 서버가 되며, 공유된 저장 공간이 존재하는 곳이다. 그리고 제공되는 Storage를 가져다가 사용하기 위해서 Server에 접근하는 것을 Initiator라고 하며 iSCSI의 Client라고 한다. Oracle RAC 구성시 Storage server는 target이 되고, 각 RAC Node에서는 Initiator를 수행하여 target의 자원을 사용하게 된다.
Linux에서는 Target을 설정하는데에 서로 다른 모듈이 존재하는데 Linux 커널 2.6.38까지는 SCSI Target Framework (STGT/TGT)가 표준이었고, 이후부터는 LIO (Linux-IO) Target이 표준이다. 본 문서에서는 CentOS 6.5를 사용하고 CentOS 6.5의 Kernel은 2.6.32이기에 TGT 모듈을 사용한다.
<TGT vs LIO>
iSCSI Target과 LUN
SCSI 용어에서 LUN은 논리 단위 장치 번호 (Logical Unit Number)라고 한다. 이 LUN은 물리적 SCSI 장치("Target"를 의미함)의 일부인, 개별적으로 주소 지정이 가능한 (논리적) SCSI 장치를 나타낸다. iSCSI 환경에서는 가상화 방식으로 SCSI Disk로의 연결이 구현된다. iSCSI Target은 연결 인터페이스와 유사하며, LUN은 본질적으로 번호가 매겨진 Disk Drive에 해당한다고 볼 수 있다. Client인 iSCSI Initiator에 의해 iSCSI Target이 연결되면 해당 iSCSI Target에 매핑된 모든 LUN이 Client의 운영 체제에 가상으로 연결된다. 따라서 Initiator가 마치 자신의 Local에 존재하는 SCSI 또는 IDE Disk처럼 iSCSI LUN에서 파일 시스템을 설정하고 관리할 수 있다.
CentOS에 iSCSI Target 설치 및 환경 설정
CentOS 6.5에서 iSCSI Target 환경을 만들기 위해서는 scsi-target-utils라는 패키지가 필요하다. scsi-target-utils는 TGT를 위한 관리툴인 tgtadm과 TGT Daemon 역할을 하는 tgtd가 포함되어져 있다. 본 패키지는 CentOS 설치 미디어에 함께 포함되어져 있다.
rpm -Uvh scsi-target-utils-1.0.24-10.el6.x86_64
32-bit TGT 패키지도 존재하지만 가능하면 64-bit OS 환경에서 64-bit iSCSI 서버를 운영할 것을 권고한다.
/etc/init.d/tgtd start
chkconfig tgtd on
혹은
service tgtd start
iSCSI Target에 사용될 Device 준비
iSCSI Initiator에 의해서 Client에서 실제로 사용하게 될 Sharing Storage의 실질적인 Space를 만들어야 한다. 즉 tgtd Daemon이 iSCSI의 Client가 Initiator에 의해 iSCSI를 요청할 때 표현되는 block device를 만들어야 한다. 이를 위해서 iSCSI 서버는 LVM, 하나의 Disk partition, 혹은 전체 Disk나 파일을 사용할 수 있는데 운영환경에서는 LVM logical volume을 권장한다. 즉, 필요한만큼의 LVM을 생성하여 이를 Initiator에게 제공하여 사용한다.
본 문서에서는 미리 만들어진 LVM에 대해서 수행하는 것을 예로 들고자 한다. 미리 만들어 둔 LVM logical volume은 아래와 같다.
/dev/mapper/vg0-lv4 (500G)
/dev/mapper/vg0-lv5 (500G)
/dev/mapper/vg0-lv6 (2000G)
참고로 dd 명령어를 이용하여 파일을 생성하고 이렇게 생성된 파일을 공유할 수도 있다. dd를 이용하여 10G의 파일을 생성하는 방법은 아래와 같다.
dd if=/dev/zero of=/d4/crs1 bs=1M count=10000
이렇게 LVM을 공유하는것과 파일을 공유하는 경우에 대한 비교 성능 테스트 결과는 이곳을 참고한다.
iSCSI Target 생성 및 LUN Mapping
RFC 상에서 정의하는 IQN 포멧을 살펴보면 다음과 같다.
Type Date Naming Auth "example.com" naming authority
+==+======+==========+==========================+
iqn.1992-01.com.example:storage.disk2.sys1.xyz
iqn.1992-01.com.example:storage.tape1.sys1.xyz
iqn.1992-01.com.example:storage:diskarrays-sn-a8675309
iqn.1992-01.com.example
즉, iqn.date.naming auth:string definition의 형태를 띄는데 date는 해당 IQN이 생성된 날짜 (년-월)를 의미하고 com.example라는 naming authority는 iSCSI Target이 존재하는 서버의 도메인 네임을 의미한다. 또한 storage 이하는 해당 Device의 type을 의미한다.
그러나 이 규직을 반드시 지켜야 하는 것은 아니다. 사용상 편의대로 구성할 수 있으며, 본 문서에서는 아래와 같은 형태의 Target 이름으로 사용하고자 한다.
iqn.2014-03.com.serends:phenton.data
따라서 Oracle RAC를 위해서는 아래와 같이 CRS용, Data용, Grid Infra용의 iSCSI Target은 다음과 같다.
iqn.2014-03.com.serends.phenton:racdb.crs9
iqn.2014-03.com.serends.phenton:racdb.data9
iqn.2014-03.com.serends.phenton:racdb.fra9
이제 이들 iSCSI Target들을 tgtadm을 이용하여 생성한다.
tgtadm --lld iscsi --mode target --op new --tid=1 --targetname iqn.2014-03.com.serends.phenton:racdb.crs9
tgtadm --lld iscsi --mode target --op new --tid=2 --targetname iqn.2014-03.com.serends.phenton:racdb.data9
tgtadm --lld iscsi --mode target --op new --tid=3 --targetname iqn.2014-03.com.serends.phenton:racdb.fra9
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b d9/crs9.img
tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 2 -b d9/data9.img
tgtadm --lld iscsi --mode logicalunit --op new --tid 3 --lun 3 -b d9/fra9.img
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.5.0/24
tgtadm --lld iscsi --mode target --op bind --tid 2 -I 192.168.5.0/24
tgtadm --lld iscsi --mode target --op bind --tid 3 -I 192.168.5.0/24
[root@phenton ~]# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2014-03.com.serends.phenton:racdb.crs9
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: 10486 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: d9/crs9.img
Backing store flags:
Account information:
ACL information:
192.168.5.0/24
Target 2: iqn.2014-03.com.serends.phenton:racdb.data9
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00020000
SCSI SN: beaf20
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 00020001
SCSI SN: beaf21
Size: 20972 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: d9/data9.img
Backing store flags:
Account information:
ACL information:
192.168.5.0/24
Target 3: iqn.2014-03.com.serends.phenton:racdb.fra9
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00030000
SCSI SN: beaf30
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 00030001
SCSI SN: beaf31
Size: 20972 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: d9/fra9.img
Backing store flags:
Account information:
ACL information:
192.168.5.0/24
위에서처럼 우리가 계획했던대로 정상적으로 iSCSI Target이 생성되었음을 알 수 있다.
iSCSI Target 접근 권한 설정
생성된 iSCSI Target에 대해서 특정 사용자 혹은 특정 IP, 특정 IP 대역대에서만 Initiator를 할 수 있도록 설정할 수 있다. 각 경우에 대해서 언급하자면,
tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL
여기에서는 48, 49번 IP를 가진 Client에서만 Initiator가 가능한 예이다.
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.2.48
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.2.49
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.2.0/24
'엔지니어 > Linux' 카테고리의 다른 글
디스크 내용 복원 못하게 지우기 (0) | 2017.01.02 |
---|---|
리눅스 디스크 UUID 확인 (0) | 2016.11.18 |
ISCSI 설정하기 (0) | 2016.11.18 |
Creating LUNs using LVM in iSCSI Target Server (0) | 2016.11.18 |
Solr 설치 및 data import (0) | 2016.11.18 |