리눅스

우분투에서 Pacemaker와 VIP(Virtual IP)를 구성하여 고가용성 클러스터를 운영하는 방법

변군이글루 2023. 2. 6. 15:14
반응형

우분투에서 Pacemaker와 Virtual IP(VIP)를 구성하여 고가용성 클러스터를 운영하는 방법

Corosync는 클러스터 통신을 담당하며 Pacemaker는 자원 관리와 클러스터 관리를 수행합니다. PCS는 구성 및 모니터링 도구로서 클러스터 관리를 단순화합니다.

더보기

---

Corosync

  • 클러스터 통신 소프트웨어 : Corosync는 여러 노드 간에 클러스터 구성 정보 및 상태 정보를 안정적으로 교환하기 위한 클러스터 통신 소프트웨어입니다.
  • 확장성과 신뢰성 : Corosync는 클러스터 환경에서 확장성과 신뢰성을 제공하며, 클러스터 간의 안정적인 통신을 가능하게 합니다.
  • 패싱 관리 : Corosync는 클러스터 내에서 데이터 패싱 및 동기화를 처리하여 클러스터 노드 간의 데이터 일관성을 유지합니다.

Pacemaker

  • 고가용성 클러스터 관리 : Pacemaker는 다중 노드 클러스터 환경에서 고가용성 애플리케이션 및 서비스 관리를 제공합니다.
  • 자원 관리 : Pacemaker는 클러스터 내의 자원(예: 가상 IP 주소, 데이터베이스, 웹 서버)를 관리하며, 이러한 자원을 노드 간에 이동하고 시작 또는 중지할 수 있습니다.
  • 축복 및 장애 복구 : Pacemaker는 클러스터 내에서 자원 이동 및 장애 복구 작업을 자동으로 처리하며, 클러스터의 가용성을 유지합니다.
  • 정책 설정 : Pacemaker는 자원 이동과 할당에 대한 정책을 설정할 수 있어서, 특정 노드가 우선적으로 특정 자원을 관리하도록 구성할 수 있습니다.
  • 모니터링 및 이벤트 관리 : Pacemaker는 클러스터의 상태를 지속적으로 모니터링하고, 이벤트 및 경고를 생성하여 관리자에게 알려줍니다.

PCS(Pacemaker Configuration System)

  • 클러스터 구성 관리 : PCS는 Pacemaker 클러스터 및 Corosync를 설정하고 관리하는 데 사용되는 명령행 도구와 웹 기반 그래픽 사용자 인터페이스를 제공합니다. PCS를 사용하면 클러스터 노드를 추가하고 클러스터 구성을 변경할 수 있습니다.
  • 구성 파일 관리 : PCS를 통해 Corosync와 Pacemaker의 구성 파일을 수정하고 관리할 수 있으며, 이를 통해 클러스터 구성을 조정할 수 있습니다.
  • 클러스터 상태 모니터링 : PCS는 클러스터 상태를 모니터링하고 이벤트 및 경고를 생성하여 관리자에게 알립니다.

---

 

출처-https://www.juliosblog.com/content/images/2016/11/clustering-pacemaker.png

1. 필수 패키지 설치

Pacemaker와 Corosync를 설치합니다.

sudo apt-get update
sudo apt-get install -y pacemaker corosync pcs

Corosync 및 Pacemaker 서비스 시작

Corosync와 Pacemaker 서비스를 시작합니다.

sudo systemctl --now enable pacemaker corosync

Corosync 및 Pacemaker 서비스 상태 확인

systemctl status pacemaker
systemctl status corosync

pcsd 서비스 활성화 및 시작

sudo systemctl start pcsd
sudo systemctl enable pcsd

hacluster 계정 확인

$ cat /etc/passwd | grep hacluster
hacluster:x:105:114::/var/lib/pacemaker:/usr/sbin/nologin

hacluster 계정 패스워드 변경

$ sudo passwd hacluster
New password:
Retype new password:
passwd: password updated successfully

호스트 파일(/etc/hosts) 설정

sudo vim /etc/hosts
### MySQL Hosts BEGIN
192.168.56.211 node1 node1.sangchul.kr
192.168.56.212 node2 node2.sangchul.kr
### MySQL Hosts BEGIN

2. 클러스터 설정

Corosync와 Pacemaker를 구성하기 전에 pcs 명령을 사용하여 클러스터 설정을 초기화합니다.

노드 인증

sudo pcs host auth 192.168.56.211 192.168.56.212
$ sudo pcs host auth 192.168.56.211 192.168.56.212
Username: hacluster
Password:
192.168.56.212: Authorized
192.168.56.211: Authorized

/var/lib/pcsd/known-hosts 파일 확인

$ cat /var/lib/pcsd/known-hosts
{
  "format_version": 1,
  "data_version": 1,
  "known_hosts": {
    "192.168.56.211": {
      "dest_list": [
        {
          "addr": "192.168.56.211",
          "port": 2224
        }
      ],
      "token": "8d740413-fe82-4d84-aeed-ecf0a0376be2"
    },
    "192.168.56.212": {
      "dest_list": [
        {
          "addr": "192.168.56.212",
          "port": 2224
        }
      ],
      "token": "1b15e19c-c9d5-44fb-8678-de2840f32ad7"
    }
  }
}

기존 클러스터 제거

sudo pcs cluster destroy

클러스터 설정

클러스터 이름, 노드 이름, 클러스터 리소스, 그룹 등을 설정할 수 있습니다.

sudo pcs cluster setup --name mycluster node1_IP node2_IP

여기서 mycluster는 클러스터 이름, node1_IP 및 node2_IP는 클러스터 노드의 IP 주소입니다.

클러스터 생성

sudo pcs cluster setup mycluster 192.168.56.211 192.168.56.212
$ sudo pcs cluster setup mycluster 192.168.56.211 192.168.56.212
...
Sending 'corosync authkey', 'pacemaker authkey' to '192.168.56.211', '192.168.56.212'
192.168.56.211: successful distribution of the file 'corosync authkey'
192.168.56.211: successful distribution of the file 'pacemaker authkey'
192.168.56.212: successful distribution of the file 'corosync authkey'
192.168.56.212: successful distribution of the file 'pacemaker authkey'
Sending 'corosync.conf' to '192.168.56.211', '192.168.56.212'
192.168.56.211: successful distribution of the file 'corosync.conf'
192.168.56.212: successful distribution of the file 'corosync.conf'
Cluster has been successfully set up.
더보기

---
클러스터 구성

클러스터를 구성하려면 다음 명령을 사용합니다.

pcs cluster setup node1 node2

이 명령은 두 노드에 Pacemaker 클러스터를 생성합니다.

 

클러스터 인증

클러스터 인증을 위해 다음 명령을 사용합니다.

pcs cluster auth node1 node2

이 명령은 두 노드 간에 클러스터 인증을 설정합니다.

 

클러스터 이름 설정

클러스터 이름을 설정하려면 다음 명령을 사용합니다.

pcs cluster name my_cluster

이 명령은 클러스터의 이름을 "my_cluster"로 설정합니다.

---

cat /etc/corosync/corosync.conf
$ cat /etc/corosync/corosync.conf
totem {
    version: 2
    cluster_name: mycluster
    transport: knet
    crypto_cipher: aes256
    crypto_hash: sha256
}

nodelist {
    node {
        ring0_addr: 192.168.56.211
        name: 192.168.56.211
        nodeid: 1
    }

    node {
        ring0_addr: 192.168.56.212
        name: 192.168.56.212
        nodeid: 2
    }
}

quorum {
    provider: corosync_votequorum
    two_node: 1
}

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

3. 클러스터 시작(실행)

Corosync와 Pacemaker 클러스터를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.

sudo pcs cluster start --all
$ sudo pcs cluster start --all
192.168.56.212: Starting Cluster...
192.168.56.211: Starting Cluster...
sudo pcs cluster enable --all
$ sudo pcs cluster enable --all
192.168.56.211: Cluster Enabled
192.168.56.212: Cluster Enabled

클러스터 상태 확인

클러스터 상태를 확인하려면 다음 명령을 사용합니다.

sudo pcs status

이 명령은 클러스터의 상태를 출력합니다.

$ sudo pcs status
Cluster name: mycluster

WARNINGS:
No stonith devices and stonith-enabled is not false

Cluster Summary:
  * Stack: corosync
  * Current DC: 192.168.56.211 (version 2.1.2-ada5c3b36e2) - partition with quorum
  * Last updated: Thu Nov  2 15:29:38 2023
  * Last change:  Thu Nov  2 15:29:18 2023 by hacluster via crmd on 192.168.56.211
  * 2 nodes configured
  * 0 resource instances configured

Node List:
  * Online: [ 192.168.56.211 192.168.56.212 ]

Full List of Resources:
  * No resources

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

Corosync 클러스터의 현재 구성 정보를 표시

클러스터 노드, 링 설정, 인터페이스, 환경 변수 및 다른 구성 세부 정보를 확인할 수 있습니다.

corosync-cfgtool -s
$ corosync-cfgtool -s
Local node ID 1, transport knet
LINK ID 0 udp
        addr    = 192.168.56.211
        status:
                nodeid:          1:     localhost
                nodeid:          2:     connected

Active/Passive 클러스터 생성

sudo pcs property set stonith-enabled=false

4. VIP(Virtual IP) 리소스 생성

VIP 리소스를 생성하여 고가용성을 제공합니다. 이렇게 하려면 VIP 리소스를 먼저 만들어야 합니다.

sudo pcs resource create myVIP ocf:heartbeat:IPaddr2 ip=192.168.56.60 cidr_netmask=24 op monitor interval=30s

이 명령은 VIP 리소스를 생성하고 IP 주소를 192.168.56.60으로 설정합니다.

sudo pcs status
$ sudo pcs status
Cluster name: mycluster
Cluster Summary:
  * Stack: corosync
  * Current DC: 192.168.56.211 (version 2.1.2-ada5c3b36e2) - partition with quorum
  * Last updated: Thu Nov  2 15:47:06 2023
  * Last change:  Thu Nov  2 15:42:47 2023 by root via cibadmin on 192.168.56.211
  * 2 nodes configured
  * 1 resource instance configured

Node List:
  * Online: [ 192.168.56.211 192.168.56.212 ]

Full List of Resources:
  * myVIP       (ocf:heartbeat:IPaddr2):         Started 192.168.56.211

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

5. VIP 리소스 제약 조건 추가

VIP 리소스를 특정 노드에 바인딩하는 제약 조건을 추가합니다.

sudo pcs constraint location myVIP prefers node1=INFINITY

이렇게 하면 VIP 리소스가 node1에 배치되도록 설정됩니다.

더보기

---

Virtual IP(VIP)를 설정하려면 다음 명령을 사용합니다.

pcs resource create vip ipaddr=192.168.1.100 netmask=255.255.255.0

이 명령은 IP 주소 192.168.1.100의 Virtual IP를 생성합니다.

 

VIP에 대한 서비스 연결

VIP에 대한 서비스를 연결하려면 다음 명령을 사용합니다.

pcs resource create webserver service=http port=80

이 명령은 HTTP 서비스 포트 80을 사용하는 "webserver"라는 서비스를 생성합니다.

 

VIP 및 서비스 연결 설정

VIP와 서비스 연결을 설정하려면 다음 명령을 사용합니다.

pcs resource bind vip webserver

이 명령은 VIP를 "webserver" 서비스에 연결합니다.

---

6. 클러스터 리소스 모니터링

클러스터 리소스가 올바르게 작동하는지 확인하기 위해 crm_mon 명령을 사용하여 클러스터 상태를 모니터링합니다.

7. 고가용성 테스트

고가용성을 테스트하기 위해 노드 중 하나를 끄거나 장애 시뮬레이션을 수행하여 VIP가 다른 노드로 자동 이전되는지 확인합니다.

8. VIP 자동 이전 및 장애 복구

Pacemaker는 VIP의 장애 복구 및 자동 이전을 관리합니다. 장애 복구가 성공하면 VIP가 다른 노드로 이동하여 고가용성을 유지합니다.

 

이제 Pacemaker와 VIP를 사용하여 Ubuntu에서 고가용성 클러스터를 설정하고 운영할 수 있게 될 것입니다. 필요에 따라 더 복잡한 구성과 리소스 설정을 추가할 수 있으며, 클러스터 운영과 모니터링을 향상시키는 추가 구성을 수행할 수 있습니다.

 

클러스터 유지보수

클러스터를 유지보수하려면 다음 사항을 수행합니다.

  • 클러스터 상태를 주기적으로 확인합니다.
  • 클러스터 노드에 대한 패키지 업데이트를 수행하기 전에 클러스터를 중지합니다.

예제

다음은 두 대의 우분투 서버에서 Pacemaker와 Virtual IP(VIP)를 사용하여 고가용성 클러스터를 구성하는 예입니다.

# 패키지 설치
sudo apt update
sudo apt install pacemaker corosync pcs

# 클러스터 구성
pcs cluster setup node1 node2

# 클러스터 인증
pcs cluster auth node1 node2

# 클러스터 이름 설정
pcs cluster name my_cluster

# 클러스터 상태 확인
pcs status

# Virtual IP(VIP) 설정
pcs resource create vip ipaddr=192.168.1.100 netmask=255.255.255.0

# VIP에 대한 서비스 연결
pcs resource create webserver service=http port=80

# VIP 및 서비스 연결 설정
pcs resource bind vip webserver

# 클러스터 테스트
sudo systemctl stop node1
ping 192.168.1.100
sudo systemctl start node1

 

이 예에서는 두 노드에 Pacemaker 클러스터를 생성하고 VIP를 생성한 다음 VIP를 "webserver" 서비스에 연결합니다. 테스트를 위해 하나의 노드를 중지한 다음 다시 시작합니다. VIP는 여전히 응답하므로 클러스터가 제대로 작동하는 것입니다.

 

참고 사항

  • 클러스터 구성 및 유지보수에 대한 자세한 내용은 Pacemaker 설명서를 참조하십시오.
  • 클러스터 구성을 위해 다음 명령을 사용할 수도 있습니다.
# 클러스터 구성
pcs cluster setup --join node1 node2

# 클러스터 인증
pcs cluster auth --join node1 node2

# 클러스터 이름 설정
pcs cluster name --join my_cluster

# VIP 설정
pcs resource create vip ipaddr=192.168.1.100 netmask=255.255.255.0

# VIP에 대한 서비스 연결
pcs resource create webserver service=http port=80

# VIP 및 서비스 연결 설정
pcs resource bind vip webserver

이 명령은 동일한 작업을 수행하지만 "node1" 노드에서만 실행됩니다.

 

참고URL

- Pacemaker 1.1(Configuration Explained) : Pacemaker-1.1-Pacemaker_Explained-en-US.pdf

- Julio's Blog : High Availability and Pacemaker 101!

 

728x90
반응형