* iSCSI란?

 iSCSI는 IP기반 네트워크에서 SCSI 명령을 보내기 위한 TCP/IP 베이스 프로토콜이다.  즉 iSCSI 서버는 IP기반 네트워크를 통해 클라이언트에 디스크로 동작하게 하는 블록 스토리지를 제공할 수 있다. iSCSI 서버가 있고, 서버에 연결된 클라이언트에게 디스크를 제공하는 방식이다.

 

iSCSI는 IP네트워크로 디스크 I/O를 수행하므로, 대역폭을 여유있게 하기 위해 일반적인 서비스 네트워크와는 대역을 분리해야 한다. 일반적으로 고성능을 위해서는 10G 네트워크를 사용한다.  WAN 보안을 위해, ISCSI 관리자는 IP 네트워크 트래픽 보안을 위한ipsec 이라는 프로토콜 suite 을 사용할 수 있다.

 

HA 클러스터에서, 관리자는 종종 공유 스토리지를 모든 노드에 제공하기 위해 iSCSI를 사용한다. 이렇게 하여 클러스터가 관리하는 어플리케이션의 데이터를 공유 스토리지에 저장할 수 있다. 어떤 노드에서든 어플리케이션이 데이터에 접근할 수 있기 때문에, 클러스터는데이터의 복사,복제,이동 등 없이 빠르게 다른 노드에서 재시작할 수 있다.

 

 

* iSCSI 서버/클라이언트 구조

 

target (서버)

- iSCSI 서버에 있는 iSCSI 스토리지 리소스이다.

- target은 유니크 이름을 가져야만 한다. (IQN 참고)

- 각 target은 하나 또는 하나 이상의 블록 디바이스를 제공하거나, logical unit들을 제공한다.

- 대부분의 케이스에서 하나의 target은 정확히 하나의 디바이스를 제공한다.

- 하나의 서버는 여러개의 target을 제공할 수 있다.

 

initiator (클라이언트)

- iSCSI 에게 디스크를 제공받는 클라이언트는 리모트 서버 스토리지인 target에 SCSI 명령을 보내기 위한 initiator 소프트웨어 구성이 필요하다.

- iSCSI 클라이언트, 일반적으로 소프트웨어로써 사용가능하다.

- 사용자는 또한 HBA iSCSI의 형태로 하드웨어 initiator를 구매할수도 있다.

- initiator는 유니크 이름을 가져야만 한다. (IQN 참고)

- 클라이언트 시스템에서, iSCSI targets은 단순히 SCSI 케이블또는 FC 로 연결된 로컬 SCSI 디스크처럼 보인다.  

 

 

 

* iSCSI 서버에서 사용하는 구성요소

여기서 나오는 구성요소들은 iSCSI "서버"를 구축할 때 사용하는 요소이며, 서버 구축은 이 장에서는 다루지 않는다. 개념만 이해해 두면 된다.

 

IQN (iSCSI Qualified Name)

- initiator와 target 둘다 식별하는 unique worldwide name 이다.

- IQN은 아래와 같은 형태를 가진다

 

YYYY-MM

DNS 도메인 이름을 처음으로 컨트롤한 첫번째 해와 전체 월. 예를들어, 2020년 6월이라면 2020-06 이다.

 

com.reserved.domain

예약된 사용자의 도메인 네임. 예를들어, www.example.com 은 -> com.example.com 으로 쓰면 된다. 정해져 있는것은 아니며 자유롭게 사용 가능.

 

name_string

관리하는 특정 대상을 식별하는 네임스페이스 (YYYY-MM.com.reserved.domain) 의 고유 문자열이다. 관리하는 특정 대상을 식별하는 것으로, 직접 자유롭게 만들면 된다. 예약된 도메인 이름이 정확히 하나의 target을 가진 단일 서버의 특정한 호스트 이름인 경우 생략하기도 한다.

 

portal

각 target은 하나 또는 그이상의 portal을 가진다. portal은 해당 target에 도달 할 수 있도록 initiator가 사용할 수 있게 하는 ip주소와 포트 쌍을 가진다.

 

LUN (Logical Unit Number)

LUN은 target에 의해 제공되는 블록장치를 대표한다. 각 target은 하나나 하나 이상의 LUN을 제공한다. (그러므로, 하나의 target은 여러개의 스토리지 디바이스를 제공할 수 있다)

 

ACL (Access Control List)

접근 권한을 식별하기 위해서 initiator의 IQN이 사용하는 접근 제한. Initiator의 IQN을 사용하여 액세스 권한을 검증하는 액세스 제한이다. 

 

TPG (Target Portal Group)

TPG는 target에 대한 완전한 구성이다. portal, LUN, ACL이 포함된다. (Portal, LUN, ACL이 합쳐져 하나의 TPG) 거의 모든target은 하나의 TPG를 사용한다. 하지만 advanced configuration에서는 여러 개의 TPG를 정의하는 경우도 있다.

 

 

 

*  iSCSI 클라이언트 구성하기

여기서는 iSCSI 서버는 이미 구성되어 있다고 가정하고 클라이언트 구성법만 제공한다. 연결을 위한 정보는 다음과 같다.

 

 

1. 패키지 설치

iSCSI 클라이언트 initiator를 구성하는것은 iscsi-initiator-utils 패키지 설치가 요구된다. 이 패키지에는 iscsi, iscsid 서비스가 포함되어 있고, /etc/iscsi/iscsid.conf와 /etc/iscsi/initiatorname.iscsi 구성파일이 포함되어있다. 아래와 같이 설치를 진행한다.

 

 

2. initiator 의 IQN 생성

iSCSI initiator 로서, 클라이언트는 자신의 유니크한 IQN이 있어야 한다. 해당 IQN은 iSCSI 서버에 등록되어 있어서, 연결시 이 IQN이 일치해야만 연결이 가능하다. iscsi-initiator-utils를 설치한 후에, /etc/iscsi/initiatorname.iscsi 파일에서 관리자는 일반적으로 이 파일에 있는 IQN을 그들의 도메인 명 등으로 입맛에 맞춰 수정한다. vi로 /etc/iscsi/initiatorname.iscsi 파일을 열어 위 예시에 맟게 initiator IQN을 구성한다.

 

InitiatorName=iqn.2021-04.com.example:noded

 

3. iscsid.conf 구성

/etc/iscsi/iscsid.conf 파일은 연결할 target의 디폴트 세팅을 포함한다. 이 세팅에는 iscsi timeout이나 retry 파라미터 등이 있고, 인증을 위한 유저명과 패스워드 등이 있다. 여기서는 아무것도 건드리지 않고 default 값으로 진행한다.

 

 

4. iSCSI 서비스 실행 및 자동시작 구성

이 패키지는 자동으로 iscsi와 iscsid 서비스를 구성한다. 그래서 시스템 부팅시 initiator는 자동으로 이전에 discover된 target을 재연결한다. 이러한 재연결을 위해서는 iscsid 데몬이 서버 실행시 실행되어야 한다. 다음 명령어로 구성한다. 또한  initiator의 configuration file을 수정하는 경우, iscsid 서비스를 재시작해야 한다.

 

systemctl start iscsid   /   systemctl enable iscsid

 

 

5. iSCSI target (서버) 찾기

iSCSI장치를 사용하고 연결하기 전에, 해당 target을 먼저 discover해야 한다. discover 절차는 target 정보를 저장하고, default인/etc/iscsi/iscsid.conf를 사용하여  /var/lib/iscsi/nodes/ 의 디렉토리에서 세팅을 구성한다. 아래 명령어를 통해 원격 target을 discover 할 수 있다. 이명령은 사용가능한 target의 IQN 넘버를 리턴한다. 

- portal_ip : target portal의 ip주소

 

 

6. iSCSI target (서버) 연결하기

discover 명령에서 확인된 target의 IQN을 명시하여 연결한다.

 

# 주의사항

동시에 동일한 target에서 동일한 파일시스템을 마운트하기 위해 multiple initiator를 허용하지 말 것. local block device와 다르게,  각각의(여러개의) 원격 initiator는 iSCSI block device를 네트워크를 통해 discover 할 수 있다. 로컬 파일시스템, 예를들어 ext4, xfs등은 여러 시스템에서 동시에 마운트하는것을 지원하지 않는다. 그렇게 하면 파일을 읽을 때 파일시스템 무결성이 깨지고 커럽션이 발생한다.

 

# 연결이 잘 안되는 경우

discover는 성공했는데 initiator가 discover 된 target에 로그인하는데 문제를 겪는 경우, 이 문제는 access control이나authentication에 문제가 연관되어 있을 수 있다.  액세스를 허용해야 하는 initiator의 IQN을 iscsi 서버에 있는 iscsi target에 명시함으로써 권한을 부여된다. 즉 initiator의 이름이 iscsi target 서버에 등록되어 있어야 한다는 것이다. 클라이언트에서는 위 절차 2번 항목에서IQN을 명시한다. 이부분이 오타나 문제가 있을 수 있으므로 확인을 해봐야 한다. 만약  /etc/iscsi/initiatorname.iscsi 파일을 수정했다면iscsid 서비스를 재시작해야 한다. 또한 iscsi target 서버에서도 특이사항이 있을 수 있으므로 확인이 필요하다.

 

 

7. 연결된 디스크 장치 식별하기

이 시점에서, 서버에는 새로운 SCSI 블록 디스크가 등록되며, 시스템은 로컬로 연결된 디스크처럼 해당 디스크를 감지한다. 현재  iSCSI 로그인 세션에 대한 정보를 print level 3 으로 표시하는 iscsiadm --mode session --print 3 명령으로 새 장치를 식별할 수 있다. 

 

또는 dmesg, tail /var/log/messages 또는 ls - l /dev/disk/by-path/*iscsi* 명령의 출력을 살펴볼 수도 있다. 이 로그인 프로세스는 재부팅 시에도 지속되므로, 따라서 부팅 후 자동으로 block device를 사용할 수 있다.

 

 

8. 식별된 장치를 포맷하여 사용하기

블록 장치가 이미 파티션/파일시스템 또는 lvm 볼륨을 가지고 있다면, mount 같은 명령어로 데이터에 접근할 수 있다. lsblk --fs 명령으로 이러한 구조를 확인할 수 있는데, 아래에서는 /dev/sda는 3개의 파티션이 있고 (OS 영역), /dev/sdb는 LVM 물리적 볼륨이고 파일시스템이 있다. 즉 마운트할 수 있다. 그리고 /dev/sdc는 아무것도 없다. 사용하려면 파일시스템을 생성해야 한다. (아래 예시는 이 iSCSI 클라이언트 구성 예시와 관계 없음)

7번 진행된 부분의 연장선으로 (/dev/sda가 등록된 것) 연결된 디스크가 /dev/sda이고, 아무것도 없다면 아래처럼 파일시스템을 구성하여 마운트하고 사용할 수 있다.

 

(1) 파일시스템 생성 (ext4 사용()

 

(2) 마운트 포인트 생성

 

(3) uuid 확인

 

(4) /etc/fstab에 설정

 

#참고 : iSCSI 디스크를 /etc/fstab에 등록하는 경우, 다음 지침을 따라야 한다.

첫번째, lsblk --fs 명령을 사용하여 파일시스템의 UUID를 확인하고, 파일시스템 마운트 시 해당 UUID를 사용하도록 한다. 디바이스 네임(/dev/sda같은) 를 쓰지 않는다. 이것은 부트할 때 바뀔 수 있기 때문이다. device name은 iSCSI device가 네트워크를 통해 응답한 순서에 따라 달라진다. 만약 /etc/fstab에 device name으로 등록을 하고 리부팅 후에 이름이 바뀐다면, 시스템은 잘못된 마운트 포인트에 마운트할것이다. 두번째, /etc/fstab에서 _netdev 마운트 옵션을 사용한다. iSCSI는 원격 장치에 접근시 네트워크에 의존하므로, 이 옵션을 사용하면 네트워크와 initiator가 올라올까지 시스템이 파일시스템을 마운트하려고 시도하지 않게 한다.

 

(5)마운트 테스트

 

 

 

 

* 연결된 iSCSI 해제하기

해제를 위해서는 마운트 해제, fstab 수정, iSCSI 로그오프 및 삭제를 해야한다. 아래 예시는 예시일뿐 위 절차와는 관계가 없음.

 

(1) 마운트 해제

 

(2) fstab 내용 수정

 

(3) iSCSI 로그오프

 

(4) iSCSI 삭제

이렇게 해야 initiator가 부팅할때 해당 target에 자동으로 로그인하지 않는다.

 

 

 

* References

iscsiadm(8) man page

/usr/share/doc/iscsi-initiator-utils/README

 

Knowledgebase: "What are the advantages and disadvantages to using partitioning on LUNs, either directly or with LVM in between?"

https://access.redhat.com/solutions/163853

 

For more information, refer to the Creating an iSCSI initiator section in the Managing Storage Devices Guide at

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/managing_storage_devices/index#creating-an-iscsi-initiator_adding-an-iscsi-target

 

For more information, refer to the Getting started with XFS and Mounting file systems sections in the Managing File Systems Guide at

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/managing_file_systems/index

 

The Red Hat iSCSI Helper Tool 

https://access.redhat.com/labsinfo/iscsihelper/

 

For more information, refer to the Getting started with iSCSI chapter in the Managing Storage Devices Guide at

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/managing_storage_devices/index#getting-started-with-iscsi_managing-storage-devices

 

 

 

 

 

+ Recent posts