우분투에서 Pacemaker와 Corosync를 사용하여 3대의 서버로 구성된 고가용성(HA) 클러스터를 설정하는 방법
Pacemaker와 Corosync을 사용하여 HA (고가용성) 클러스터를 구성하는 것은 복잡한 프로세스일 수 있습니다. Pacemaker를 사용하여 VIP(가상 IP)와 노드 간 HA 클러스터를 설정하는 간략한 개요를 제공합니다.
테스트 환경
호스트 이름 | 서버 아이피 주소 | 도메인 이름 | 운영체제 버전 | 비고 |
VIP | 192.168.0.120 | vip.cluster.local | ||
server1 | 192.168.0.121 | server1.cluster.local | Ubuntu 22.04.3 LTS | |
server2 | 192.168.0.122 | server2.cluster.local | Ubuntu 22.04.3 LTS | |
server3 | 192.168.0.123 | server3.cluster.local | Ubuntu 22.04.3 LTS |
시간 동기화
호스트 파일 설정
cat <<EOF | sudo tee -a /etc/hosts
# HA Cluster
192.168.0.120 vip.cluster.local vip
192.168.0.121 server1.cluster.local server1
192.168.0.122 server2.cluster.local server2
192.168.0.123 server3.cluster.local server3
EOF
1. Pacemaker와 Corosync 설치
모든 서버에서 다음 명령어를 실행하여 Pacemaker와 Corosync를 설치합니다.
sudo apt update
sudo apt install -y pacemaker corosync
pacemakerd --version
corosync -v
2. Coresync 설정
hacluster 계정의 비밀번호 생성
---
계정 : hacluster, 비밀번호 : hacluster
echo -e 'hacluster:hacluster' | chpasswd
---
authkey 파일 생성
- Corosync가 클러스터 노드 간의 통신을 인증하는 데 사용됩니다.
sudo corosync-keygen
$ sudo corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 2048 bits for key from /dev/urandom.
Writing corosync key to /etc/corosync/authkey.
sudo chown root:root /etc/corosync/authkey
sudo chmod 400 /etc/corosync/authkey
$ ls -l /etc/corosync/authkey
-r-------- 1 root root 256 Oct 29 11:21 /etc/corosync/authkey
인증 키 복사
- 클러스터의 모든 노드에 authkey 파일을 복사해야 합니다.
scp /etc/corosync/authkey root@192.168.0.122:/etc/corosync/authkey
scp /etc/corosync/authkey root@192.168.0.123:/etc/corosync/authkey
Corosync 설정 파일 수정
- Corosync의 설정 파일을 수정하여 클러스터 노드를 정의합니다.
sudo vim /etc/corosync/corosync.conf
---
cat /etc/corosync/corosync.conf
# Please read the corosync.conf.5 manual page
system {
# This is required to use transport=knet in an unprivileged
# environment, such as a container. See man page for details.
allow_knet_handle_fallback: yes
}
totem {
version: 2
# Corosync itself works without a cluster name, but DLM needs one.
# The cluster name is also written into the VG metadata of newly
# created shared LVM volume groups, if lvmlockd uses DLM locking.
cluster_name: debian
# crypto_cipher and crypto_hash: Used for mutual node authentication.
# If you choose to enable this, then do remember to create a shared
# secret with "corosync-keygen".
# enabling crypto_cipher, requires also enabling of crypto_hash.
# crypto works only with knet transport
crypto_cipher: none
crypto_hash: none
}
logging {
# Log the source file and line where messages are being
# generated. When in doubt, leave off. Potentially useful for
# debugging.
fileline: off
# Log to standard error. When in doubt, set to yes. Useful when
# running in the foreground (when invoking "corosync -f")
to_stderr: yes
# Log to a log file. When set to "no", the "logfile" option
# must not be set.
to_logfile: yes
logfile: /var/log/corosync/corosync.log
# Log to the system log daemon. When in doubt, set to yes.
to_syslog: yes
# Log debug messages (very verbose). When in doubt, leave off.
debug: off
# Log messages with time stamps. When in doubt, set to hires (or on)
#timestamp: hires
logger_subsys {
subsys: QUORUM
debug: off
}
}
quorum {
# Enable and configure quorum subsystem (default: off)
# see also corosync.conf.5 and votequorum.5
provider: corosync_votequorum
}
nodelist {
# Change/uncomment/add node sections to match cluster configuration
node {
# Hostname of the node.
# name: node1
# Cluster membership node identifier
nodeid: 1
# Address of first link
ring0_addr: 127.0.0.1
# When knet transport is used it's possible to define up to 8 links
#ring1_addr: 192.168.1.1
}
# ...
}
---
cat <<EOF | sudo tee /etc/corosync/corosync.conf
totem {
version: 2
secauth: on
cluster_name: mycluster
transport: knet
interface {
ringnumber: 0
bindnetaddr: 192.168.0.0
mcastport: 5405
}
}
nodelist {
node {
ring0_addr: 192.168.0.121
nodeid: 1
}
node {
ring0_addr: 192.168.0.122
nodeid: 2
}
node {
ring0_addr: 192.168.0.123
nodeid: 3
}
}
quorum {
provider: corosync_votequorum
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
}
EOF
VIP 리소스 삭제
---
리소스 중지
sudo crm resource stop vip
리소스 상태 확인
sudo crm status
$ sudo crm status
Cluster Summary:
* Stack: corosync
* Current DC: server2 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Tue Oct 29 12:36:23 2024
* Last change: Tue Oct 29 12:36:19 2024 by root via cibadmin on server1
* 3 nodes configured
* 1 resource instance configured (1 DISABLED)
Node List:
* Online: [ server1 server2 server3 ]
Full List of Resources:
* vip (ocf:heartbeat:IPaddr2): Stopped (disabled)
리소스 삭제
sudo crm configure delete vip
---
Corosync 및 Pacemaker 서비스 시작
- Corosync와 Pacemaker 서비스를 활성화하고 시작합니다.
sudo systemctl --now enable corosync
sudo systemctl --now enable pacemaker
Corosync와 Pacemaker 서비스 재시작
sudo systemctl restart corosync
sudo systemctl restart pacemaker
Corosync와 Pacemaker 서비스 상태 확인
sudo systemctl status corosync
sudo systemctl status pacemaker
클러스터 상태 확인
sudo crm status
$ sudo crm status
Cluster Summary:
* Stack: corosync
* Current DC: server2 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Tue Oct 29 13:08:07 2024
* Last change: Tue Oct 29 13:08:06 2024 by root via cibadmin on server1
* 3 nodes configured
* 0 resource instances configured
Node List:
* Online: [ server1 server2 server3 ]
Full List of Resources:
* No resources
Virtual IP (VIP) 리소스 추가
클러스터에 VIP 리소스를 추가하여 장애 발생 시 VIP가 다른 서버로 이동할 수 있도록 합니다.
sudo crm configure primitive vip IPaddr2 \
params ip=192.168.0.120 cidr_netmask=24 \
op monitor interval=30s
WARNING: (unpack_config) warning: Blind faith: not fencing unseen nodes
클러스터 상태 확인
- 클러스터 상태를 확인하여 리소스가 정상 작동하는지 확인합니다.
sudo crm status
Cluster Summary:
* Stack: corosync
* Current DC: server2 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Tue Oct 29 14:13:15 2024
* Last change: Tue Oct 29 14:12:43 2024 by root via cibadmin on server1
* 3 nodes configured
* 1 resource instance configured
Node List:
* Online: [ server1 server2 server3 ]
Full List of Resources:
* vip (ocf:heartbeat:IPaddr2): Started server1
VIP 리소스 세부 정보 확인
sudo crm configure show
node 1: server1
node 2: server2
node 3: server3
primitive vip IPaddr2 \
params ip=192.168.0.120 cidr_netmask=24 \
op monitor interval=30s
property cib-bootstrap-options: \
have-watchdog=false \
dc-version=2.1.2-ada5c3b36e2 \
cluster-infrastructure=corosync \
cluster-name=debian \
stonith-enabled=false
페일오버 테스트
클러스터는 해당 노드가 비정상적으로 종료되었다고 판단하고 다른 노드로 VIP를 이동(페일오버)하게 됩니다.
현재 리소스 상태 확인
sudo crm status
Cluster Summary:
* Stack: corosync
* Current DC: server2 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Tue Oct 29 14:49:52 2024
* Last change: Tue Oct 29 14:12:43 2024 by root via cibadmin on server1
* 3 nodes configured
* 1 resource instance configured
Node List:
* Online: [ server1 server2 server3 ]
Full List of Resources:
* vip (ocf:heartbeat:IPaddr2): Started server1
서비스 중지로 페일오버 유도
sudo systemctl stop corosync pacemaker
현재 리소스 상태 확인
sudo crm status
Cluster Summary:
* Stack: corosync
* Current DC: server2 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Tue Oct 29 14:50:42 2024
* Last change: Tue Oct 29 14:12:43 2024 by root via cibadmin on server1
* 3 nodes configured
* 1 resource instance configured
Node List:
* Online: [ server2 server3 ]
* OFFLINE: [ server1 ]
Full List of Resources:
* vip (ocf:heartbeat:IPaddr2): Started server2
서비스 재시작
sudo systemctl restart corosync pacemaker
수동 절체
특정 리소스를 다른 노드로 이동시킵니다. 이 경우 페일오버 상황을 강제로 유도하지 않고 리소스를 원하는 노드로 이동할 수 있습니다.
현재 리소스 상태 확인
sudo crm status
Cluster Summary:
* Stack: corosync
* Current DC: server2 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Tue Oct 29 14:51:13 2024
* Last change: Tue Oct 29 14:12:43 2024 by root via cibadmin on server1
* 3 nodes configured
* 1 resource instance configured
Node List:
* Online: [ server1 server2 server3 ]
Full List of Resources:
* vip (ocf:heartbeat:IPaddr2): Started server2
crm 명령으로 리소스 이동
sudo crm resource move vip server1
INFO: Move constraint created for vip to server1
리소스 상태 확인
sudo crm status
Cluster Summary:
* Stack: corosync
* Current DC: server2 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Tue Oct 29 14:52:35 2024
* Last change: Tue Oct 29 14:52:14 2024 by root via crm_resource on server1
* 3 nodes configured
* 1 resource instance configured
Node List:
* Online: [ server1 server2 server3 ]
Full List of Resources:
* vip (ocf:heartbeat:IPaddr2): Started server1
참고URL
- Pacemaker 1.1(Configuration Explained) : Pacemaker-1.1-Pacemaker_Explained-en-US.pdf
'리눅스' 카테고리의 다른 글
[리눅스] java(jdk) 설치 및 java 환경 설정 (0) | 2023.02.07 |
---|---|
고가용성 클러스터를 구성하여 VIP(Virtual IP)를 사용하는 방법 (0) | 2023.02.07 |
sudo 명령어 (0) | 2023.02.06 |
date 명령어 (0) | 2023.02.03 |
[draft] 유닉스 타임스탬프 간의 변환 방법 (0) | 2023.02.03 |