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
'IT 일기' 카테고리의 다른 글
SELinux 설정하기 with SELinux Boolean (0) | 2023.08.19 |
---|---|
nfs 구성 (0) | 2023.08.19 |
데코레이터 패턴이란? (Go) (0) | 2023.04.16 |
Two ways to implement DFS. (Recursive or Stack) (0) | 2023.03.23 |
TCP 4-way-handshake's Buffered-Period in Time-Wait (0) | 2023.03.18 |