[root@workstation ~]# virsh list --all Id Name State ----------------------------------- - rhel8.3-node1 shut off - rhel8.3-node2 shut off - rhel8.3-node3 shut off - rhel8.3-node4 shut off - rhel8.3-storage shut off - rhel8.3-template shut off
가상머신 시작
virsh start [가상머신명]
[root@workstation ~]# virsh start rhel8.3-node1 Domain rhel8.3-node1 started
가상머신의 스냅샷 확인
virsh snapshot-list [가상머신명]
[root@workstation ~]# virsh snapshot-list --domain rhel8.3-node1 Name Creation Time State -------------------------------------------------- snapshot1 2023-12-12 16:47:09 +0900 shutoff
iSCSI는 IP 네트워크를 통해 SCSI 스토리지 프로토콜을 에뮬레이트 하는 TCP/IP 기반 프로토콜이다. 가상환경이나 테스트환경에서 SCSI를 사용하기 어려우므로, iSCSI를 통해 테스트용으로 사용할 수 있다. IP 기반이라 테스트를 위한 일반 PC 환경에서는 SCSI보다 훨씬 불안정하며, Production 에서 사용하기 위해서는 전용 트래픽 인프라가 필요하므로 SCSI 대신 굳이 쓰는 경우는 드물다.
# 용어
- Initiator : iSCSI를 받는 클라이언트
- target : iSCSI 서버로 사용되는 스토리지
targetcli 는 iSCSI 를 구성하는 패키지이며, 해당 패키지는 대화형 쉘 방식으로 iSCSI 를 구성하도록 되어 있다. 아래 내용에서 <서버> 부분과 <클라이언트> 부분이 나뉘어져 작업이 진행된다.
* iSCSI Server (Targetcli) 설치 및 구성
1. 설치
yum install targetcli
systemctl enable target (enable 하지 않으면, 구성해놓은 iscsi 정보가 없어질 수 있으므로 꼭 수행할 것)
systemctl restart target
2. 개요
- targetcli -> 이후 프롬프트 변경됨
- 아래과 같이 /> 프롬프트가 나오며, ls를 치면, 현재 iSCSI 구성이 나온다.
- 현재 어떠한 내용도 없는 상태이다.
- 여기서 먼저 서버내에 구성된 디스크/파티션/LV 등을 가지고 iSCSI용 디스크를 등록한다.
- 등록된 디스크를 클라이언트에 연결할 수 있도록 IQN, ACL 등을 설정한다.
- 이후 클라이언트에서 해당 디스크에 엑세스할 수 있다.
3. targetcli 사용
경로구성은 최상위 / 밑에는 backstores, iscsi,loopback이 있고, blackstores 아래에는 block,fileio,pscsi,ramdisk가 있다. 이 경로구성에 추가로 여러가지가 생성될 수 있다. 경로 이동은 해당 프롬프트에서 backstores/block 이런식으로 입력하여 이동이 가능하다. 이전 경로로 갈 때는 .. 을 입력하여 이동한다. 아래 예시 참조
- 파란색은 처음으로 ls 를 입력하여 전체 경로 확인
- 붉은색은 /backstore/block 로 이동하여 ls를 입력하여 나온 결과
- 녹색은 /backstore/block 에서 한 칸 뒤인 /backstore로 이동하여 ls를 입력하여 나온 결과
4. iSCSI용 디스크 등록
backstores경로에는 block, fileio, pscsi, ramdisk 등의 스토리지 오브젝트가 있다. 서버에 있는 디스크를 위 4개중 일치하는 오브젝트에 등록하여 iSCSI용 디스크를 만든다. 여기서는 아래와 같이 lsblk 명령어에서 확인되는 vdb 디스크를 가지고 작업한다. (가상머신에서 추가한 디스크)
# 참고 : targetcli 에서 서비스하기위해 사용하는 스토리지 방식 종류
- block: 서버에 정의된 블록 디바이스(디스크, 논리 볼륨 등)를 사용한다.
- fileio: 서버에 지정된 크기의 파일을 만든다.
- pscsi: 서버에 설치된 물리적인 SCSI를 사용한다.
- ramdisk: 서버의 메모리에 램 디스크를 생성하여 사용한다. 저장된 내용은 재부팅 이후에는 존재하지 않으므로, 일시적이다.
- 아래와 같이 /backstores/block 까지 진입하여 create/block0 /dev/sdb 명령으로 블록장치를 생성한다.
- 루트로 돌아간 후, 아래와 같이 다시확인해보면 디스크가 등록된 것을 알 수 있다.
4. IQN 생성
iqn 안에 디스크, 네트워크정보, 보안정보등이 할당되며, 클라이언트는 iqn 정보로 iscsi에 연결한다. 예를들어 iqn에 디스크를 5개 할당했다면 클라이언트가 해당 iqn으로 iscsi를 연결하면 디스크 5개가 연결된다. 여기서는 iqn을 생성하고, 디스크를 연결하는 기본적인 설정만 수행하며, 보안 및 상세 네트워크 설정은 수행하지 않는다.
- iscsi/ 경로로 진입한 후, create 명령으로 iqn을 생성한다.
- iqn은 iqn.yyyy-mm.com.domain:option 의 형식을 따른다.
- 자유롭게 작성하면 되고, 아래 예시는 iqn.2023-12.com.example:storage1 로 설정하였다. 이 주소가 스토리지를 식별하는 unique한 주소가 된다.
iqn은 tpg를 가지며, tpg 밑에 acls, luns, portals 3가지 오브젝트를 가진다.
- acls(Access Control Lists) : iqn을 이용하여 클라이언트에 대한 액세스 권한을 검증하며, 등록된 lun을 매핑한다.
- luns(Logical Unit Number): iscsi에서 사용할 디스크를 정의한다.
- portals: 내보내기된 디스크에 접근하는 방법을 정의한다. IP 주소들과 포트의 쌍으로 구성되어 있다.
5. ACL 생성
acls(Access Control Lists) 은 iqn을 이용하여 클라이언트에 대한 액세스 권한을 검증한다. 이 리스트에 있는 iqn을 가진 클라이언트만 이 iqn.2023-12.com.example:storage1 에 접속할 수 있게 된다.
-해당 iqn의 acl까지 진입한 후 acl을 생성한다. create [iqn이름] 의 형식을 사용한다.
- 위 예시에서는 iqn.2023-12.com.example:node1 / node2 / node3 총 3개를 생성하였다.
- 클러스터 총 3개 노드에서 사용할 것이기 때문에 이렇게 작성한 것이며 이름은 형식에 맞춰 자유롭게 해도 된다.
6. LUN 할당
위에서 만들어둔 /backstores/block/block0 (/dev/vdb)를 해당 IQN에 등록한다. 등록한 LUN은 각각 ACL에 매핑된다.
7. 최종 확인
.. 명령으로 루트까지 돌아간 후, 다시 ls명령으로 전체 세팅을 확인한다.
8. 저장 및 완료
- saveconfig 명령으로 저장하고, exit로 빠져나간다.
- 빠져나갈때마다 자동으로 저장되지만, 중간중간에 세팅 저장을 할 때 saveconfig 명령을 사용한다.
- 저장된 config는 /etc/target/backup에 저장되며, 문제가 생기는 경우 해당 파일로 복구할 수 있다.
# 참고 : 리부팅 후 targetcli를 수행했을 때 설정한 데이터가 모두 삭제된 경우
- targetcli 정보는 먼저 가장 최근 정보는 /etc/target/saveconfig.json 값으로 저장된다.
- 이전 백업 정보는 /etc/target/backup에 저장된다.
- 데이터가 모두 삭제된 경우, 최근 정보 및 이전 백업 정보를 확인하여 savefile를 찾는다.
- 다음 명령어를 수행한다. targetctl restore savefile이름
- targetcli 명령으로 복구된 것을 확인한다.
이제 이렇게 생성된 iSCSI 디스크는 iqn.2023-12.com.example:node1 / node2 / node3 를 가진 iSCSI Initiator에서 iqn.2023-12.com.example:storage1 주소를 사용하여 디스크를 연결받아 사용할 수 있게 된다.
KVM 가상머신을 쓰는 경우, KVM 물리적 서버에서 생성된 가상머신과 네트워크 통신을 할 때 보통 NAT를 사용한다. 하지만 이 NAT는 해당 KVM 가상머신 내에서만 사용하므로 외부 네트워크는 접속할 수 없다.
생성된 가상머신의 네트워크와 KVM 서버의 인터넷 IP가 들어간 포트를 를 브릿지하면 가상머신들이 KVM 물리적 서버와 같은 IP 대역으로 사용할 수 있다. 이는 사용이 매우 편리하며 마치 여러대의 서버가 있는 것처럼 사용할 수 있다.
* 현재 구성 네트워크 상태
현재 네트워크 상태는 다음과 같다.
np4s0은 해당 물리적 서버의 네트워크 포트(인터넷)이며, 부득이하게 캡쳐를 올린 이유는 원래 enp4s0에서 네트워크 통신을 사용했었으나 브릿지 생성을 위해 네트워크 설정을 삭제하였고 그것 때문에 콘솔에서 직접 사진을 찍었다. 네트워크 삭제는 nmcli con delete enp4s0 을 수행하면 된다.