Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
2 tasks
Tracked by #283
gigs4014 opened this issue Apr 13, 2023 · 3 comments
Open
2 tasks
Tracked by #283

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

gigs4014 opened this issue Apr 13, 2023 · 3 comments
Assignees
Milestone

Comments

@gigs4014
Copy link

gigs4014 commented Apr 13, 2023

Pacemaker를 이용한 fencing 구성

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

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

  • 가상머신 이중화 후 pacemaker를 이용한 VIP 구성
  • VBMC 사용법 확인
@gigs4014 gigs4014 added this to the Diplo milestone Apr 13, 2023
@stardom3645
Copy link

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

image

@stardom3645
Copy link

stardom3645 commented Apr 18, 2023

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

구성 환경

  • OS
    • Host: CentOS 8
    • VM: Rokcy 9
  • 네트워크
    • Host: 10.10.1.1
    • VM1(lilo-ha1): 10.10.254.101
    • VM1(lilo-hb1): 10.10.254.102
    • VM2(lilo-ha2): 10.10.254.103
    • VM2(lilo-hb2): 10.10.254.104
    • VIP: 10.10.254.199

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 실행]

  • lilo-ha1, lilo-ha2를 nodelist에 추가 합니다.
vi /etc/corosync/corosync.conf
totem {
    version: 2
    cluster_name: hacluster
    transport: knet
    crypto_cipher: aes256
    crypto_hash: sha256
    cluster_uuid: a6fec185982340f18ee9252caf64362b
}

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
Copy link

stardom3645 commented Apr 20, 2023

fence 테스트

  • fencing 정책 확인
pcs property --all | grep stonith-action

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
    

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants