iSCSI는 Internet Small Computer Interface의 줄임말입니다. SCSI는 많이 들어보셨을 겁니다. 저 역시 많이 듣기는 했지만... 듣기만 했죠. 시스템 관리자가 아닌 다음에야 SCSI이든 혹은 다른 그 무엇이든 그닥 신경쓸일이 없습니다. 개발자 입장에서야 읽기/쓰기만 잘되면 되니까요.
SCSI는 PC와 하드디스크, CD-ROM, 프린터, 스캐너등과 같은 주변 장치와 통신하기 위한 인터페이스라고 합니다.
그럼 iSCSI가 무엇일지에 대해서는 대충 감이 오죠. 인터넷을 건너 뛰어서 장치와 통신하기 위한 인터페이스 입니다. SCSI를 인터넷으로 확장한 겁니다.
SCSI는 TCP/IP 프로토콜을 사용합니다. 포트번호는 860과 3260을 이용하고요. TCP/IP로 연결한다음 SCSI 커멘드를 이용해서 스토리지를 사용합니다. iSCSI를 사용하는 이유는 아래와 같습니다.
저장소 통합
여기 저기 흩어져 있는 저장소를 하나로 통합해서 중앙에서 관리할 수 있습니다. 저장소를 통합한다음 분배할 수 있음으로 자원을 효율적으로 사용할 수 있습니다. 물리적인 제약이 없으니 대용량의 저장소도 별 다른 비용 투자 없이 쉽게 구성할 수 있습니다.
복구
mirror Storage를 구성할 수 있습니다. 그래서 데이터에 문제가 생기더라도 쉽게 복구할 수 있습니다. 언제 테스트를 해봐야겠스니다.
Network booting
iSCSI는 로컬 저장소처럼 사용할 수 있는데, 따라서 원격으로 부팅하는게 가능합니다. PXE-boot의 경우 tftp를 많이 사용하는데, iSCSI로 대체가능합니다. 테스트는 안해봤습니다. 역시 언젠가 테스트를 해보고 싶네요.
iSCSI의 구성
iSCSI는 서버 클라이언트 모델을 따르니다.
Target : 저장소를 관리하는 서버입니다.
Initiator : iSCSI 클라이언트 입니다. Target에 연결한다음 SCSI 명령을 이용해서 입출력 작업을 합니다.
Linux iSCSI 사용
리눅스에서 iSCSI를 구성해 보려합니다. 공부를 목적으로 구성하는 거라서 루프백으로 충분하겠지만, 인터넷 프로토콜을 이용하는 만큼 네트워크를 이용해서 구성하려고 합니다. 안타깝게도 테스트에 사용할 수 있는 장비가 제가 사용하는 리눅스 노트북 하나라서, virtualBox를 이용 LAN 환경을 구축해서 테스트 하기로 햇습니다. Target, Initiator 모두 리눅스가 되겠군요.
Target 서버는 이미 구축이 돼 있는데요. LVM 구축에서 사용했던 Linux Guest VM을 Target 서버로 사용할 겁니다. LVM으로 구성된 장치를 iSCSI로 연결해서 사용하는 거죠. LVM 구성은 따라하시면 되구요. LVM 구성이 귀찮으면, Guest VM에 장치 직접 붙여서 테스트해도 되겠습니다.
테스트 환경
Initiator Host
Ubuntu 11.04 desktop
192.168.56.1
Target Host : VirualBOX Guest VM
Ubuntu 11.04 Server
192.168.56.2
블럭 장치 : LVM
# lvdisplay
--- Logical volume ---
LV Name /dev/myVG/lvol0
VG Name myVG
LV UUID fxc9Lm-MmRh-JTg2-rt6u-2shi-KvPN-udIS73
LV Write Access read/write
LV Status available
# open 0
LV Size 1.46 GiB
Current LE 375
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
서버 구성은 다음과 같습니다.
192.168.56.2가 storage 볼륨을 제공합니다. iSCSI target 호스트죠. 192.168.56.1에서 iSCSI 장치를 mount해서 사용할겁니다.
Target
Target 설치
iSCSI 서버에 Target 애플리케이션을 설치해야 겠죠. 애플리케이션의 이름은 tgt 입니다.
# sudo apt-get install tgt
설치를 끝냈다면, 실행을 합시다.
# /etc/init.d/tgtd restart
iqn
먼저 iqn 값을 지정합니다. iqn은 Qualified name의 줄임말인데, 장치를 찾기 위한 도메인이름이라고 보시면 되겠네요.
initiator은 iSCSI 클라이언트 프로그램입니다. 먼저 설치를 해야 겠죠. 공개 소프트웨어인 open-iscsi를 사용하기로 했습니다.
# sudo apt-get install open-iscsi
이제 initiator name을 설정해 줍니다. 클라이언트를 구별하기 위한 이름으로 보입니다. open-iscsi를 설치했더니, initiator name 정보를 가진 파일이 만들어집니다. 우분투라면 확인할 필요가 없는데, 유저가 직접 작업을 해줘야 하는 배포판도 있더군요. CentOS같은 경우인데요. initiator name이 없으면, target에 연결할 수 없습니다. 이것 때문에 삽질을 좀 했습니다. 혹시 모르니 확인하는 걸 추천
# mkfs.ext4 /dev/sdb
mke2fs 1.41.14 (22-Dec-2010)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
96000 inodes, 384000 blocks
19200 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=394264576
12 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
매번 부팅할 때마다 iscsiadm명령을 이용해서, 마운트 할수는 없는 노릇이다. target을 성공적으로 붙이고 파일시스템까지 만들었다면, 이후에는 부팅시 자동으로 마운트하면 될테다.
운영체제 마운트 정보는 /etc/fstab에 들어간다. 리눅스 운영체제는 fstab의 정보를 읽어서 마운트를 시도 한다. 마운트까지 성공했다면 /etc/fstab에 아래의 내용을 추가한다.
iscsiadm은 attach에 성공한 target 정보를 저장해 두고, mount시 활용한다. 이제 리부팅 해도 마운트 되는 걸 확인할 수 있을 것이다.
Cloud를 위한 LVM + iSCSI
이 문서는 iSCSI over LVM 구성입니다. 클라우드는 Storage를 통합해야 하고, 원격으로 Storage Volume을 제공할 수 있어야 합니다. 이런 점에서 LVM과 iSCSI는 좋은 조합이라고 할 수 있겠습니다.
또 다른 조합으로 생각할 수 있는게 NFS over LVM일 건데요.
어느 구성을 선택할 지는 A Performance Comparison on NFS and iSCSI for IP-Networked Storage 문서를 참고하시기 바랍니다.
이외에도 iSCSI over ZFS도 있습니다. ZFS는 현재 조사중에 있습니다.
Contents
iSCSI
iSCSI의 구성
Linux iSCSI 사용
테스트 환경
Target
Target 설치
iqn
initiator
자동 마운트
Cloud를 위한 LVM + iSCSI
Recent Posts
Archive Posts
Tags