반응형
Pacemaker와 Corosync를 사용하여 NGINX의 고가용성(HA) 설정을 구성하는 방법
테스트 환경
호스트 이름 | 서버 아이피 | 도메인 | 운영체제 | 비고 |
VIP | 192.168.0.60 | vip.cluster.local | ||
control1 | 192.168.0.51 | control1.cluster.local | Ubuntu 22.04 LTS | |
node3 | 192.168.0.63 | node3.cluster.local | Ubuntu 22.04 LTS |
NGINX 설치
curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt-get update
sudo apt-get install -y nginx
echo '<h1>webserver 01</h1>' > /usr/share/nginx/html/index.html
echo '<h1>webserver 02</h1>' > /usr/share/nginx/html/index.html
echo '<h1>webserver 03</h1>' > /usr/share/nginx/html/index.html
sudo systemctl restart nginx
curl -fsSL --resolve localhost:80:127.0.0.1 http://localhost
hacluster 사용자와 비밀번호를 설정
echo -e 'hacluster:hacluster' | sudo chpasswd
기존 클러스터 제거
더보기
---
클러스터를 제거하여 모든 리소스를 제거
sudo pcs cluster destroy
Corosync와 Pacemaker 서비스 중지
sudo systemctl stop corosync pacemaker
클러스터 노드 인증
sudo pcs host auth -u hacluster -p hacluster \
192.168.0.121 192.168.0.122 192.168.0.123
클러스터를 설정(노드 지정) - 강제로 설정
sudo pcs cluster setup My_Cluster \
192.168.0.121 192.168.0.122 192.168.0.123 --force
클러스터 시작
sudo pcs cluster start --all
STONITH 비활성화 (노드가 다운될 경우 재부팅 방지)
sudo pcs property set stonith-enabled=false
쿼럼이 없을 경우 무시하도록 설정
sudo pcs property set no-quorum-policy=ignore
클러스터 상태 확인
sudo pcs status
클러스터 중지
sudo pcs cluster stop --all
---
클러스터 상태 확인
sudo pcs status
Cluster name: My_Cluster
Cluster Summary:
* Stack: corosync
* Current DC: 192.168.0.123 (version 2.1.2-ada5c3b36e2) - partition with quorum
* Last updated: Wed Oct 30 16:08:25 2024
* Last change: Wed Oct 30 16:08:05 2024 by root via cibadmin on 192.168.0.121
* 3 nodes configured
* 0 resource instances configured
Node List:
* Online: [ 192.168.0.121 192.168.0.122 192.168.0.123 ]
Full List of Resources:
* No resources
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
NGINX를 클러스터 리소스로 추가
sudo pcs resource agents ocf:heartbeat | grep nginx
nginx
더보기
---
cd /usr/lib/ocf/resource.d/heartbeat
wget -q https://raw.githubusercontent.com/ClusterLabs/resource-agents/master/heartbeat/nginx
chmod +x /usr/lib/ocf/resource.d/heartbeat/nginx
pcs resource agents ocf:heartbeat
$ pcs resource agents ocf:heartbeat
IPaddr2
iscsi
iSCSILogicalUnit
iSCSITarget
LVM-activate
nginx
---
가상 IP 리소스 생성
sudo pcs resource create VirtualIP ocf:heartbeat:IPaddr2 \
ip=192.168.0.120 cidr_netmask=24 op monitor interval=30s
NGINX 리소스 생성
sudo pcs resource create Nginx ocf:heartbeat:nginx \
configfile="/etc/nginx/nginx.conf" op monitor interval=30s
리소스 상태 확인
sudo pcs status resources
* VirtualIP (ocf:heartbeat:IPaddr2): Started 192.168.0.121
* Nginx (ocf:heartbeat:nginx): Started 192.168.0.122
리소스 구성 확인
sudo pcs resource config
Resource: VirtualIP (class=ocf provider=heartbeat type=IPaddr2)
Attributes: cidr_netmask=24 ip=192.168.0.120
Operations: monitor interval=30s (VirtualIP-monitor-interval-30s)
start interval=0s timeout=20s (VirtualIP-start-interval-0s)
stop interval=0s timeout=20s (VirtualIP-stop-interval-0s)
Resource: Nginx (class=ocf provider=heartbeat type=nginx)
Attributes: configfile=/etc/nginx/nginx.conf
Operations: monitor interval=30s (Nginx-monitor-interval-30s)
reload interval=0s timeout=40s (Nginx-reload-interval-0s)
start interval=0s timeout=40s (Nginx-start-interval-0s)
stop interval=0s timeout=60s (Nginx-stop-interval-0s)
리소스 구성 확인
# VirtualIP 리소스의 구성 확인
sudo pcs resource config VirtualIP
# Nginx 리소스의 구성 확인
sudo pcs resource config Nginx
리소스 삭제
# VirtualIP 리소스 삭제
sudo pcs resource delete VirtualIP
# Nginx 리소스 삭제
sudo pcs resource delete Nginx
리소스 시작
# VirtualIP 리소스 시작
sudo pcs resource start VirtualIP
# Nginx 리소스 시작
sudo pcs resource start Nginx
리소스 실패 기록 지우기
# VirtualIP 리소스 정리 (클러스터에서 실패한 리소스를 정리)
sudo pcs resource cleanup VirtualIP
# Nginx 리소스 정리
sudo pcs resource cleanup Nginx
리소스 그룹화
VIP와 NGINX 리소스를 하나의 그룹으로 묶습니다. 그룹으로 묶으면 클러스터가 VIP와 NGINX를 동시에 관리하고 필요 시 함께 페일오버할 수 있습니다.
sudo pcs resource group add Nginx_Group VirtualIP Nginx
Nginx 리소스가 VirtualIP와 함께 위치하도록 강제 설정
sudo pcs constraint colocation add Nginx with VirtualIP INFINITY
제약 조건 확인
sudo pcs constraint
Location Constraints:
Ordering Constraints:
Colocation Constraints:
Nginx with VirtualIP (score:INFINITY)
Ticket Constraints:
$ pcs constraint order VirtualIP then webserver
Adding VirtualIP webserver (kind: Mandatory) (Options: first-action=start then-action=start)
$ pcs status resources
* VirtualIP (ocf:heartbeat:IPaddr2): Started control1.cluster.local
* webserver (ocf:heartbeat:nginx): Started control1.cluster.local
수동으로 리소스 이동
pcs constraint location webserver prefers node3.cluster.local=INFINITY
$ pcs status resources
* VirtualIP (ocf:heartbeat:IPaddr2): Started node3.cluster.local
* webserver (ocf:heartbeat:nginx): Started node3.cluster.local
sudo pcs constraint --full
Location Constraints:
Ordering Constraints:
start VirtualIP then start Nginx (kind:Mandatory) (id:order-VirtualIP-Nginx-mandatory)
Colocation Constraints:
Nginx with VirtualIP (score:INFINITY) (id:colocation-Nginx-VirtualIP-INFINITY)
Ticket Constraints:
728x90
반응형
'리눅스' 카테고리의 다른 글
[리눅스] consul 서비스 등록 - 2 (0) | 2023.02.10 |
---|---|
java(jdk) 설치 및 java 환경 설정 (0) | 2023.02.07 |
우분투에서 Pacemaker와 VIP(Virtual IP)를 구성하여 고가용성 클러스터를 운영하는 방법 (0) | 2023.02.06 |
[리눅스] consul-template 설치(install consul-template) (0) | 2023.02.03 |
유닉스 타임스탬프 간의 변환 방법 (0) | 2023.02.03 |