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를 사용하시는 것 또한 방법입니다.
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
를 여러번 입력하긴 힘들기 때문에 전 사용합니다.
그럼 이만 :-)