[CentOS] 13. iSCSI Target/initiator

Date:     Updated:

카테고리:

태그:


🔔 iSCSI란?


iscsi는 인터넷 프로토콜(IP) 기반의 스토리지 네트워킹 표준으로, 데이터 스토리지 장치를 연결하는데 사용 즉, IP 네트워크를 통해 SCSI 명령을 전달함으로써, 인터넷을 거쳐 데이터를 전송하고 보관하게 된다.


■ iSCSI 타겟(Target)/이니시에이터(initiator)


  • 타겟(Target) : iscsi 서버로서 스토리지를 제공하는 역할

  • 이니시에이터(initiator) : iscsi 클라이언트로서 스토리지에 접근하는 역할


■ iSCSI 타겟(Target)/이니시에이터(initiator)


  • 타겟과 이니시에이터는 IQN(iSCSI Qualified Name)이라는 고유한 이름으로 식별한다. (예시 : iqn.2022-08.com.test:target)

    포맷 형태 Type.Date.Naming_Auth:String_defined_by_example.com_Naming_authority
    Type iqn으로 고정
    Date YYYY-MM
    Naming_Auth 도메인의 역순 형태
    String_… 설명


■ iSCSI 타겟(Target) 구조


1) backstores

  • 스토리지 오브젝트를 생성하고 관리하는 노드로, 파일이나 디스크와 같은 로컬 스토리지 리소스를 가상화한다.

  • backstores에는 fileio, block, pscsi, ramdisk 등의 하위 노드가 있다.

    하위 노드 설명
    fileio 파일을 디스크 이미지처럼 사용할 수 있게 해주는 스토리지 오브젝트의 종류
    block 물리적인 디스크 블록 장치를 공유할 수 있게 해주는 스토리지 오브젝트의 종류
    pscsi 로컬 SCSI 장치를 공유할 수 있게 해주는 스토리지 오브젝트의 종류, 디스크뿐만 아니라 테이프나 CD-ROM과 같은 다양한 장치를 공유할 수 있다.
    ramdisk 메모리를 디스크처럼 사용할 수 있게 해주는 스토리지 오브젝트의 종류
    그 외 하위 노드 설명
    alua Asymmetric Logical Unit Access의 약자로, 스토리지 오브젝트에 대한 접근 상태와 우선 순위를 관리하는 기능
    default_tg_pt_gp Target Port Group의 약자로, 스토리지 오브젝트에 대한 접근 상태를 나타내는 객체


2) iscsi

  • iscsi 타겟을 생성하고 관리하는 노드로, IQN으로 식별된다.

  • iscsi에는 타겟의 이름을 나타내는 하위 노드가 있으며, 그 안에는 TPG, LUN, ACL 등의 하위 노드가 있다.

    하위 노드 설명
    TPG Target Portal Group의 약자로, 타겟에 접근할 수 있는 네트워크 포털의 그룹으로 TPG의 하위 노드로는 acls, luns, portals이 있다.
    acls Access Control List의 약자로, 이니시에이터의 접근 권한을 제어하는 목록으로 acls의 하위 노드로는 이니시에이터의 IQN이 있으며, 그 안에는 mapped_lun이 있다.
    luns Logical Unit Number의 약자로, 스토리지 오브젝트와 이니시에이터의 연결을 나타내는 숫자, luns의 하위 노드로는 lun0, lun1 등이 있다.
    portals 네트워크 포털을 나타내는 객체, portals의 하위 노드로는 IP 주소와 포트 번호가 있다.
    그 외… 설명
    LUN Logical Unit Number의 약자로, 스토리지 오브젝트와 이니시에이터의 연결을 나타내는 숫자, LUN은 타겟과 이니시에이터에서 동일한 값을 가진다.
    mapped_lun 이니시에이터가 접근할 수 있는 LUN을 나타내는 객체, mapped_lun은 이니시에이터별로 다른 값을 가질 수 있다.


3) loopback

  • loopback 타겟을 생성하고 관리하는 노드로, 로컬 시스템에서 스토리지 오브젝트에 접근할 수 있게 해준다.


■ iSCSI 타겟(Target) 구성 - (Targetcli)

sss

$ dnf -y install targetcli
 

$ mkdir /var/lib/iscsi_disks


$ targetcli


$ cd backstores/fileio 


/> cd backstores/fileio 


# [disk01]이라는 이름의 10G의 디스크 이미지([/var/lib/iscsi_disks/disk01.img])를 생성
/backstores/fileio> create disk01 /var/lib/iscsi_disks/disk01.img 10G 
Created fileio disk01 with size 10737418240
/backstores/fileio> cd /iscsi 


# 타겟(Target) 생성
# [ iqn.(year)-(month).(reverse of domain name):(any name you like) ]
/iscsi> create iqn.2022-08.com.test:dlp.target01 
Created target iqn.2022-08.com.test:dlp.target01.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> cd iqn.2022-08.com.test:dlp.target01/tpg1/luns 


# LUN 설정
/iscsi/iqn.20...t01/tpg1/luns> create /backstores/fileio/disk01 
Created LUN 0.
/iscsi/iqn.20...t01/tpg1/luns> cd ../acls 


# ACL 설정(연결을 허용하는 이니시에이터(initiator)의 IQN)
/iscsi/iqn.20...t01/tpg1/acls> create iqn.2022-08.com.test:node01.initiator01 
Created Node ACL for iqn.2022-08.com.test:node01.initiator01
Created mapped LUN 0.
/iscsi/iqn.20...t01/tpg1/acls> cd iqn.2022-08.com.test:node01.initiator01 


# 인증을 위한 사용자 아이디와 비밀번호 설정
/iscsi/iqn.20...w.initiator01> set auth userid=username 
Parameter userid is now 'username'.
/iscsi/iqn.20...w.initiator01> set auth password=password 
Parameter password is now 'password'.
/iscsi/iqn.20...w.initiator01> exit 
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json


$ ss -napt | grep 3260
LISTEN 0      256          0.0.0.0:3260       0.0.0.0:*


$ systemctl enable target


# 방화벽 설정
$ firewall-cmd --add-service=iscsi-target; firewall-cmd --runtime-to-permanent


■ iSCSI 이니시에이터(initiator) 구성 - (iscsi-initiator-utils)

$ dnf -y install iscsi-initiator-utils



$ vi /etc/iscsi/initiatorname.iscsi

# iSCSI 대상 서버에 설정한 것과 동일한 IQN으로 변경
InitiatorName=iqn.2022-08.com.test:node01.initiator01


$ vi /etc/iscsi/iscsid.conf

# line 58
node.session.auth.authmethod = CHAP

# line 69,70 : 주석 처리 해제하고 iSCSI 대상 서버에서 설정한 사용자 이름과 비밀번호를 지정
node.session.auth.username = username
node.session.auth.password = password


# 타겟(Target) discovery
$ iscsiadm -m discovery -t sendtargets -p 192.168.219.101
[ 2704.827383] Loading iSCSI transport class v2.0-870.
[ 2704.848709] iscsi: registered transport (tcp)
192.168.219.101:3260,1 iqn.2022-08.com.test:dlp.target01


# discovery 후 상태 확인
$ iscsiadm -m node -o show
# BEGIN RECORD 2.1.2
node.name = iqn.2022-08.com.test:dlp.target01
node.tpgt = 1
node.startup = automatic
node.leading_login = No
iface.iscsi_ifacename = default
.....
.....
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.DataDigest = None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No
# END RECORD


# 타겟(Target)에 로그인
$ iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2022-08.com.test:dlp.target01, portal: 192.168.219.101,3260]
Login to [iface: default, target: iqn.2022-08.com.test:dlp.target01, portal: 192.168.219.101,3260] successful.


# 설정된 세션 확인
$ iscsiadm -m session -o show
tcp: [1] 192.168.219.101:3260,1 iqn.2022-08.com.test:dlp.target01 (non-flash)


# 파티션 확인
$ cat /proc/partitions
major minor  #blocks  name

 252        0   31457280 sda
 252        1    1048576 sda1
 252        2   30407680 sda2
 252       16   83886080 sdb
 252       17   83885056 sdb1
 253        0   27258880 dm-0
 253        1    3145728 dm-1
   8        0   10485760 sdc
# 타겟(Target) 서버에서 제공한 새 장치를 [sdc]로 추가됨
# label 만들기
$ parted --script /dev/sdc "mklabel gpt"


# 파티션 생성
$ parted --script /dev/sdc "mkpart primary 0% 100%"


# XFS 포맷
$ mkfs.xfs -i size=1024 -s size=4096 /dev/sdc1
meta-data=/dev/sdc1              isize=1024   agcount=4, agsize=654336 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2617344, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


$ mount /dev/sdc1 /mnt
$ df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs               tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs               tmpfs     1.9G  8.6M  1.9G   1% /run
tmpfs               tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/rl-root xfs        26G  2.2G   24G   9% /
/dev/vda1           xfs      1014M  201M  814M  20% /boot
tmpfs               tmpfs     374M     0  374M   0% /run/user/0
/dev/sdc1           xfs        10G   99M  9.9G   1% /mnt

CENTOS 카테고리 내 다른 글 보러가기

댓글 남기기