출처
blog.boxcorea.com/wp/archives/1784
사실 다 완벽하게 이해하고 실습하는 것은 아니다
그래도 최대한 이해해보고 설명해보면서 진행하겠다
일단 해보자..!
1. 사전 환경 구성
호스트 : pcmk1(172.31.0.10), pcmk2(172.31.0.20)
OS : CentOS 7 (AWS EC2)
사용할 가상 IP : 172.31.0.30
호스트간 통신에 필요한 포트 : TCP 2224, 3121, 5403, 21064, 9929 / UDP 5404, 5405, 9929 (보안그룹에서 open)
2. 호스트 등록 (양쪽 다)
양 쪽 호스트에서 vi /etc/hosts
로 각 호스트들을 등록해준다
172.31.0.10 pcmk1
172.31.0.20 pcmk2
172.31.0.30 vip
3. cluster package 설치 / pcs 데몬 시작 (양쪽 다)
yum install -y pacemaker corosync pcs
systemctl start pcsd
systemctl enable pcsd
4. 클러스터 계정 설정 (양쪽 다)
hacluster 계정은 자동으로 생성된거고, 해당 계정의 비밀번호는 양쪽 모두에서 동일하게 설정해줘야 한다
passwd hacluster
[암호 2번 입력]
5. 각 노드에 대한 hacluster 사용자 인증 (한쪽에서만 진행)
pcs cluster auth pcmk1 pcmk2
hacluster
[암호]
각 노드 간 통신이 안되면 실패할 수 있다
위에 적어놓은 통신 포트들을 열고, /etc/hosts 파일도 확인해보자
6. 클러스터 생성/실행 (한쪽만 진행)
pcs cluster setup
명령을 통해 corosync를 구성하고 다른 노드와 동기화한다
pcs cluster start
명령으로 클러스터를 실행시킬 수 있다
pcs cluster setup --name first_cluster pcmk1 pcmk2
pcs cluster start --all
7. 클러스터 확인
# 클러스터 통신 확인
corosync-cfgtool -s
# 멤버쉽과 쿼럼 확인
corosync-cmapctl | egrep -i members
# corosync / 클러스터 상태 확인
pcs status corosync
pcs status
8. STONITH 비활성화 (한쪽만)
클러스터 설정을 변경하기 전엔 crm_verify
명령을 통해 유효성을 확인해주는게 좋다고 한다
crm_verify -LV
이전 글에서도 말했지만, STONITH는 서비스가 중복으로 실행되어 충돌나는것을 방지하기 위해 오류가 발생한 호스트를 죽이는 Fencing 기능이다
cluster를 실행하면 데이터의 무결성을 확보하기 위해 기본으로 STONITH가 활성화되어있다 -> 비활성화를 해주자
pcs property set stonith-enabled=false
pcs property show
9. Active/Passive 클러스터 설정 - 가상IP 생성 (한쪽만)
가상 IP를 리소스로 추가해주자
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=172.31.0.30 cidr_netmask=24 op monitor interval=30s
pcs status
와 ip addr
로 가상 IP가 잘 추가된걸 확인할 수 있다
<ocf:heartbeat:IPaddr2>는 <리소스 표준:리소스 프로바이더:리소스 스크립트 이름> 형태이다
리소스 표준에 대해선 지난 글에서 설명한 적 있다
아무튼 각 필드에 들어갈 수 있는 이름들은 아래 명령들로 확인할 수 있다
pcs resource standards
pcs resource providers
pcs resource agents ocf:heartbeat
이 중 가상 IP를 생성하는 스크립트가 IPaddr2이다
10. Failover Test
먼저 양쪽 호스트에서 pcs status
로 상태를 확인해보자
VirtualIP 리소스가 pcmk1에서 실행되고 있다
pcmk1을 정지시키면서 failover를 확인해보자 (한쪽에서만)
pcs cluster stop pcmk1
pcmk2에서 상태를 확인해보면
리소스가 pcmk2로 넘어왔다
pcs cluster start pcmk1
로 다시 실행해도 리소스는 다시 돌아오지 않는다
11. 클러스터 서비스로 아파치 웹서버 등록 (양쪽 다)
먼저 Apache를 설치해준다
yum install -y httpd
vi /var/www/html/index.html
로 파일을 설정해준다
<h1>Hello I'm pcmk</h1>
별 의미 없이 대충 만들어줬다
vi /etc/httpd/conf.d/status.conf
에 아래 내용을 입력해준다
<Location /server-status>
SetHandler server-status
Require local
</Location>
이제 웹서비스 리소스를 등록해주자 (한쪽만)
pcs resource create WebService ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=1min
12. 리소스 통합 (한쪽만)
pcs status
를 실행해보면
VirtualIP와 WebService가 각각 다른 호스트에서 돌고있다
이 둘을 묶어줄건데, 리소스에 대한 설정은 pcs constraint
를 사용하면 된다
pcs constraint colocation add WebService with VirtualIP INFINITY
INFINITY는 우선순위에 대한 점수를 무한으로 준 것이다
다시 pcs status
를 해보면
둘이 같이 pcmk2에서 돌고있다
13. 리소스 이동 (한쪽만)
만약 두 노드 중 하나에게 더 큰 우선순위를 지정하고 싶으면 constraint location
을 사용하면 된다
pcs constraint location WebService prefers pcmk1=50
pcs constraint
만 실행하면 현재 적용중인 constriant들을 볼 수 있다
pcs constraint --full
을 실행하면 constraint의 id를 확인할 수 있고, 이를 사용해서 remove도 할 수 있다
pcs constraint --full
pcs constraint remove <id>
일단은...끝이다
fencig(문제 생긴 놈 자동으로 죽이는) 기능은 구현되지 않았다
뭐 어디서는 DRBD도 구성한다 SBD도 구성한다 그러는데 아직 정확히 최소로 필요한게 뭔진 모르겠다
SUSE용, SAP용 pacemaker 구성 등등 이것저것 다 해보다보면 잘 알게되지 않을까 싶다
끝
'공부 > HA' 카테고리의 다른 글
[HA] Fencing과 SBD (0) | 2021.04.16 |
---|---|
[HA] HA와 Pacemaker + 관련된 개념들 (0) | 2021.04.11 |
댓글