RHCE : 시스템 구성 및 관리 – iSCSI 타겟을 영구적으로 마운트하는 iSCSI 타겟 또는 이니시에이터로 시스템 구성

(RHCE : System configuration and management – Configure a system as either an iSCSI target or initiator that persistently mounts an iSCSI target.)

RHCE 주제입니다. CertDepot 사이트를 번역 및 내용 추가하였으며, 컨텐츠 관련 모든 권리는 CertDepot에 있습니다.

사전 준비사항

iSCSI에는 두가지 요소가 있다.

이 실습에서는 2대의 가상 머신을 사용할 것이다. 하나는 서버로, 다른 하나는 클라이언트로 부를 것이다. 이번 실습에서는 나누어 진행하지만 서버와 클라이언트는 하나의 머신이 될 수도 있다.

iSCSI Target 설정(서버)

대부분의 타겟 설정은 targetcli 커맨드를 통해 이루어진다. 이 커맨드는 디렉토리 트리를 사용하여 다른 오브젝트에 접근한다. iSCSI Target을 생성하려면, 서버에서 다음과 같이 입력한다.

1. targetcli 패키지가 설치되어 있는지 확인하고 설치되어 있지 않다면 설치한다.

[root@server1 ~]# yum -y install targetcli
Loaded plugins: fastestmirror, langpacks
RHELREPO                                                 | 3.6 kB     00:00     
vmware-tools                                             |  951 B     00:00     
Loading mirror speeds from cached hostfile
Package targetcli-2.1.fb34-1.el7.noarch already installed and latest version
Nothing to do
[root@server1 ~]#

2. target 서비스를 부팅시에 활성화한다.

[root@server1 ~]# systemctl enable target
ln -s '/usr/lib/systemd/system/target.service' '/etc/systemd/system/multi-user.target.wants/target.service'
[root@server1 ~]# 

3. targetcli를 실행한다.

[root@server1 ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb34
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> 

4. 스토리지의 종류는 아래와 같이 4가지가 있다. 이 실습에서는 그 중 blockfileio를 사용한다.

4-1. 100MB 크기의 fileio 스토리지(backstore)를 /opt 디렉토리에 생성한다.
/> backstores/fileio/ create shareddata /opt/shareddata.img 100M
Created fileio shareddata with size 104857600
/> 
4-2. block 스토리지(backstore)를 생성하여 최선의 성능을 제공할 수 있다. 이때, /dev/sdb와 같은 블록 디바이스 또는 논리 볼륨을 생성하여 사용할 수 있다. 아래는 논리 볼륨을 생성하여 블록 기본 스토리지를 생성해 사용하는 예이다.
[root@server1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x9d00f06c.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):  
Using default response p
Partition number (1-4, default 1): 
First sector (2048-20971519, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +108M
Partition 1 of type Linux and of size 108 MiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@server1 ~]# partprobe
[root@server1 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@server1 ~]# vgcreate myvg /dev/sdb1
  Volume group "myvg" successfully created
[root@server1 ~]# lvcreate --name mylv --size 100M myvg
  Logical volume "mylv" created
[root@server1 ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  root centos -wi-ao----   8.51g                                             
  swap centos -wi-ao----   1.00g                                             
  mylv myvg   -wi-a----- 100.00m                                             
[root@server1 ~]# 
/> backstores/block/ create block1 /dev/myvg/mylv 
Created block storage object block1 using /dev/myvg/mylv.
/> 

5. IQN(Iscsi Qualified Name) iqn.2016-05.com.exampletesttarget이라는 이름을 가진 타겟과 같이 생성하고, 관계된 TPG(Target Portal Group)을 얻는다.

/> iscsi/ create iqn.2016-05.com.example:testtarget
Created target iqn.2016-05.com.example:testtarget.
Created TPG 1.
/> 

6. 새로 생성한 디렉토리에 접근해본다.

/> cd iscsi/iqn.2016-05.com.example:testtarget/tpg1
/iscsi/iqn.20...sttarget/tpg1> ls
o- tpg1 ................................................. [no-gen-acls, no-auth]
  o- acls ............................................................ [ACLs: 0]
  o- luns ............................................................ [LUNs: 0]
  o- portals ...................................................... [Portals: 0]
/iscsi/iqn.20...sttarget/tpg1> 

7. tpg1 아래에 다음과 같은 3가지의 오브젝트가 정의되어 있다.

8-0. RHEL 7.1이전 버전인 경우, 아래와 같은 커맨드를 통해 수동으로 portal(IP 주소와 포트의 쌍으로 초기자에 의해 접촉이 가능한 타겟)을 생성하여야 한다(RHEL 7.1 버전부터는 iscsi/ create 커맨드를 통해 자동으로 생성된다).
/iscsi/iqn.20...sttarget/tpg1> portals/ create
Using default IP port 3260
Binding to INADDR_ANY (0.0.0.0)
Created network portal 0.0.0.0:3260.
/iscsi/iqn.20...sttarget/tpg1> 

8-1. 이전에 선택한 스토리지의 종류에 따라 lun을 생성한다(fileio).

/iscsi/iqn.20...sttarget/tpg1> luns/ create /backstores/fileio/shareddata 
Created LUN 0.
/iscsi/iqn.20...sttarget/tpg1>

8-2. 이전에 선택한 스토리지의 종류에 따라 lun을 생성한다(block).

/iscsi/iqn.20...sttarget/tpg1> luns/ create /backstores/block/block1 
Created LUN 1.
/iscsi/iqn.20...sttarget/tpg1> 

9. 이전 단계에서 생성한 IQN(여기서는 2016-05.com.example로 가정한다)과 선택한 구분자(여기서는 client로 가정)로 acl을 생성한다.

/iscsi/iqn.20...sttarget/tpg1> acls/ create iqn.2016-05.com.example:client
Created Node ACL for iqn.2016-05.com.example:client
Created mapped LUN 1.
Created mapped LUN 0.
/iscsi/iqn.20...sttarget/tpg1> 

10. 선택적으로 사용자이름비밀번호를 설정할 수 있다.

/iscsi/iqn.20...sttarget/tpg1> cd acls/iqn.2016-05.com.example:client/
/iscsi/iqn.20...xample:client> set auth userid=usr
Parameter userid is now 'usr'.
/iscsi/iqn.20...xample:client> set auth password=pwd
Parameter password is now 'pwd'.
/iscsi/iqn.20...xample:client> 

11. 설정을 확인하려면, 다음과 같이 입력한다.

/iscsi/iqn.20...xample:client> cd ../..
/iscsi/iqn.20...sttarget/tpg1> ls
o- tpg1 ................................................. [no-gen-acls, no-auth]
  o- acls ............................................................ [ACLs: 1]
  | o- iqn.2016-05.com.example:client ......................... [Mapped LUNs: 2]
  |   o- mapped_lun0 ............................. [lun0 fileio/shareddata (rw)]
  |   o- mapped_lun1 .................................. [lun1 block/block1 (rw)]
  o- luns ............................................................ [LUNs: 2]
  | o- lun0 .......................... [fileio/shareddata (/opt/shareddata.img)]
  | o- lun1 .................................... [block/block1 (/dev/myvg/mylv)]
  o- portals ...................................................... [Portals: 1]
    o- 0.0.0.0:3260 ....................................................... [OK]
/iscsi/iqn.20...sttarget/tpg1> 

12. targetcli 커맨드를 종료한다.

/iscsi/iqn.20...sttarget/tpg1> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
[root@server1 ~]# 

13. 현재 사용되는 포트를 확인할 수 있다. 이 커맨드는 유용하게 사용될 수 있다.

[root@server1 ~]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3260            0.0.0.0:*               LISTEN     
...
[root@server1 ~]# 

14. 마지막으로 3260/tcp 포트를 방화벽 설정에서 개방해준다.

[root@server1 ~]# firewall-cmd --permanent --add-port=3260/tcp
success
[root@server1 ~]# firewall-cmd --reload 
success
[root@server1 ~]# 

iSCSI Initiator 설정(클라이언트)

1. iscsi 관련 패키지를 설치한다.

[root@server2 ~]# yum install -y iscsi-initiator-utils
Loaded plugins: fastestmirror, langpacks
RHELREPO                                                 | 3.6 kB     00:00     
vmware-tools                                             |  951 B     00:00     
Loading mirror speeds from cached hostfile
Package iscsi-initiator-utils-6.2.0.873-21.el7.x86_64 already installed and latest version
Nothing to do
[root@server2 ~]# 

2. /etc/iscsi/initiatorname.iscsi 파일을 열어, 초기자이름을 원래 값 대신 다음 값으로 변경하고, 저장한다.

[root@server2 ~]# vim /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2016-05.com.example:client
...
-- 끼워넣기 --                             1,45         모두
[root@server2 ~]# 

3. 사용자이름비밀번호를 설정하였다면, /etc/iscsi/iscsid.conf파일을 열어 다음 줄들을 변경해준다.

[root@server2 ~]# vim /etc/iscsi/iscsid.conf
...
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
node.session.auth.authmethod = CHAP

# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
node.session.auth.username = usr
node.session.auth.password = pwd
...
[root@server2 ~]# 

4. iscsi 서비스를 부팅시에 활성화하고, 시작한다.

[root@server2 ~]# systemctl enable iscsi && systemctl start iscsi
[root@server2 ~]# 

5. iscsiadm 커맨드를 서버의 ip 주소를 통해 discovery모드로 실행시킨다(여기서는 10.10.10.138로 가정).

[root@server2 ~]# iscsiadm --mode discovery --type sendtargets --portal 10.10.10.138
10.10.10.138:3260,1 iqn.2016-05.com.example:testtarget
[root@server2 ~]# 

6. iscsiadm 커맨드를 서버의 ip 주소를 통해 node모드로 실행시킨다(여기서는 10.10.10.138로 가정).

[root@server2 ~]# iscsiadm --mode node --targetname iqn.2016-05.com.example:testtarget --portal 10.10.10.138 --login
Logging in to [iface: default, target: iqn.2016-05.com.example:testtarget, portal: 10.10.10.138,3260] (multiple)
Login to [iface: default, target: iqn.2016-05.com.example:testtarget, portal: 10.10.10.138,3260] successful.
[root@server2 ~]# 

7. 설정을 확인하려면, 다음과 같이 입력한다.

[root@server2 ~]# lsblk --scsi 
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN
...
sdc  33:0:0:0   disk LIO-ORG  shareddata       4.0  iscsi
sdd  33:0:0:1   disk LIO-ORG  block1           4.0  iscsi
...
[root@server2 ~]# 

8. 아래와 같이 입력하여 자원들이 읽기 전용(RO의 값이 1인 경우 읽기 전용을 의미한다)은 아닌지 반드시 확인한다.

[root@server2 ~]# lsblk | egrep "NAME|sdc"
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdc               8:32   0  100M  0 disk 
[root@server2 ~]# lsblk | egrep "NAME|sdd"
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdd               8:48   0  100M  0 disk 
[root@server2 ~]# 

9. 파일 시스템을 생성한다.

[root@server2 ~]# mkfs.xfs /dev/sdc
meta-data=/dev/sdc               isize=256    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@server2 ~]# mkfs.ext4 /dev/sdd
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdd is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=4096 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@server2 ~]# 

10. 디스크의 UUID를 확인하고, /etc/fstab 파일의 맨 끝에 추가해준다.

[root@server2 ~]# blkid | egrep "sdc|sdd"
/dev/sdc: UUID="6e57dfed-84d2-4ca0-9471-14c770e53211" TYPE="xfs" 
/dev/sdd: UUID="ce95272e-5f48-41f0-a144-2a0ba7ec0128" TYPE="ext4" 
[root@server2 ~]# blkid | egrep "sdc|sdd" >> /etc/fstab
[root@server2 ~]# 

11. /etc/fstab파일을 열어, 파일 시스템 마운트를 위해 아래 줄들을 추가하고, 마운트한다.

[root@server2 ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Tue Apr 19 12:47:49 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        1 1
UUID=8bee4769-02a2-4247-9cb8-d24df45b10c4 /boot                   xfs     defaults        1 2
/dev/mapper/centos-swap swap                    swap    defaults        0 0
UUID="6e57dfed-84d2-4ca0-9471-14c770e53211" /mnt/iscsi1 xfs     _netdev 0 0 
UUID="ce95272e-5f48-41f0-a144-2a0ba7ec0128" /mnt/iscsi2 ext4    _netdev 0 0
...
-- 끼워넣기 --                                     13,74-76     모두
[root@server2 ~]# mkdir -p /mnt/{iscsi1,iscsi2}
[root@server2 ~]# mount -a
[root@server2 ~]# 

12. 마운트가 정상적으로 되었는지 확인해본다.

[root@server2 ~]# cd /mnt/iscsi1
[root@server2 iscsi1]# ls
[root@server2 iscsi1]# echo "testfile for iscsi1" > test1
[root@server2 iscsi1]# ls
test1
[root@server2 iscsi1]# cat test1
testfile for iscsi1
[root@server2 iscsi1]# cd /mnt/iscsi2
[root@server2 iscsi2]# ls
lost+found
[root@server2 iscsi2]# echo "testfile for iscsi2" > test2
[root@server2 iscsi2]# ls
lost+found  test2
[root@server2 iscsi2]# cat test2
testfile for iscsi2
[root@server2 iscsi2]# 

13. 선택적으로, 초기자 설정을 덤프할 수 있다(3은 최대 출력, 0은 최소 출력을 의미한다).

[root@server2 iscsi2]# iscsiadm -m session -P 3
iSCSI Transport Class version 2.0-870
version 6.2.0.873-21
Target: iqn.2016-05.com.example:testtarget (non-flash)
	Current Portal: 10.10.10.138:3260,1
	Persistent Portal: 10.10.10.138:3260,1
		**********
		Interface:
		**********
		Iface Name: default
		Iface Transport: tcp
		Iface Initiatorname: iqn.2016-05.com.example:client
		Iface IPaddress: 10.10.10.25
		Iface HWaddress: <empty>
		Iface Netdev: <empty>
		SID: 1
		iSCSI Connection State: LOGGED IN
		iSCSI Session State: LOGGED_IN
		Internal iscsid Session State: NO CHANGE
		*********
		Timeouts:
		*********
		Recovery Timeout: 120
		Target Reset Timeout: 30
		LUN Reset Timeout: 30
		Abort Timeout: 15
		*****
		CHAP:
		*****
		username: usr
		password: ********
		username_in: <empty>
		password_in: ********
		************************
		Negotiated iSCSI params:
		************************
		HeaderDigest: None
		DataDigest: None
		MaxRecvDataSegmentLength: 262144
		MaxXmitDataSegmentLength: 262144
		FirstBurstLength: 65536
		MaxBurstLength: 262144
		ImmediateData: Yes
		InitialR2T: Yes
		MaxOutstandingR2T: 1
		************************
		Attached SCSI devices:
		************************
		Host Number: 33	State: running
		scsi33 Channel 00 Id 0 Lun: 0
			Attached scsi disk sdc		State: running
		scsi33 Channel 00 Id 0 Lun: 1
			Attached scsi disk sdd		State: running
[root@server2 iscsi2]# 

추가 자료

at4am의 프로필 이미지

at4am

2016년 06월 07일

글쓴이의 더 많은 글 읽어보기