github twitter email
PCS를 이용한 HA구성
Mar 4, 2017
6 minutes read

pcs: pacemaker/corosync 설정,관리 시스템

pacemaker: 고가용성 클러스터 리소스 관리자 (고장을 인지한 경우 대기장비로 서비스를 넘깁니다.- failover)
corosync: 그룹커뮤니케이션 시스템을 구현하기 위한 HA기능 API 제공 (node status)

pcs를 이용하여 두대의 서버를 하나의 클러스터로 묶어 HA를 구현합니다.
마스터 서버 장애시 스탠바이 장비가 마스터로 승계됩니다.
두대 서버 모두 동일한 데이터를 유지하고 있어야 하기 때문에 이 문서에서는 단순 동기화 방식이 아닌 drbd를 구성 할 예정입니다.

drbd: HA 클러스터를 위해 디자인 된 네트워크 블럭 디바이스

기본 정보

CentOS 7.3 pcs-0.9.152-10 pacemaker-1.1 corosync-2.4

기본 설정

호스트 설정

두서버 모두 적용 해 주세요.

root # cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.3 master
10.0.0.4 standby

방화벽 설정

두서버가 서로 통신이 되어야 합니다.
저는 내부망을 ALL로 열었어요…

DRBD

패키지 설치

DRBD 패키지를 설치해줍니다.

root # cd /usr/local/src
root # wget http://elrepo.reloumirrors.net/elrepo/el7/x86_64/RPMS/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
root # rpm -ivh elrepo-release-7.0-2.el7.elrepo.noarch.rpm
root # yum -y install drbd kmod-drbd84 kernel-devel

DRBD 설정

global 설정 파일에서 18~20줄 주석을 해제합니다.

리소스 파일을 생성합니다

root # vi /etc/drbd.d/storage.res
resource "storage" {
     protocol C;
     startup {
          wfc-timeout       0;      ## Infinite!
          degr-wfc-timeout  120;    ## 2 minutes.
     }
     disk {
        on-io-error detach;
        resync-rate 300M;
     }
    net {
        timeout             60;     #  6 seconds  (unit = 0.1 seconds)
        connect-int         10;     # 10 seconds  (unit = 1 second)
        ping-int            10;     # 10 seconds  (unit = 1 second)
        max-buffers         20000;
        unplug-watermark    20000;
        max-epoch-size      20000;
    }
     # It is valid to move device, disk and meta-disk to the
     # resource level.
    on master {
        device /dev/drbd0;
        disk /dev/sda5;
        address 10.0.0.3:7789;
        meta-disk internal;
    }
    on standby {
        device /dev/drbd0;
        disk /dev/sda5;
        address 10.0.0.3:7789;
        meta-disk internal;
    }
}

DRBD 리소스 생성

root # drbdadm create-md storage
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.

DRBD 구동 및 동기화

실행!

root # systemctl start drbd

데이터 동기화를 합니다

MASTER에서 실행합니다.

root # drbdadm -- --overwrite-data-of-peer primary storage

HA 구성

패키지 설치

두서버 모두 적용 해 주세요.

yum install -y corosync pacemaker pcs resource-agents

pcsd 실행

두서버 모두 적용 해 주세요.

systemctl start pcsd.service
systemctl enable pcsd.service
systemctl enable corosync.service
systemctl enable pacemaker.service

인증 계정 적용

해당 인증 계정 설정을 통하여 한대의 서버에서 클러스터를 생성할 경우 모든 서버에 반영이 됩니다.

root # passwd hacluster
hacluster 사용자의 비밀 번호 변경 중
새  암호 :
root # pcs cluster auth master
Username: hacluster
Password: ********************
root # pcs cluster auth standby
Username: hacluster
Password: ********************

정상적으로 인증되었는지 확인합니다

root # pcs cluster auth master standby
master: Already authorized
standby: Already authorized

클러스터 구성

FileCluster란 이름의 클러스터를 생성합니다. 해당 클러스터엔 master/standby 두대의 서버가 포함됩니다. 데이터 전송은 UDP통신을 사용하도록 설정하였습니다.

root # pcs cluster setup --start --name FileCluster master standby --transport udpu

프로퍼티 설정을 추가로 진행합니다.

STONITH: (Shoot The Head in The Head) 가짜 노드 혹은 의도치 않은 동시 엑세스로 인한 데이터 손상을 보호합니다. no-quorum-policy: 클러스터에 quorum이 없을 때의 수행작업을 설정합니다. resource-stickiness: 서비스 지속력

root # pcs property set stonith-enabled=false
root # pcs property set no-quorum-policy=ignore
root # pcs property set default-resource-stickiness=100

정상적으로 구성되었는지 확인합니다

root # pcs status
Cluster name: FileCluster
Stack: corosync
Current DC: master (version 1.1.15-11.el7_3.2-e174ec8) - partition with quorum
Last updated: Fri Mar  3 14:47:29 2017		Last change: Fri Mar  3 23:27:16 2017 by hacluster via crmd on master
 
2 nodes and 0 resources configured
 
Online: [ master standby ]
 
No resources
 
 
Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

리소스 생성

failover 설정이 포함되도록 리소스를 생성합니다.

우선 리소스 에이전트의 종류는 아래와 같습니다.

Heartbeat Resource Agents

예전에 사용하던 LSB방식의 init 스크립트를 뜻합니다.

LSB Resource Agents

/etc/init.d 아래에 존재하는 스크립트입니다. 기본적으로 OS/배포판에서 제공합니다. 하지만 LSB 스펙을 준수해야 합니다.

LSB 스펙을 준수하여 직접 스크립트를 만들어 사용할 수 있습니다.

OCF Resource Agents

기본적으로 제공하는 LSB 익스텐션입니다. 아래 경로에서 기본 스크립트를 확인 할 수 있습니다. /lib/ocf/resource.d/heartbeat

저는 Apache를 웹서버로 사용 할 예정입니다. 따라서 아래 설정에는 drbd, apache가 각자 ocf,lsb를 이용하여 구동되도록 설정되어있습니다.

CIB(Cluster Information Base) 라고 불리는 Raw xml에 우선 설정을 저장 후 업데이트하는 방식으로 진행합니다.

you want to edit the saved CIB using pcs (pcs -f )

root # pcs cluster cib drbd_cfg
root # pcs -f drbd_cfg resource create Data ocf:linbit:drbd drbd_resource=Storage  op monitor timeout="30" interval="20" role="Slave" op monitor timeout="30" interval="10" role="Master"
root # pcs -f drbd_cfg resource master DataSync Data master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
root # pcs -f drbd_cfg resource create Storage Filesystem device="/dev/drbd0" directory="/data" fstype="xfs"
root # pcs -f drbd_cfg resource create internal_ip ocf💓IPaddr2 ip=10.0.0.5 cidr_netmask=32 op monitor timeout="30" interval="20" role="Slave" op monitor timeout="30" interval="10" role="Master"
root # pcs -f drbd_cfg resource create external_ip ocf💓IPaddr2 ip=1.1.1.5 cidr_netmask=32 op monitor timeout="30" interval="20" role="Slave" op monitor timeout="30" interval="10" role="Master"
root # pcs -f drbd_cfg resource create apache lsb:apache op monitor interval=30s
 
root # pcs -f drbd_cfg resource group add HA-GROUP internal_ip external_ip Storage apache
root # pcs -f drbd_cfg constraint colocation add HA-GROUP DataSync INFINITY with-rsc-role=Master
root # pcs -f drbd_cfg constraint order promote DataSync then start Storage
 
root # pcs cluster cib-push drbd_cfg
CIB updated
 
root # pcs resource create ping_check ocf:pacemaker:ping host_list="10.0.0.1" multiplier="1000" dampen=10s op monitor interval=5s
root # pcs resource clone ping_check globally-unique=false

2개의 아이피를 설정하였기 때문에 ping_check를 하는 리소스를 추가로 설정하였습니다.(주기적으로 게이트웨이에 핑을 날리게 됩니다.)

클러스터 구성 확인

pcs status 명령어를 통해 현재 노드의 상태, 리소스 리스트, 데몬상태를 모두 확인 할 수 있습니다.

root # pcs status
Cluster name: FileCluster
Stack: corosync
Current DC: master (version 1.1.15-11.el7_3.2-e174ec8) - partition with quorum
Last updated: Sat Mar  4 00:05:29 2017		Last change: Fri Mar  3 22:20:13 2017 by root via cibadmin on master
 
2 nodes and 8 resources configured
 
Online: [ master standby ]
 
Full list of resources:
 
 Master/Slave Set: DataSync [Data]
     Masters: [ master ]
     Slaves: [ standby ]
 Resource Group: HA-GROUP
     internal_ip	(ocf:💓IPaddr2):	Started master
     external_ip	(ocf:💓IPaddr2):	Started master
     Storage	(ocf:💓Filesystem):	Started master
     apache	(lsb:apache):	Started master
 Clone Set: ping_check-clone [ping_check]
     Started: [ master standby ]
 
Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

그 외 소소한 팁

PCS 설정 삭제

설정을 잘못할때가 있죠.. 새로운 마음으로 다시 시작할 때 아래와 같이 사용합니다.

root # pcs cluster stop --all
root # pcs cluster destroy --all

PCS cluster standby 설정 (on/off)

장애테스느는 아래와 같이 하시면 됩니다. standby 로 설정하면 해당 노드의 상태가 Online에서 standby로 되며 서비스에서 빠집니다.

root # pcs cluster standby $CLUSTER_NAME
root # pcs cluster unstandby $CLUSTER_NAME

Linux-HA manual pages

영어를 잘하신다면 읽고 전체 번역을 부탁드려도 될까요

PCS APACHE SETTTING

전 lsb로 올렸지만(init.d/apache를 직접만들었어요) 기본적으로 제공하는 OCF를 사용하시는 것 또한 방법입니다.

LINK1
LINK2

pcs resource create apache ocf💓apache \
configfile=/etc/httpd/conf/httpd.conf \
statusurl="http://localhost/server-status" \
op monitor timeout="20s" interval="10"

Logging

아래 로그를 보는건 기본이죠? :-)

  • /var/log/cluster/corosync.log
  • /var/log/pcsd/pcsd.log
  • /var/log/pacemaker.log

crm_mon

Pacemaker 클러스터 리소스 매니저의 한 부분..

pcs status를 여러번 입력하긴 힘들기 때문에 전 사용합니다.

그럼 이만 :-)


Tags: HA pcs

Back to posts