[시스템 환경]
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
테스트
-
설정된 가상 IP 설정이 제대로 이루어 지는지 확인.(VIP=192.168.56.104)
node01 실행 중, secureCRT로 192.168.56.104:22로 접속시 node01로 접속됨. node01 시스템 종료 후 node02 실행 중일때 192.168.56.104:22로 다시 접속시 node02 시스템으로 접속됨.
-
서버 장애에 대한 가상 IP와 리소스 전환이 잘 이루어지 지는지 확인.
2-1. node01에서 실행중인 상태에서, node01에 대한 시스템 종료시 node02로 전환을 pcs status를 통해 확인함.
-
장애에 대한 데몬 리소스의 노드 전환이 잘 이루어 지는지 확인.
-
Colocation 제약 조건 확인.
4.1. 리소스 Cluster_VIP 와 python_demo_service 가 node02인 곳에서 실행되고 있을때, python_demo_service 리소스만 stop 시켰을 경우, 조금 시간이 지난뒤 다시 start 됨. node01과 node02 끼리 주고받는 heartbeat interval 에 따라 다시 실행되는 시간이 달라지는 것을 추정됨.
-
node01 실행중, node01를 재부팅 했을때 다시 node01에서 실행됨.
유의사항
-
문제가 발생하여 노드 전환이 발생했을 때 작업에 영향이 있을지 확인이 필요
참고 사이트
● 공식 문서
: 세부 옵션은 공식 문서 참고를 추천
● 가상환경 설정 참고 블로그 https://dbrang.tistory.com/1279
● 기본 설치 가이드 참고 블로그 https://m.blog.naver.com/PostView.nhn?blogId=bokmail83&logNo=220569260474&proxyReferer=https%3A%2F%2Fwww.google.com%2F
'규린이 IT 개발 > 규린이 필살 정리' 카테고리의 다른 글
리눅스 Redis 설치 방법 (0) | 2021.11.06 |
---|---|
[Spring] 시큐리티 정리 및 세팅 (0) | 2019.07.19 |
[postgresql] 확장 모듈 설치 (0) | 2019.07.05 |
[리눅스] node.js 설치 (0) | 2019.07.03 |
[리눅스] apache - django 연동 (0) | 2019.07.02 |