[시스템 환경]

VirtualBox

CentOS 7

192.168.56.102 node01

192.168.56.103 node02

Pacemaker

Corosync

 

가상환경 설정

: [호스트-게스트], [게스트-게스트] 통신 을 위한 설정

 

VirtualBox 네트워크 설정

[어댑터 1] NAT 설정 및 포트 포워딩

 

포트 포워딩 설정

node 1 - ssh port 9001

node 2 - ssh port 9002

 

 

[어댑터 2] 호스트 전용 어댑터

 

● 각 서버 hosts 설정

: 각 서버 노드 ip 를 확인하여 설정해 준다.

 

vi /etc/hosts 아래 내용 추가

192.168.56.102 node01

192.168.56.103 node02

Pacemaker / Corosync 설치

● pacemaker 설치 :::: 모든 호스트

# yum install -y pcs fence-agents-all

 

● pcs 데몬 시작 및 서비스 활성화

# systemctl start pcsd.service

 

● 패스워드 적용

: 패키지 설치 후, 시스템에 hacluster 사용자가 자동으로 생성됩니다. 관리의 편의성을 위해 hacluster 사용자에 대한 동일한 패스워드를 적용합니다.

# passwd hacluster

 

● Pacemaker 설정

: 호스트간 통신을 위해 Firewall에서 클러스터 트래픽을 허용.

TCP : Ports 2224, 3121, 21064

UDP: Ports 5405

 

# firewall-cmd --permanent --add-service=high-availability

# firewall-cmd --add-service=high-availability

# firewall-cmd --reload

 

● 두 노드의 통신을 위한 설정

# pcs cluster auth node01 node02

[패스워드 입력]
Username: hacluster

[입력 후 화면]
node01: Authorized
node02: Authorized

 

● Corosync 구성 동기화

: --name 옵션은 원하는데로 지정. corosync 설정 파일이 생성되고 모든 노드에 배포된다.

설정 파일 위치: /etc/corosync/corosync.conf

# pcs cluster setup --name hacluster node01 node02

[명령 실행 후 화면]
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop pacemaker.service
Redirecting to /bin/systemctl stop corosync.service
Killing any remaining services...
Removing all cluster configuration files...
node01: Succeeded
node02: Succeeded

[참고] To initialize the corosync config file, execute the following pcs command on both nodes, filling in the information in <> with your nodes' information. # pcs cluster setup --force --local --name mycluster

 

● 클러스트 시작하기

: node01에서 다음의 명령을 실행.

# pcs cluster start --all

 

● 부팅 시 pacemaker와 corosync 시작을 위해 두 호스트의 서비스를 활성화.

# systemctl enable corosync.service

# systemctl enable pacemaker.service

 

● 클러스터 상태 확인

# pcs status

[결과]

2 nodes configured
0 resources configured

Online: [ node01 node02 ]

No resources

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

 

● STONITH 비활성 및 Quorum 무시

# pcs property set stonith-enabled=false

# pcs property set no-quorum-policy=ignore

 

● 가상 IP 주소 설정

# pcs resource create Cluster_VIP ocf:heartbeat:IPaddr2 ip=192.168.56.104 cidr_netmask=24 op monitor interval=20s

 

[확인] pcs status

Cluster_VIP (ocf:heartbeat:IPaddr2): Started node01

 

python 테스트 코드 작성

● python 테스트 코드 작성

# mkdir /usr/local/cafe24

# vi /usr/local/cafe24/python_demo_service.py

if __name__ == '__main__':
  import time

  while True:
      print('Hello from the Python Demo Service')
      time.sleep(5)

실행 테스트,

# python /usr/local/cafe24/python_demo_service.py

권한 설정,

# chmod 755 /usr/local/cafe24/python_demo_service.py

 

● 서비스 등록

vi /etc/systemd/system/python_demo_service.service

# systemd unit file for the Python Demo Service


[Unit]

# Human readable name of the unit
Description=Python Demo Service


[Service]

# Command to execute when the service is started
ExecStart=/usr/bin/python /usr/local/cafe24/python_demo_service.py

- 서비스 실행 및 확인

systemctl start python_demo_service

systemctl status python_demo_service

[실행중 상태 확인]
● python_demo_service.service - Cluster Controlled python_demo_service
  Loaded: loaded (/etc/systemd/system/python_demo_service.service; static; vendor preset: disabled)
Drop-In: /run/systemd/system/python_demo_service.service.d
          └─50-pacemaker.conf
  Active: active (running) since 금 2019-09-06 14:04:36 KST; 42min ago
Main PID: 1560 (python)
  CGroup: /system.slice/python_demo_service.service
          └─1560 /usr/bin/python /usr/local/cafe24/python_demo_service.py

 

- 부팅시 서비스 실행되도록 설정,

systemctl enable python_demo_service

 

● 사용할 수 있는 모든 리소스 리스트 출력

: systemd에 등록하면, 해당 서비스를 리소스로서 사용할 수 있게 된다.

(아래 명령어 결과 리스트에 서비스명이 나옴)

# pcs resource list

 

● 리소스 등록

# pcs resource create python_demo_service systemd:python_demo_service

 

● 리소스 등록 확인

# pcs status

 

● Colocation 제약 구성

: 리소스 Cluster_VIP 와 python_demo_service 는 묶음으로 같은 node에서 이루어 지도록 제약을 설정.

# pcs constraint colocation add Cluster_VIP python_demo_service INFINITY

 

[참고] 개별 리소스 수동으로 시작 및 중지 방법
# pcs resource enable [resource_id]
# pcs resource disable [resource_id]
ex. # pcs resource disable python_demo_service

 

테스트

  1. 설정된 가상 IP 설정이 제대로 이루어 지는지 확인.(VIP=192.168.56.104)

    node01 실행 중, secureCRT로 192.168.56.104:22로 접속시 node01로 접속됨. node01 시스템 종료 후 node02 실행 중일때 192.168.56.104:22로 다시 접속시 node02 시스템으로 접속됨.

  2. 서버 장애에 대한 가상 IP와 리소스 전환이 잘 이루어지 지는지 확인.

    2-1. node01에서 실행중인 상태에서, node01에 대한 시스템 종료시 node02로 전환을 pcs status를 통해 확인함.

  3. 장애에 대한 데몬 리소스의 노드 전환이 잘 이루어 지는지 확인.

  4. Colocation 제약 조건 확인.

    4.1. 리소스 Cluster_VIP 와 python_demo_service 가 node02인 곳에서 실행되고 있을때, python_demo_service 리소스만 stop 시켰을 경우, 조금 시간이 지난뒤 다시 start 됨. node01과 node02 끼리 주고받는 heartbeat interval 에 따라 다시 실행되는 시간이 달라지는 것을 추정됨.

  5. node01 실행중, node01를 재부팅 했을때 다시 node01에서 실행됨.

 

유의사항

  1. 문제가 발생하여 노드 전환이 발생했을 때 작업에 영향이 있을지 확인이 필요

 

참고 사이트

● 공식 문서

: 세부 옵션은 공식 문서 참고를 추천

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/high_availability_add-on_reference/index

 

● 가상환경 설정 참고 블로그 https://dbrang.tistory.com/1279

 

● 기본 설치 가이드 참고 블로그 https://m.blog.naver.com/PostView.nhn?blogId=bokmail83&logNo=220569260474&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

 

+ Recent posts