Pacemaker
Pacemaker
두 대 이상의 서버 환경에서 서버를 하나로 묶어서 단일 시스템으로 보이게 하는 클러스터링 솔루션
클러스터링은 부하 분산(Load-balancing)과 장애 대응(Fail-over)에 적합한 구조 HA를 유지하기 위해 주로 사용됨
Pacemaker architecture
Pacemaker : 클러스터 프로세싱과 노드가 클러스터에 join 되거나 leave 되는 이벤트처리 제공
리소스 이동, 노드 중지, 펜싱(fencing)을 통한 오프라인 강제 전환 등을 제공
Resource Agent : 자원을 관리하기 위해 구성된 요소 자원 관리를 위한 스크립트 시작, 중지, 모니터링 제공
Corosync : 클러스터 운영을 위한 메시징 및 쿼럼 정보를 관리
Pacemaker 내부 컴포넌트
-
CIB (Cluster Information Base)
XML을 이용하여 클러스터 구성 정보와 리소스들의 현재 상태를 관리 -
CRMd (Cluster Resource Management daemon)
클러스터링 된 노드들에서 동작하는 컴포넌트
상호 다른노드(peer) 간의 CRMd와 통신하여 마스터(DC : Designated Controller)로 선택된 CRMd에서 의사 결정을 중앙집중화함
선택된 CRMd에 장애가 발생하면 새로운 CRMd가 마스터로 결정됨 -
LRMd (Local Resource Management daemon)
로컬의 자원을 관리하는 컴포넌트
CRMd로 부터 PEngine의 지시 사항을 전달 받아 필요한 순서로 자원을 동작시킴 -
PEngeine (Policy Engine)
클러스터 내부의 노드간 이상적인 상태르 ㄹ달성하기 위해 클러스터 노드들과 자원들의 이벤트를 계산하는 정책 엔진 -
Fencing daemon
STONITHd 를 사용
공유 데이터를 보호하거나 자원 복구를 위해 노드의 전원을 강제로 종료할때 사용되는 컴포넌트
흐름
- CIB를 사용하여 클러스터에서 관리하고자 하는 노드와 자원을 모두 정의
- PEngeine이 생성된 CIB 정보를 통해 노드들 중에서 마스터를 선택
- 선택된 마스터 노드의 CRMd는 메시징 인프라를 통해 다른 노드들의 CRMd와 LRMd에 명령을 전달
- Peer 노드들은 LRMd에서 처리한 명려으이 결과를 다시 마스터에 보고, 예상과 다른 결과가 확인될 경우 PEngeine에서 클러스터 상태를 다시 계산
- 만약 노드를 차단시켜야 한다면 STONITHd에 상태를 체크하여 노드를 종료 시킴
설치 방법
패키지 설치
CBS에 업로드 되어있는 Pacemaker 2.0 기준
클러스터로 구성될 모든 컴퓨터에 설치해야 함
패키지 이름 | 버전 |
---|---|
libqb | 1.0.1-9.el7 |
glibc | 2.17-317.el7 |
corosynclib | 2.4.5-7.el7 |
resource-agents | 4.1.1-61.el7 |
fence-agents-all | 4.2.1-41.el7 |
pcs | 0.9.165-6.el7 |
설치 명령어
yum --enablerepo=base install libqb
yum --enablerepo=base install glibc
yum --enablerepo=base install corosynclib
yum --enablerepo=base install resource-agents
CBS에 업로드 되어있는 Pacemaker 2.0.0-4 다운로드 링크 다운로드에 사용할 명령어
wget https://cbs.centos.org/kojifiles/packages/pacemaker/2.0.0/4.el7/x86_64/pacemaker-2.0.0-4.el7.x86_64.rpm
wget https://cbs.centos.org/kojifiles/packages/pacemaker/2.0.0/4.el7/x86_64/pacemaker-cli-2.0.0-4.el7.x86_64.rpm
wget https://cbs.centos.org/kojifiles/packages/pacemaker/2.0.0/4.el7/x86_64/pacemaker-cluster-libs-2.0.0-4.el7.x86_64.rpm
wget https://cbs.centos.org/kojifiles/packages/pacemaker/2.0.0/4.el7/x86_64/pacemaker-libs-2.0.0-4.el7.x86_64.rpm
패키지 설치시 순서 및 명령어
rpm -i pacemaker-libs-2.0.0-4.el7.x86_64.rpm
rpm -i pacemaker-cluster-libs-2.0.0-4.el7.x86_64.rpm
rpm -i pacemaker-cli-2.0.0-4.el7.x86_64.rpm
rpm -i pacemaker-2.0.0-4.el7.x86_64.rpm
위 설치가 모두 정상적으로 종료된 후
yum install pcs
명령으로 pcs 설치yum --enablerepo=base install fence-agents-all
펜싱 에이전트 패키지 설치
리소스 에이전트
Pacemaker에서 어떤 대상을 모니터링 할 수 있도록 작성해놓은 스크립트
보통 쉘 스크립트로 작성되어있고 Perl같은 다른 스크립트 언어를 통해서도 작성이 가능하다고 함
pcs resource create
명령을 사용하여 생성
이 리소스 에이전트가 모니터링 하고 있던 리소스가 맛이 가면 리소스 펜싱이 일어나 다른 노드로 Fail-over되게 되는데 이때 행걸리거나 뭔가 이상해지면 노드 펜싱(STONITH, Shoot The Other Node In The Head)이 발생하게 됨
여러가지 상태가 있는데 Started
상태일 경우 정상 Starting
은 시작 시도중인 상태 Failed
는 리소스 에이전트 실행에 실패해 재시도중인 상태 Stopped
는 어떤 노드에서도 이 리소스 에이전트를 실행 시킬수 없어 실행이 정지된 상태 보통 Failed
에서 몇번 시도하고 안되면 Stopped
가 됨
Clone
리소스 에이전트 하나로 클러스터 내의 여러 노드를 한번에 감시할 수 있는 갓 기능
pcs resource clone 생성되어있는_리소스_ID
로 해당 리소스 에이전트를 클론 상태로 만듦
따로 클론 ID를 지정해주지 않았다면 클론한 리소스의 이름에 -clone
이란 단어가 뒤에 붙어서 생성됨
Master / Slave
클론 기능의 조금 더 특수한 기능인데 Multi-State Resource
라고 부르기도 함
pcs resource master ...
로 Master/Slave 구성 가능
일단 클론은 클론인데 모든 노드가 아닌 특정 몇몇 노드에서만 돌리는게 가능함
당연히 Master로 지정된 노드들에서만 해당 리소스 에이전트가 돌아가는데 이 Master가 되는 과정을 Promote
라고 함
Slave들은 놀고 있다가 Master였던 노드에서 오류가 나면 나머지 Slave중 하나로 Fail-over됨 이 과정을 Demote
라고 함
제약 조건 넣을때 Master 일때, Slave 일때 이런거 조건을 걸 수 있음
다만 이 기능은 2.1 버전부터는 지원하지 않음 링크 이거 103페이지 보면 나와있음
실제로 사라지는건지 이름만 바뀌는건지 실제로 조금 달라지는건지는 잘 모름 ㅎㅎ
모든 리소스 에이전트가 Master/Slave를 지원하는건 아니고 지원하는 몇몇 리소스 에이전트가 있음 찾아보고 써야됨
Constraint
제약조건
어떤 리소스 에이전트는 어디 노드에서만 돌아야 하고 어떤 리소스 에이전트는 다른 리소스 에이전트랑 꼭 세트로 다녀야 하고 그런거 지정 가능
- colocation - 어떤 리소스 에이전트와 같이 돌아야 할 때 사용
- location - 어떤 노드에서 리소스 에이전트가 실행 될 것인지
- order - 리소스 에이전트간에 실행되는 순서를 만듦
보통 이렇게 3개 쓰는데 Ticket이라는 것도 있긴함.. 근데 어따가 쓰는지 안써봐서 모름 ㅎㅎ
나중에 써봐야 할듯
pcs constraint 위에_설명한_4개
보통 이렇게 씀
STONITH
위에서 잠깐 나왔는데 말 그대로 다른 노드의 머리에 샷건 한방 갈기는거 ㅎ
이름이 장난스러워 보이기는 한데 데이터 무결성을 지키기 위해 매우 중요한 요소임
pcs stonith 펜싱_디바이스 ...
보통 이렇게 사용함
스토니스 디바이스라고 안하고 펜싱 디바이스(Fencing device)라고 함
보통 fence_ipmilan
이라는 펜싱 디바이스를 주로 사용하고 VM일 경우에는 fence_xvm
주로 사용