본문 바로가기

리눅스

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

반응형

우분투에서 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
반응형