ablecloud-team / ablestack-cloud

Apache Cloudstack
Apache License 2.0
1 stars 12 forks source link

pacemaker 를 이용항 가상 머신 Fencing 구성 #285

Open gigs4014 opened 1 year ago

gigs4014 commented 1 year ago

Pacemaker를 이용한 fencing 구성

해당 기능 구성을 위해서 리눅스 환경에서는 pacemaker를 이용한 VIP 이중화를 구성진행 fencing agent 는 vBMC를 이용하여 구성

해당 구성을 우선 수동으로 구성하여 구성 방법을 확인 후 설계 필요

stardom3645 commented 1 year ago

VBMC와 Fencing Agent를 활용한 HA Cluster 구성 및 순서

image

stardom3645 commented 1 year ago

Linux 환경에서의 VBMC와 Pacemaker를 이용한 가상 머신 Fencing 구성 방법

구성 환경

Pacemaker 클러스터 구성

방화벽 해제

==== [VM1, VM2 실행]

※ vbmc 통신용 포트 프로토콜은 UDP입니다.

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-service=high-availability
firewall-cmd --add-service=high-availability
firewall-cmd --permanent --zone=public --add-port=6230-6231/udp
firewall-cmd --reload

pacemaker 패키지 설치

==== [VM1, VM2 실행]

dnf --enablerepo=highavailability -y install pacemaker pcs fence-agents-ipmilan

서비스 시작 및 등록

※ pacemaker, corosync 서비스는 fencing loop현상 방지를 위해 enable 하지 않습니다.

systemctl start pcsd

클러스터 계정 존재여부 확인

cat /etc/passwd |grep hacluster
passwd hacluster

hosts 파일 변경

vi /etc/hosts
####Default IP####
10.10.254.101  lilo-ha1
10.10.254.103 lilo-ha2

####Pacemaker Hearbeat IP####
10.10.254.102 lilo-hb1
10.10.253.104 lilo-hb2

Pacemaker 클러스터 구성 및 시작

==== [VM1 실행]

pcs host auth lilo-hb1 lilo-hb2 -u hacluster -p Ablecloud1!
pcs cluster setup hacluster --start lilo-hb1 lilo-hb2

corosync 파일 변경

==== [VM1, VM2 실행]

nodelist { node { ring0_addr: lilo-ha1 ring1_addr: lilo-hb1 name: lilo-hb1 nodeid: 1 }

node {
    ring0_addr: lilo-ha2
    ring1_addr: lilo-hb2
    name: lilo-hb2
    nodeid: 2
}

}

quorum { provider: corosync_votequorum two_node: 1 wait_for_all: 1 }

logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes timestamp: on }


==== [VM1, VM2 실행]

systemctl start pacemaker


### VBMC 구성 (virtual Baseboard management controller)
==== [Host 실행]
#### vbmc 패키지 설치

pip3 install virtualbmc


==== 방화벽 해제

firewall-cmd --permanent --zone=public --add-port=6230-6231/udp firewall-cmd --reload


#### vbmc 시작

vbmcd


#### vbmc 등록

vbmc add {가상머신 Domain Name} --port {vbmc와 fence_ipmilan 통신 포트} --username {사용자 이름} --password {비밀번호}

vbmc add vm1 --port 6230 --username ablecloud --password Ablecloud1! vbmc add vm2 --port 6231 --username ablecloud --password Ablecloud1!


#### vbmc 시작

vbmc start vm1 vbmc start vm2


#### vbmc 리스트 확인

vbmc list


### pcs stonith 구성
==== [VM1 실행]
#### pcs stonith 생성

delay 옵션은 Fence Death 서로 번갈아가며 재부팅시키는 현상 방지합니다.

pcs stonith create {fence 이름} {fence agent} delay=10 ip={Host IP} ipport={vbmc와 fence_ipmilan 통신 포트} lanplus=1 username={사용자 이름} password={비밀번호} pcmk_host_list={클러스터 Node 이름}

예) pcs stonith create fence-node1 fence_ipmilan delay=10 ip=10.10.1.1 ipport=6230 lanplus=1 username=ablecloud password=Ablecloud1! pcmk_host_list=lilo-hb1 pcs stonith create fence-node2 fence_ipmilan ip=10.10.1.1 ipport=6231 lanplus=1 username=ablecloud password=Ablecloud1! pcmk_host_list=lilo-hb2


#### 조건 제약 (서로 다른 서버에서 fence 될 수 있게 조건을 제약)

pcs constraint location fence-node1 avoids lilo-hb1 pcs constraint location fence-node2 avoids lilo-hb2


#### fence-node1 및 fence-node2에 대한 우선순위 설정

pcs constraint location fence-node1 prefers lilo-hb1=100 pcs constraint location fence-node2 prefers lilo-hb2=100


#### 장애노드 강제 종료 설정 타임아웃값 설정 (다른 노드를 강제로 종료시키는 메커니즘)

pcs property set stonith-timeout=900


### vip 생성

pcs resource create vip ipaddr2 ip=10.10.254.199 cidr_netmask=16 nic=enp7s0 op monitor interval=10

stardom3645 commented 1 year ago

fence 테스트

VM2 Fencing 하기

==== [VM1 실행]

# vip를 lilo-hb2로 이동시킵니다.
pcs resource move vip lilo-hb2
# lilo-hb2를 fencing 시킵니다. (poweroff됩니다.)
pcs stonith fence lilo-hb2 --off

VM1 Fencing 하기

==== [VM2 실행]

vip를 lilo-hb1로 이동시킵니다.

pcs resource move vip lilo-hb1

lilo-hb1를 fencing 시킵니다. (reboot됩니다.)

pcs stonith fence lilo-hb1

FailBack(계획되지 않은 FailOver 후)

==== [장애발생되지 않은 VM에서 실행]

  1. fencing 리소스 사용 정지 (fencing loop 방지)

    pcs stonith disable fence-node1
    pcs stonith disable fence-node2
  2. stonith 비활성

    pcs property set stonith-enabled=false
  3. cleanup 작업

    pcs resource cleanup
    pcs stonith history cleanup
  4. 장애 발생 VM 재기동

==== [장애 발생 VM에서 실행]

  1. pacemaker 재시작

    systemctl restart pacemaker
  2. stonith 활성 pcs cluster 및 node가 정상적으로 "ONLINE" 으로 상태 변경된 후

    pcs property set maintenance-mode=true

    만약 pcs resource가 "unmanaged" 상태일 경우 유지보수 모드를 해제합니다.

    pcs property unset maintenance-mode
  3. cleanup 작업

    pcs resource cleanup
    pcs stonith history cleanup
  4. pcs 설정 값 확인

    pcs property config --all