3 minute read

Pacemaker

두 대 이상의 서버 환경에서 서버를 하나로 묶어서 단일 시스템으로 보이게 하는 클러스터링 솔루션
클러스터링은 부하 분산(Load-balancing)과 장애 대응(Fail-over)에 적합한 구조 HA를 유지하기 위해 주로 사용됨

Pacemaker architecture

Alt text

Pacemaker : 클러스터 프로세싱과 노드가 클러스터에 join 되거나 leave 되는 이벤트처리 제공
리소스 이동, 노드 중지, 펜싱(fencing)을 통한 오프라인 강제 전환 등을 제공

Resource Agent : 자원을 관리하기 위해 구성된 요소 자원 관리를 위한 스크립트 시작, 중지, 모니터링 제공

Corosync : 클러스터 운영을 위한 메시징 및 쿼럼 정보를 관리

Pacemaker 내부 컴포넌트

Alt text

  • 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 를 사용
    공유 데이터를 보호하거나 자원 복구를 위해 노드의 전원을 강제로 종료할때 사용되는 컴포넌트

흐름
  1. CIB를 사용하여 클러스터에서 관리하고자 하는 노드와 자원을 모두 정의
  2. PEngeine이 생성된 CIB 정보를 통해 노드들 중에서 마스터를 선택
  3. 선택된 마스터 노드의 CRMd는 메시징 인프라를 통해 다른 노드들의 CRMd와 LRMd에 명령을 전달
  4. Peer 노드들은 LRMd에서 처리한 명려으이 결과를 다시 마스터에 보고, 예상과 다른 결과가 확인될 경우 PEngeine에서 클러스터 상태를 다시 계산
  5. 만약 노드를 차단시켜야 한다면 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

설치 명령어

  1. yum --enablerepo=base install libqb
  2. yum --enablerepo=base install glibc
  3. yum --enablerepo=base install corosynclib
  4. 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

패키지 설치시 순서 및 명령어

  1. rpm -i pacemaker-libs-2.0.0-4.el7.x86_64.rpm
  2. rpm -i pacemaker-cluster-libs-2.0.0-4.el7.x86_64.rpm
  3. rpm -i pacemaker-cli-2.0.0-4.el7.x86_64.rpm
  4. rpm -i pacemaker-2.0.0-4.el7.x86_64.rpm

위 설치가 모두 정상적으로 종료된 후

  1. yum install pcs 명령으로 pcs 설치
  2. 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 주로 사용