가상머신 전체 리스트 확인 virsh  list --all [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
가상머신 스냅샷 복구 virsh snapshot-revert [노드명] [스냅샷명] [root@workstation ~]# virsh snapshot-revert rhel8.3-storage snapshot3
가상머신 스냅샷 만들기 virsh snapshot-create-as --domain [노드명] [스냅샷명] [root@workstation ~]# virsh snapshot-create-as --domain rhel8.3-storage snapshot3
Domain snapshot snapshot3 created
가상머신 스냅샷 삭제 virsh snapshot-delete --domain [노드명] [스냅샷명] [root@workstation ~]# virsh snapshot-delete --domain rhel8.3-node1 snapshot1
Domain snapshot snapshot1 deleted
가상머신 스냅샷 상세정보 보기 virsh snapshot-dumpxml --domain [노드명] --snapshotname [스냅샷명] virsh snapshot-dumpxml --domain rhel8.3-node1 --snapshotname snapshot1
<domainsnapshot>
  <name>snapshot1</name>
  <description>1.hostname
2.yum config
3.iso file copy
4.network setting
5./etc/hosts setting
(4,5 settijng is related with node1,2,3,4 and storage)</description>
  <state>shutoff</state>
  <creationTime>1702367229</creationTime>
  <memory snapshot='no'/>
  <disks>
    <disk name='vda' snapshot='internal'/>
...중략...
가상머신 xml 정보 보기 virsh dumpxml [노드명] [root@workstation ~]# virsh dumpxml rhel8.3-node1
setlocale: No such file or directory
<domain type='kvm' id='2'>
  <name>rhel8.3-node1</name>
  <uuid>81a85d57-85f9-4326-9a97-5db96e043033</uuid>
  <metadata>
   
     
    </libosinfo:libosinfo>
  </metadata>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
...중략...
가상머신 xml 정보 수정하기 virsh edit [노드명]

* iSCSI란?

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  주소를 사용하여 디스크를 연결받아 사용할 수 있게 된다.

1. 오른쪽 상단에 file 밑에 모니터 화면을 누른다.

2. Local install media를 선택한다.

 

3. browse를 선택한다. (해당 서버에 이미 iso 파일이 있어야 함)

 

4. 오른쪽 하단쪽에 Browse Local을 선택한다.

 

5. iso 파일을 저장해둔 경로로 가서 해당 iso 파일을 선택한다.

 

이후 아래와 같이 iso파일로 OS를 감지한다. forward를 선택한다.

 

6. CPU와 메모리를 설정한다. (최대 용량이 아래 나오므로 적절하게 선택한다)

 

 

7. 연결할 디스크를 선택한다. 여기서는 50GB 1개만 설정하였다.

 

8. 가상머신 이름 및 네트워크를 선택한다.

- 여기서는 이전에 만들어 둔 bridge device를 선택한다. bridge device 관련해서는 아래를 참고한다.

2024.04.20 - [High Availability] - [QEMU-KVM] RHEL8 에서 브릿지 네트워크 (bridge network) 만들기

 

[QEMU-KVM] RHEL8 에서 브릿지 네트워크 (bridge network) 만들기

* 개요 KVM 가상머신을 쓰는 경우, KVM 물리적 서버에서 생성된 가상머신과 네트워크 통신을 할 때 보통 NAT를 사용한다. 하지만 이 NAT는 해당 KVM 가상머신 내에서만 사용하므로 외부 네트워크는 접

watch-n-learn.tistory.com

 

- 또한 Customize configuration before install 을 체크한다. 

- 가상머신은 세팅이 완료되면 자동으로 실행되는데, 그걸 막고 추가 하드웨어 구성 메뉴로 넘어가게 한다.

- 참고로 지금까지 디스크 1개, 네트워크1개 이런식으로 구성했으나 추가 세팅에서 디스크, 네트워크 등등을 더 추가할 수 있다.

 

9. 추가 하드웨어 설정

- 다음으로 아래와 같이 화면이 나오며 여러 장치를 추가/제거할 수 있다.

- 아래와 같이 tablet 같이 명확하게 필요없는 것은 삭제한다. (사운드 등도 필요 없을 것이다)

 

- 또한 아래와 같이 CD롬에서는 ISO 파일이 등록된 것을 알 수 있다. 여기서 필요하다면 변경도 가능하다.

 

- 추가적으로 부팅 펌웨어를 BIOS로 하지 않고 UEFI로 하는 경우, 스냅샷 기능을 쓸 수 없을 수 있으므로 참고할 것.

 

- 여러가지 하드웨어 장치들이 있으나 더이상의 설명은 생략하고, 네트워크 장치를 추가한다. 아래 Add Hardware를 선택한다.

- 네트워크를 선택하면 만들어 놓은 네트워크들이 확인된다. 최초  VM생성시 만든 bridge 네트워크 외에 이전에 만들어둔 네트워크 장치를 3개 각각 더 추가한다. 

- 이전에 만들어놓은 네트워크 장치 3개 관련해서는 아래 참고한다.

2024.04.19 - [High Availability/Lab Environment] - RHEL8에서 KVM 가상머신 환경 및 네트워크 구성 (HA 클러스터용)

 

RHEL8에서 KVM 가상머신 환경 및 네트워크 구성 (HA 클러스터용)

1. 패키지 설치 - 다음 명령을 수행한다. (qemu-kvm은 이미 있었음) - qemu-img가 아래 캡쳐에 빠져있는데, 누락된것임.. 아래 명령대로 하면 된다. yum install qemu-kvm libvirt virt-install virt-manager libvirt-client q

watch-n-learn.tistory.com

 

- 아래와 같이 추가하면 되고, 다른건 건드릴 것은 없다.

 

 

10. 최종 설치 진행

- 모든 세팅이 완료되었으므 왼쪽 상단에 Begin Installation을 선택한다.

 

- 아래와 같이 가상머신이 정상적으로 실행됨을 알 수 있다.

 

1. 패키지 설치

 

- 다음 명령을 수행한다. (qemu-kvm은 이미 있었음)

- qemu-img가 아래 캡쳐에 빠져있는데, 누락된것임.. 아래 명령대로 하면 된다.

yum install qemu-kvm libvirt virt-install virt-manager libvirt-client qemu-img

 

qemu-kvm : 호스트와 게스트 가상 머신간의 통신을 가능하게 하는 package
qemu-img : 게스트 가상머신에 disk management를 제공
virt-install : 가상 머신을 생성하기 위한 virt-install command를 제공
virt-manager : 가상 computer 를 관리하기 위한 virt-manager 도구를 제공하며 graphic 도구
libvirt-client : 명령행 또는 가상화 쉘에서 가상시스템과 hypervisor 를 관리하고 제어하는 virsh command-line tool 이 포함됨.

 

- 참고로, 위 yum 명령을 수행하기 위해 레포지토리 등을 구성해야 하나, 이 부분은 여기서 설명하지 않는다.

 

 

2. 데몬 활성화 및 상태 확인

- 다음 명령을 수행한다.

systemctl enable libvirtd
systemctl start libvirtd

 

- 아래와 같이 validate 명령을 수행한다.

virt-host-validate

 

3. GUI에서 가상머신 구성 실행

- 다음 명령을 수행한다.

virt-manager

 

- 여기서 해당 ssh 프로그램은 mobaxterm 인데, 서버의 GUI 화면도 위와 같이 불러올 수 있다. (굉장히 편리하다)

- 해당 프로그램은 무료에 포터블버전도 있으므로 사용해보길 권한다. (FTP도 쉽게 가능)

https://mobaxterm.mobatek.net/download.html

 

MobaXterm free Xserver and tabbed SSH client for Windows

The ultimate toolbox for remote computing - includes X server, enhanced SSH client and much more!

mobaxterm.mobatek.net

 

- 이 virt-manaver는 우리가 많이 사용하는 virtual box 또는 vmware workstation과 같은 형식의 프로그램이다.

- 사용법도 거의 비슷하므로 이전에 가상머신 프로그램을 써본 사람이라면 쉽게 사용할 수 있다.

4. 가상머신 네트워크 구성

 

# 네트워크 장치 확인

- virt-manager에서 가상머신 네트워크를 구성하기 전에, 미리 아래 ip a 명령어 결과를 봐두자.

- lo는 모든 서버에 있는 서버 자신을 가리키는 루프백이다. 

- enp4s0 은 이 물리적 서버가 가지고 있는 NIC 포트 하나를 의미한다. 포트는 단 하나만 확인된다.

- virbr0 은 GUI로 RHEL8 설치시 자동으로 설치되는 가상브릿지이며 무시해도 무방하다.

 

 

# 구축 시작

- 아래와 같이 QEMU/KVM을 오른클릭 후 Details 를 선택한다.

- 이후 Virtual Network를 선택하면 아래와 같이 default 네트워크가 확인된다.

- 이게 위에서 얘기했던 virbr0 가상브릿지이며, 쓸일이 없으므로 오른쪽 하단 붉은 동그라미를 눌러서 중지시킨 후 오른쪽 붉은원안에 x표를 눌러 삭제한다.

 

- 왼쪽 하단 파란색 더하기를 누르면 아래와 같이 새로운 가상 브릿지를 생성한다. 

- 클러스터에서는 최소 아래 4가지 네트워크가 필요하다.

 

   - 퍼블릭 네트워크 (실제 접속 및 서비스용)

   - Heartbeat 네트워크 (클러스터간 Heartbeat 통신)

   - 스토리지 네트워크 (1/2)

   - 스토리지 네트워크 (2/2)  -> 스토리지는 최소 2개의 경로가 있어야 하기 때문 (multipath 사용)

- 퍼블릭 네트워크는 브릿지를 통해 만들 것이며, 조금 복잡하므로 아래를 참고한다.

2024.04.20 - [High Availability] - [QEMU-KVM] RHEL8 에서 브릿지 네트워크 (bridge network) 만들기

 

[QEMU-KVM] RHEL8 에서 브릿지 네트워크 (bridge network) 만들기

* 개요 KVM 가상머신을 쓰는 경우, KVM 물리적 서버에서 생성된 가상머신과 네트워크 통신을 할 때 보통 NAT를 사용한다. 하지만 이 NAT는 해당 KVM 가상머신 내에서만 사용하므로 외부 네트워크는 접

watch-n-learn.tistory.com

 

- Heartbeat은 아래와 같이 만든다.

 

- NW-STG-PATH-1 은 캡쳐를 깜빡했는데 아래와 동일하고 아이피 대역만 10.10.2.0 이다.

 

- 최종적으로 아래와 같이 구성된다.

- 이렇게 3개의 가상네트워크가 구성되면, 아래 ip a 명령어도 동일하게 가상 브릿지가 생성된다.

- IP대역도 맞는것을 알 수 있다. 이렇게 되면 이 브릿지를 스위치처럼 생각하면 된다.

 

* 가상머신 선택

가상머신은 Virtual Box나 VMware Workstation 보다, 리눅스OS 위에 올라가는 KVM 구성을 권장한다. KVM으로 구성하면 대부분의 Fence를 사용할 수 있다. KVM 서버 구축은 여기서 다루지 않는다.

 

 

* 개요

High Availability Cluster 구성을 위해서는 4개의 가상머신(노드)를 생성해야 한다.

 

node1 / node2 / node3 / iscsi-stroage

 

node1~3은 클러스터 노드가 되며, iscsi-storage는 공유디스크를 위한 스토리지가 된다. 클러스터 노드, 스토리지 각각 설정이 다르다.

 

 

* 전체 기본 서버 세팅

 - VM에서 TEMPLATE용 VM을 만든다. (예를들어 RHCS8-RHEL8.6-template 이런식으로)

- 아래 세팅을 먼저 수행해둔다.

 

1. /etc/hosts setting

 

vi /etc/hosts


### External (Service) Network ###
###192.168.1.193 node1.service
###192.168.1.118 node2.service
###192.168.1.102 node3.service
###192.168.1.109 storage.service

### hb network ###
10.10.1.11 node1.example.com
10.10.1.12 node2.example.com
10.10.1.13 node3.example.com

### storage networks ###
10.10.2.11 node1.storage.patha.com
10.10.2.12 node2.storage.patha.com
10.10.2.13 node3.storage.patha.com
10.10.2.100 storage.patha.com

10.10.3.11 node1.storage.pathb.com
10.10.3.12 node2.storage.pathb.com
10.10.3.13 node3.storage.pathb.com
10.10.3.100 storage.pathb.com

 

 

2. Default firewalld setting

- 방화벽 자동시작 세팅

 

 

3.. yum config 및 iso 파일 준비

- Base, High Availability, Resilient Storage 3가지 iso를 각 노드에 /iso에 복사

- /mnt 에 마운트포인트인 /mnt/base , /mnt/ha, /mnt/rs 3가지 생성

- 위 정보를 가지고 yum repository 구성

- etc/rc.d/rc.local 에 아래 자동 실행하도록 세팅 후 chmod +x /etc/rc.d/rc.local 명령 실행

     - mount -o loop /iso/rhel-8.3-x86_64-dvd.iso /mnt/base

     - mount -o loop /iso/rhel-8.3-x86_64-dvd-ha.iso /mnt/ha

     - mount -o loop /iso/rhel-8.3-x86_64-dvd-rs.iso /mnt/rs

 

 

- 작업해둔 template 파일을 아래와 같이 4개의 VM으로 클론을 만들면 된다.

 

 

* node 구성

클러스터 노드 역할을 하는 서버 구성이다. 클론으로 만든 node1,2,3 3개 가상머신에 대해 각각 아래 세팅을 수행한다.

 

1. 퍼블릭 네트워크 설정 진행, SSH 연결 수행

- 해당 서버는 아래와 같이 4개의 네트워크가 필요하다.

     - 외부 연결 (서비스)네트워크 1개

     - Heartbeat 네트워크 1개

     - 스토리지 네트워크 2개

- 우선 가상머신의 서비스와 외부 연결을 위한 네트워크 설정을 각각 콘솔에서 수행한다. 다 되면 이후에는 ssh로 연결할 수 있다.

 

2. network setting

- 아래 남은 3개의 네트워크를 구성한다.

    - Heartbeat 네트워크 1개

    - 스토리지 네트워크 2개

 

네트워크 구성시 예를 들어, 이런식으로 현재 있는 네트워크 정보들을 삭제하고

nmcli con del enp0s2

 nmcli con del enp0s3

 nmcli con del enp0s4

 

이런식으로 새로 등록한다.

nmcli con add con-name "enp2s0" ifname enp2s0 autoconnect yes type ethernet ip4 10.10.1.11/24 gw4 10.10.1.1

nmcli con add con-name "enp3s0" ifname enp3s0 autoconnect yes type ethernet ip4 10.10.2.11/24 gw4 10.10.2.1

nmcli con add con-name "enp4s0" ifname enp4s0 autoconnect yes type ethernet ip4 10.10.3.11/24 gw4 10.10.3.1

 

3. hostname

- 원하는 호스트명을 설정한다. EX436 시험에서는 이런 식의 호스트명을 사용한다. node1.example.com 

 

 

* storage 구성

iscsi 스토리지 역할을 하는 서버 구성이다.

 

1. 퍼블릭 네트워크 설정 진행, SSH 연결 수행

- 해당 서버는 아래와 같이 3개의 네트워크가 필요하다.

     - 외부 연결 (서비스)네트워크 1개

     - 스토리지 네트워크 2개

- 우선 가상머신의 서비스와 외부 연결을 위한 네트워크 설정을 각각 콘솔에서 수행한다. 다 되면 이후에는 ssh로 연결할 수 있다.

 

2. network setting

- 아래 남은 2개의 네트워크를 구성한다.

    - 스토리지 네트워크 2개

 

네트워크 구성시 예를 들어, 이런식으로 현재 있는 네트워크 정보들을 삭제하고

 nmcli con del enp4s0

 nmcli con del enp5s0

 

이런식으로 새로 등록한다.

nmcli con add con-name "enp4s0" ifname enp4s0 autoconnect yes type ethernet ip4 10.10.2.100/24 gw4 10.10.2.1
nmcli con add con-name "enp5s0" ifname enp5s0 autoconnect yes type ethernet ip4 10.10.3.100/24 gw4 10.10.3.1

 

3. hostname

- 원하는 호스트명을 설정한다. EX436 시험에서는 이런 식의 호스트명을 사용한다.  storage.example.com 

 

4. 추가 방화벽 작업

- firewall-cmd --permanent --add-port=3260/tcp 명령 실행 후 firewall-cmd --reload 실행

 

5. 가상머신에서  1GB 디스크 한개 추가

- 가상머신 프로그램단에서 수행한다.  해당 가상머신 장치 수정에서 디스크를 추가하면 된다.

- 디스크는 원하는 용량대로 원하는 개수만큼 설정하면 된다. 여기서는 5기가 1개를 추가하였다.

 

6. targetcli 설정 (자세한 구성은 설명하지 않는다)

- install targetcli

- setting 1G LUN * 1EA

- 아래 정보대로 정보를 구성한다. 해당 서버들만 iscsi 서버에 연결할 수 있다.

iqn.2023-12.com.example:node1

iqn.2023-12.com.example:node2

iqn.2023-12.com.example:node3

 

 

6번 부분은 아래를 참고한다.

2024.04.21 - [High Availability/Lab Environment] - iSCSI (targetcli) 구성

 

iSCSI (targetcli) 구성

* iSCSI란? - iSCSI는 IP 네트워크를 통해 SCSI 스토리지 프로토콜을 에뮬레이트 하는 TCP/IP 기반 프로토콜이다. - 가상환경이나 테스트환경에서 SCSI를 사용하기 어려우므로, iSCSI를 통해 테스트용으로

watch-n-learn.tistory.com

 

Fence_xvm 은 High Availability Cluster에서 리눅스 위에 kvm으로 가상머신 올리는 경우, 간단하게 구성할 수 있는 Fence 방법이다. 이 구성을 위해서는 kvm 호스트 머신에서 세팅, 그리고 클러스터 노드가 될 가상머신에서의 세팅 두가지 세팅이 필요하다.  이 구성은 RHEL8 기준이며, 다른 버전이나 상세 정보는 아래 Redhat KB 를 참고해야 한다. (로그인 필요)

 

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

 

 

 

* kvm 호스트에서 세팅

 

1. 패키지 설치

아래와 같이 yum install fence-virt* 명령 수행 후 Installing 항목에서, 맨 위부터 serial로 끝나는 패키지까지만 설치하는것으로 기억하면 편하다.

 

# yum install  -y fence-virt fence-virtd fence-virtd-libvirt fence-virtd-multicast fence-virtd-serial

 

 

2. fence_xvm 키파일 생성

먼저 /etc/cluster 디렉토리를 생성 후, dd명령으로 키파일을 생성한다. 이 키 파일은 kvm 호스트, 그리고 각 클러스터 노드의 /etc/cluster에 배치해야 한다.

 

# mkdir -p /etc/cluster 

# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=4k count=1

#scp /etc/cluster/fence_xvm.key 각클러스터노드호스트명또는아이피:/etc/cluster

  (만약 각 클러스터 노드에 /etc/cluster 경로가 없는경우 만들어줘야 한다)

 

 

3. fence_xvm 구성

fence_virtd -c 명령을 통해 conf 파일을 구성한다. 모든 설정은 엔터로 넘어가면 되는데, interface 부분은 클러스터 노드들이 통신하는 대역의 네트워크 장치를 입력하면 된다.

 

# fence_virtd -c                                                

 Parsing of /etc/fence_virt.conf failed.

    Module search path [/usr/lib64/fence-virt]:

    Listener module [multicast]: 

    Multicast IP Address [225.0.0.12]: 

    Multicast IP Port [1229]: 

    Interface [none]: br0      <---- Interface used for communication between the cluster nodes.

    Key File [/etc/cluster/fence_xvm.key]: 

    Backend module [libvirt]: 

    Libvirt URI [qemu:///system]: 

 

 

4. fence_virtd 데몬 재시작                                   

데몬을 재시작하여 변경된 구성을 적용한다.

 

# systemctl restart fence_virtd                                             

# systemctl enable fence_virtd                                        

 

 

5. 방화벽 설정

firewalld를 사용하여 1229 포트 방화벽을 오픈한다. tcp/udp 모두 오픈한다.

 

# firewall-cmd --add-port=1229/tcp --permanent

# firewall-cmd --add-port=1229/udp --permanent

# firewall-cmd --reload                                                

                        

 

 

* 클라이언트 (클러스터 노드) 에서 fence_xvm 설정

 

 

1. fence-virt 설치

# yum install -y fence-virt (fence-agents-all 을 설치하는 경우 자동으로 설치된다)

 

 

2. fence_xvm.key 파일 확인

# 위 kvm 호스트 세팅의 2번째 항목에서 복사한 /etc/cluster/fence_xvm.key 파일이 잘 있는지 확인

 

 

3. fence_xvm 통신을 위한 방화벽 해제 

# firewall-cmd --permanent --add-port=1229/tcp

# firewall-cmd --reload

 

 

4. fence_xvm 통신 테스트

# fence_xvm -o list

아래와 같이 생성된 가상머신들이 확인된다.

 

 

5. fence 구성

pcs stonith create fence_all fence_xvm pcmk_host_map="node1.hb:rhel8.3-node1 node2.hb:rhel8.3-node2 node3.hb:rhel8.3-node3" key_file=/etc/cluster/fence_xvm.key

 

pcmk_host_map 항목에서 형식이 nodename:port 라고 나오는데 port는 가상머신의 이름이다.  또한, 가상머신의 이름과 호스트명이 동일한 경우 pcmk_host_map은 입력하지 않아도 된다. fence_xvm 은 멀티캐스트라 충돌이 있을 수 있어 펜스 장치는 1개만으로 3개 노드를 커버하도록 한다. 

 

 

6. fence 테스트

모든 노드에서 watch pcs status. 수행 후 아래 명령 실행, 모니터링

pcs stonith fence node1.hb

pcs stonith fence node2.hb

pcs stonith fence node3.hb

+ Recent posts