본문 바로가기

IT 일기

iscsi 구성 - with multipath

728x90

ISCSI (Internet Small Computer System Interface)

  • 컴퓨터 환경에서 데이터 스토리지 시설을 이어주는 IP 기반의 스토리지 네트워킹 표준
  • IP 망을 통해 SCSI 명령을 전달함으로 인트라넷을 거쳐 데이터 전송을 쉽게 하고 먼 거리에 걸쳐 스토리지를 관리하는데 쓰임
  • 근거리, 원거리, 인터넷 망을 통해 데이터를 전송하는 데 쓰이며 위치에 영향을 받지 않음
  • 이런 ISCSI를 이용해 SAN을 구축함

SAN (Storage Area Network)

  • 여러 서버 또는 컴퓨터에서 액세스할 수 있는 스토리지 디바이스 네트워크로, 스토리지 공간의 공유 풀을 제공함
  • 네트워크의 각 컴퓨터는 컴퓨터에 직접 연결된 로컬 디스크처럼 SAN 스토리지에 액세스할 수 있음

ISCSI 용어

  • Target : 서버 및 스토리지 역할
    • ACL(Access Control List) : Target으로의 접속을 허용할 Initiator의 IQN 리스트
    • LUN(Logical Unit Number) : Target으로 접속한 Initiator들에게 제공할 데이터의 논리적 단위
    • Portals : Target이 Initiator의 요청을 받을 IP Port에 대한 리스트
  • Initiator : 클라이언트 역할
  • IQN (ISCSI Qualified Name) : Target, Initiator의 고유 이름 포맷 중 하나

ISCSI 활용성

  • Target에서 fileio로 생성한 파일 시스템의 일부를 Initiator에게 디스크 이미지로 제공
  • Initiator가 동작하던 VM의 데이터 정보는 Target에서 관리하고 저장되기 때문에 VM 이전 혹은 장애 복구에 용이함
  • Target에서 Initiator의 데이터를 중앙 관리하기 때문에 관리에 용이함

ISCSI 구성도

Target 서버(스토리지) 설정

#디스크 파티셔닝
fdisk /dev/sdb
#command 확인 후 파티셔닝 진행
#결과

lsblk

sdb
	-sdb1  # (for nfs)
	-sdb2  # (for iscsi)
#디스크 마운트
mount /dev/sdb2 /root/initiator1

#reboot 이후에도 mount가 유지되도록 설정 (fstab은 리눅스에서 사용하는 파일시스템 정보를 정적으로 저장하고 있는 파일로, 부팅시 마운트 정보를 읽어들이고 적용함)
echo "/dev/sdb2 /root/initiator1        xfs    defaults    0 0" >> /etc/fstab
#Iscsi Target 설치
yum -y install targetcli

#reboot 이후에도 target 서비스가 수행되도록 설정
systemctl enable target
systemctl start target
#Target 설정을 위한 command
targetcli

ls or cd

o- /........................................[...]
  o- backstores.............................[...]
  | o- block.................[Storage Objects: 0]
  | o- fileio................[Storage Objects: 0]
  | o- pscsi.................[Storage Objects: 0]
  | o- ramdisk...............[Storage Objects: 0]
  o- iscsi...........................[Targets: 0]
  o- loopback........................[Targets: 0]
#Target backstore 생성 (fileIO)
cd backstores/fileio
create name=[backstore 이름] file_or_dev=[disk 생성 경로]/[disk 이름] size=[디스크 크기] write_back=false(캐싱 사용 여부)

ex : create name=server.img file_or_dev=/root/initiator1/server.image size=5GB write_back=false

#IQN 설정
cd iscsi
create iqn.[Date].[Naming_Auth]:[description]

ex : create iqn.2023-07.com.example:initiator
#Target portal 생성
cd iscsi/[IQN]/[tpg]/portals

create [IP] [Port]

ex : create 0.0.0.0 3260
=> Target VM의 3260번 포트로 오는 모든 iscsi 요청을 받겠다
#Target luns 생성
cd iscsi/[IQN]/[tpg]/luns

create /backstores/fileio/[disk 이름]
#Target acls 생성
cd iscsi/[IQN]/[tpg]/acls

create iqn.[Date].[Naming_Auth]:[description]

#Target acl에 lun mapping
cd iscsi/[IQN]/[tpg]/acls/iqn.[Date].[Naming_Auth]:[description]
create mapped_lun=[lun 숫자] tpg_lun_or_backstore=[사용할 backstore 경로] write_protect=[권한] [1 >= ro , default or 0 = rw]

ex : create mapped_lun=1 tpg_lun_or_backstore=/backstores/fileio/fileio_file write_protect=1
#종료 및 저장
exit

Initiator 설정

#iscsi initiator util 설치
yum -y install iscsi-initiator-utils

#reboot 이후에도 iscsi initiator 서비스가 수행되도록 설정
systemctl enable iscsi-initiator-utils
systemctl start iscsi-initiator-utils

#iscsi initiator iqn 설정
vi /etc/iscsi/initiatorname.iscsi

=> target의 acl에 설정한 iqn으로 재설정
cat /etc/iscsi/initiatorname.iscsi
ex : InitiatorName=iqn.2023-07.com.server:httpd
#multipath 설정
yum -y install device-mapper-multipath

#reboot 이후에도 multipathd 서비스가 수행되도록 설정
systemctl enable multipathd
systemctl start multipathd
#multipath를 위한 iface 2개 추가
iscsiadm -m iface -I [iface 이름] --op=new

ex : 
iscsiadm -m iface -I iface0 --op=new
iscsiadm =m iface -I iface1 --op=new

#iface에 eth 바인딩
iscsiadm -m iface -I iface0 --op=update -n iface.hwaddress -v [eth mac address]

ex :
iscsiadm -m iface -I iface0 --op=update -n iface.hwaddress -v 00:15:5d:0b:48:0d
iscsiadm -m iface -I iface1 --op=update -n iface.hwaddress -v 00:15:5d:0b:48:0a

#결과 확인
iscsiadm -m iface

default tcp,<empty>,<empty>,<empty>,<empty>
iser iser,<empty>,<empty>,<empty>,<empty>
iface0 tcp,00:15:5d:0b:48:0d,<empty>,<empty>,<empty>
iface1 tcp,00:15:5d:0b:48:0a,<empty>,<empty>,<empty>
#Target discovery
iscsiadm -m discovery -I [iface 이름] -t st -p [IP] [Port/default:3260]

ex:
iscsiadm -m discovery -I iface0 -t st -p 192.168.1.102 3260
iscsiadm -m discovery -I iface1 -t st -p 10.10.10.2

#discovery한 Target 확인
iscsiadm -m node

#Target node 전체 로그인
iscsiadm -m node --login  
or
#특정 Target node 로그인
iscsiadm -m node -p [IP]:[Port] -l

ex:
iscsiadm -m node -p 10.10.10.2:3260 -l
iscsiadm -m node -p 192.168.1.102:3260 -l

#Initiator-Target Session 확인
iscsiadm -m session

#Initiator-Target iface 바인딩 확인
iscsiadm -m iface -P 1
Iface: default
Iface: iser
Iface: iface0
        Target: iqn.2023-07.com.storage:iscsi
                Portal: 10.10.10.2:3260,1
Iface: iface1
        Target: iqn.2023-07.com.storage:iscsi
                Portal: 192.168.1.102:3260,1

#multipath 확인
multipath -ll
mpatha (36001405bdae813e6e23472c9f029521a) dm-3 LIO-ORG ,server.img
size=5G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 12:0:0:0 sdc 8:32 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 14:0:0:1 sdb 8:16 active ready running

#디스크 확인
lsblk

NAME         MAJ:MIN   RM   SIZE  RO   TYPE   MOUNTPOINT
...
sdb            8:16     0    5G    0   disk
ㄴmpatha     253:2      0    5G    0   mpath
sdc            8:32     0    5G    0   disk
ㄴmpatha     253:2      0    5G    0   mpath
...
#disk에 filesystem 구성
mkfs.xfs /dev/mapper/[mpath]

ex : mkfs.xfs /dev/mapper/mpatha

#disk를 mount할 디렉토리 생성
mkdir /var/www/html/iscsi

#mount
mount /dev/mapper/[mpath] /var/www/html/iscsi

#/etc/fstab 설정
echo "/dev/mapper/mpatha /var/www/html/iscsi xfs _netdev 0 0" >> /etc/fstab

#마운트 정보 확인
mount -l
or
df -h
#multipath testing

#eth down을 테스팅 하기 위한 패키지 설치
yum -y install net-tools

#eth down & up
ifconfig [eth] down
ifconfig [eth] up

ex : ifconfig eth1 down & ifconfig eth1 up

#테스트 절차
# 1. multipath로 설정한 eth중 하나 down 시켜도 정상적으로 I/O 가능한지 확인 (두 eth 확인)
# 2. multipath로 설정한 모든 eth를 down 시킨 후 I/O가 되지 않는 것을 확인
# 3. 2번 상태에서 multipath로 설정한 eth중 하나를 다시 up. 이후 dev와 dir 다시 마운트 후 I/O 확인

 

728x90