본문으로 바로가기

Storage (NFS, iSCSI)

category MLOps/Linux 2022. 2. 3. 14:46

1. Storage 연결 방식

- DAS: 스토리지 장치와 시스템을 서로 케이블을 이용해서 직접적으로 연결하는 형태

          : 거리 / 공간, 일대일 연결방식이어서 한계가 있음

- NAS: 네트워크를 사용해서 스토리지와 시스템을 연결

          : 서버쪽에서 사용 가능한 형태로 포멧 (파일시스템 생성)한 후 해당 스토리지 장치의 일부분 (디렉토리/파일)을 저장 또는 공유

- SAN: 네트워크를 사용해서 스토리지와 시스템 연결 (스토리지 전용 별도의 네트워크 사용)

          : 스토리지를 통째로 (포멧하지 않고) 제공

  DAS NAS SAN
FC-SAN IP-SAN
구성요소 서버시스템 스토리지 파일서버 스토리지
+ 일반서버시스템
서버시스템 스토리지 서버시스템 스토리지
접속장치 없음 이더넷스위치 FC스위치, HBA 이더넷스위치
파일시스템 클라이언트에서 직접 설정 파일서버에서 공유 클라이언트에서 직접 설정 클라이언트에서 직접 설정

 

2. NFS (Network File System)

1) 소개

- 네트워크를 이용해서 파일/디렉토리를 공유해주는 Unix/Linux 계열의 표준 프로토콜

- 가상화 또는 클라우드 서비스에서 가성머신의 스토리지를 공유할 때 자주 사용

- 공유된 파일에 데이터를 보관하여 서로 다른 시스템에서 동일 데이터에 접근 가능하여 일관성 유지

 

2) 구성

- 패키지 설치: nfs-utils

- 서비스 설치: 공유 디렉토리 준비 (생성/권한설정/SELinux/공유설정), 설정파일, 추가요소 (커버로스/IPA)

- 서비스 활성화: nfs-server / nfs-secure-server / nfs-secure

- 방화벽 설정: nfs

# 예시
# /nfs/read_only: 첫번째 디렉토리는 읽기 전용으로 공유 , 공유 대상은 클라이언트만
# /nfs/read_write: 읽기/쓰기 가능하게 공유, 10.0.2.0/24 네트워크 대역 모두 마운트할 수 있게 대상 지정

# 패키지 설치
yum install -y nfs-utils

# 폴더 생성
mkdir -p /nfs/read_only /nfs/read_write

# 권한 설정
chmod 777 /nfs/read_write
chown :nfsgroup /nfs/read_write

# /etc/exports 작성
vim /etc/exports
# /nfs/read_only	10.0.2.200/32(ro,sync)
# /nfs/read_write	10.0.2.0/24(rw,sync)
exportfs -r

# 시스템 부팅
systemctl enable --now nfs-server

# 방화벽 설정
firewall-cmd --add-service=nfs --permanent

# 클라이언트에서 마운트
# 읽기전용 디렉토리는 /nfs/ro 디렉토리에 , 쓰기 가능 디렉토리는 /nfs/rw 디렉토리에 마운트
# 읽기전용 디렉토리는 임시 마운트로 하고 쓰기 가능 디렉토리는 영구마운트 (/etc/fstab)로 설정

# 폴더 생성
mkdir -p /nfs/{ro,rw}

# 마운트
mount -t nfs -o ro,sync SERVER:/nfs/read_only /nfs/ro

# /etc/fstab 작성
vim /etc/fstab
# SERVER:/nfs/read_write	/nfs/rw		nfs		rw,sync		0	0
mount -a

 

3) NFS 보안 구성

- none: nfsnobody라는 익명의 사용자로 접근

- sys: (기본값) 리눅스 사용자 기준으로 파일에 대한 접근 제어

- krb5: 커버로스 인증 서버 사용

- krb5i: 인증 + 무결성 (check sum)

- krb5p: 인증 + 무결성 + 데이터 암호화

- 서버의 /etc/exports 파일과 클라이언트의 마운트 옵션으로 결졍
- 커버로스를 사용하려면 별도의 IPA 서버가 필요 + nfs-secure-server / nfs-secure 서비스 추가 활성화

 

4) 자동 마운트

- NFS 공유 디렉토리를 자동으로 마운트하거나 마운트를 해제하는 서비스

- 접근 시 자동으로 마운트하고 일정시간 동안 접근하지 않으면 자동 해제하여 시스템 자원 효율적 사용 가능

- direct, indirect, wildcard

# Direct
/mnt/dirA       -rw,sync        ServerIP:/nfs
					=> 서버의 /nfs 디렉토리를 클라언트의 /mnt/dirA 에 마운트
					/mnt/dirA 전체를 직접 생성
# Indirect
dirA            -Options        ServerIP:/nfs
					=> 서버의 /nfs 디렉토리를 클라언트의 /mnt/dirA 에 마운트
					/mnt 디렉토리만 생성
# WildCard
*               -Options        ServerIP:/nfs/&
					=> 서버에서 /nfs 디렉토리 밑에 있는 여러 디렉토리를 동시에 공유
					마운트 시 /mnt 디렉토리에 각각 마운트
					ex) 서버가 /nfs/docs 디렉토리 공유 시
						-> /mnt/docs 디렉토리에 마운트
# autofs 설치
yum install -y autofs

# 1. 직접 맵 (direct)
vim /etc/auto.master.d/kkk.autofs
/-	/etc/auto.direct

# 직접 맵 파일 생성
vim /etc/auto.direct
/mnt/direct		-rw,sync,sec=krb5		server.kkk.co.kr:/autofs/direct

mkdir /mnt/direct

# 2. 간접 맵 (indirect)
vim /etc/auto.master.d/exports.autofs
/kkk	/etc/auto.indirect

# 간접 맵 파일 생성
vim /etc/auto.indirect
autofs01		-rw,sync,sec=krb5		server.kkk.co.kr:/kkk/autofs01

# wildcard
vi /etc/auto.indirect
*		-rw,sync,sec=krb5		server.kkk.co.kr:/kkk/&

# 서비스 시작
systemctl enable --now autofs

 

3. iSCSI

1) 소개

- SAN 연결방식 중 하나

- FC-SAN의 경우 확장 또는 신규 설치 시 모든 장비를 교체해야 해서 비용 부담이 큼

- IP-SAN은 기존 장비를 그대로 사용하면서 IP프로토콜을 활용해 스토리지 연결하는 방식

  FC-SAN IP-SAN (iSCSI)
바탕기술 Fiber Channel TCP/IP
한계거리 10km 제약사항 없음
비용 매우 고가 추가 비용 없음

 

2) 용어설명

- target: 스토리지를 제공해줄 서버를 의미

- initiator: 네트워크를 이용해서 스토리지를 연결해 사용할 클라이언트 시스템

- IQN (iSCSI Qualified Name): 타켓과 초기자의 이름

- TPG (Target Portal Group): 아래 3가지의 상위 그룹

- ACL (Access Control List): 타켓에 연결할 수 있는 initiator의 목록 (IQN)

- LUN (Logical Unit Number): 블록스토리지의 논리적인 이름

- portal: 타켓이 사용하는 인터페이스의 IP주소와 포트번호

IQN 이름 권장사항
- iqn.날짜.도메인:서브도메인
ex) iqn.2022-02.kr.co.kkk:sjpyo (YYYY-MM.도메인역순:호스트 이름)

 

3) iSCSI 타겟 설정

- backstores: 제공할 장치 준비

    o- block: 블록스토리지 (디스크/파티션/논리볼륨)

    o- fileio: 파일을 만들어서 디스크처럼 공유

    o- pscsi: 지금은 사용 X

    o- ramdisk: 메모리 영역의 공간 공유

1. 서버(타겟)에서 targetcli 패키지 설치 후 targetcli 명령어 실행으로 설정 진행
2. target 서비스 활성화 ( 설정 내용이 사라질 수있음 )
3. 방화벽 설정 - 3260/tcp 포트 오픈
4. 클라이언트(이니시에이터) 에서는 iscsi-initiator-utils 패키지 설치 ( 알맞은 아키텍쳐 하나만 )
5. IQN 이름을 설정	-> /etc/iscsi/initiatorname.iscsi 파일에서 설정 ( 타겟에서 설정한 ACL 과 동일 )
6. iscsiadm 명령어로 검색 및 연결
	-> 이니시에이터 설정 순서는 필수!!
주의 사항
1. 타겟에서 target서비스 미활성화 시 설정 내용을 잃을 수 있다.
2. 타겟에서 방화벽 또는 PORTAL 설정에서 인터페이스 주소 / 포트번호 설정이 잘못되면
	-> 이니시에이터에서 검색할 때 대상을 찾을 수 없다.
3. ACL 에 설정된 IQN 과 이니시에이터에서 설정하는 IQN 이름이 일치해야 한다.
	-> 이니시에이터에서 로그인 시 오류 발생
	=> 해결방법 : 검색 기록 제거 -> iscsi / iscsid / iscsid.target 세가지 유닛 상태 중지 -> IQN 수정 -> 검색 -> 로그인

'MLOps > Linux' 카테고리의 다른 글

Apache 웹 서버  (0) 2022.02.03
FreeIPA  (0) 2022.01.31
DHCP 서버  (0) 2022.01.30
DNS 서버 및 구축방법  (0) 2022.01.30
SELinux (리눅스 보안)  (0) 2022.01.29