Loading...
 
Print

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 설치 미디어에 함께 포함되어져 있다.

STEP 1) TGT 패키지 설치
CentOS 6.5의 설치 미디어에 포함되어진 scsi-target-utils 패키지를 설치한다.
rpm -Uvh scsi-target-utils-1.0.24-10.el6.x86_64

32-bit TGT 패키지도 존재하지만 가능하면 64-bit OS 환경에서 64-bit iSCSI 서버를 운영할 것을 권고한다.

STEP 2) TGT Daemon 기동
iSCSI Target을 생성하여 서비스를 제공하기 위해서는 TGT Daemon이 기동되어져야 한다. 여기에서는 Server가 재기동되어도 TGT Daemon이 함께 기동될 수 있도록 init.d의 서비스를 기동한다. 참고로 init.d에는 scsi-target-utils를 설치하게 되면 tgtd 데몬도 설정된다.
/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

STEP 1) iSCSI Target 생성
iSCSI Target을 생성한다. Target은 IQN이라고 불리우는 Unique한 인자로 되어져야 한다. RFC상에서 정의되어진 IQN의 포맷에는 도메인까지 포함되는데 이는 iSCSI가 IP 기반이기 때문에 Network이 연결되어 있다면 어디서라고 해당 Target을 이용할 수 있도록 하기 위함이다.


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은 다음과 같다.

Oracle RAC를 위한 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을 이용하여 생성한다.

Oracle RAC를 위한 iSCSI Target 생성
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


STEP 2) 생성된 iSCSI Target과 LUN Mapping
iSCSI 서버에서 미리 생성해놓은 LVM logical volume과 iSCSI Target을 서로 매핑하여 iSCSI Initiator에 의해서 참조될 Storage를 등록해준다. 이 과정은 Logical Unit인 LUN을 해당 Device에 등록한다라고도 한다.

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


STEP 3) ACL 설정
생성된 iSCSI Target에 대해서 Class C 레벨에서 접근할 수 있도록 권한을 설정한다. ACL에 대한 추가 내용은 아래 iSCSI Target 접근 권한 설정을 참고한다.

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


STEP 4) iSCSI Target 내용 확인
생성된 iSCSI Target에 대한 자세한 정보를 확인한다.
tgtadm --lld iscsi --mode target --op show
[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를 할 수 있도록 설정할 수 있다. 각 경우에 대해서 언급하자면,

모든 IP 주소에서 Initiator가 가능하도록 설정
tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL


특정 IP에서만 Initiator가 가능하도록 설정
여기에서는 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


특정 IP 대역대에서만 Initiator가 가능하도록 설정
여기에서는 동일 C Class의 Subnet에서만 Initiator가 가능한 예이다.

tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.2.0/24

Created by jhpark. Last Modification: Sunday 23 of March, 2014 15:14:36 KST by jhpark. (Version 7)
[ Execution time: 0.16 secs ]   [ Memory usage: 22.88MB ]   [ Queries: 47 in 0.00 secs ]   [ Server load: 0.04 ]

Shout anything, anybody...

jhpark: 감기가 장난이 아니내요. 모두들 감기 조심하세요...~
jhpark: 세렌즈 홈페이지의 Tiki에 대한 Patch가 이루어졌습니다. 새로운 버전은 Tiki 12.3
jhpark: 말그대로 키오스크이지요. 뭔가 샤우팅하고 싶은 것이 있다면 그것이 무엇이든 샤우티잉...
meng: 이건 뭐지요 ㅋㅋ
jhpark: 이곳 정자동엔 함박눈... 오늘 어케 퇴근하나.
Ji-Su Hong: 출첵? ㅎ~
jhpark: sql_mode=""의 위력은 대단하다. 특히 End User의 입장에서는...
박영훈: testtest
jhpark: 명규야 잘자라, 내일을 위해서... ㅋㅋ
Admin: 아우, 홈페이지 결국은 오픈했당. 어지러워라...