* 리소스란?

어떠한 서비스는 하나 이상의 리소스로 이루어진다. 리소스는 IP주소, 파일시스템, httpd같은 서비스 등 여러가지가 있다. 사용자에게 서비스를 제공하는데 필요한 가장 작은 구성요소들을 의미한다. 클러스터에서는 이러한 리소스를 직접 실행하거나 중지시키고, 상태를 모니터링한다. 클러스터가 전담하여 이러한 역할을 수행한다.

 

 

* 리소스를 실행하는 방식

리소스 실행 방식은 총 3가지가 있다. (LSB, OCF, systemd) 클러스터 관리자는 클러스터 소프트웨어가 어떤 시스템 서비스를 지원하는지 이해하는 것이 중요하다. 서비스 구성 시 최대한의 구성 용이성을 가진 ocf 스크립트를 통해 클러스터가직접 서비스를 지원하는 것이 이상적이다. ocf로 다이렉트 서비스가 안되는 경우, systemd나 lsb 를 쓸 수 있다.

 

LSB (Linux Standard Base)

/etc/init.d/ 에 들어가는 init 스크립트와 호환되는 LSB 이다. 간단하게 말하면 스크립트로 서비스를 만드는 것이다.

 

OCF (Open CLuster Framework)

클러스터 리소스에 대한 추가 제어를 제공하기 위해 추가 입력 매개변수를 처리할 수 있는 확장된 LSB init 스크립트인 오픈 클러스터 프레임워크 호환 스크립트이다. /user/lib/ocf/resource.d/provider 에 파일들이 있다. 클러스터에서 여러가지 리소스들을 쉽게 사용하도록 구성한 것이다. 일반적으로 이 형식의 리소스를 가장 많이 사용한다.

 

systemd

레드햇8에서 서비스를 관리하고 정의하기 위한 표준인 systemd 유닛 파일이다. 이것으로도 리소스를 만들 수 있다.

 

 

* 자주 사용하는 리소스 종류

filesystem

파일시스템을 마운트할 때 사용한다. 로컬 파일시스템이 될 수 있고, iscsi나 fc 또는 nfs, smb 등이 가능하다.

 

ipaddr2

ipaddr2는 유동아이피를 할당한다. 참고로 ipaddr 도 있었는데, 이전에 쓰던아이피 할당 방법이다. 레드햇8에서는, ipaddr은 심볼릭 링크로 ipaddr2에 연결되어 있다. 

 

apache

apache httpd 서비스를 시작하는 리소스이다. 따로 설정하지 않으면, /etc/httpd의 구성을 사용한다.

 

mysql

이 리소스는 mysql 데이터베이스를 컨트롤한다. stand-alone 운영 / a clone set with external replication / full primary/secondary setup   3가지 방식으로 데이터베이스를 구성할 수 있다.

 

 

 

 

 

* 리소스 에이전트

Redhat High Availability 애드온은 클러스터 리소스를 위한 광범위한 지원을 제공한다. 클러스터 리소스들은 agents라고 부르는 스크립트에 의해 관리된다.  agents 들은 클러스터 리소스에 대하여 start/stop/monitor 3가지를 하는데 필요하다.

 

사용가능한 에이전트 리스트 보기 (pcs resource list)

 

리소스 에이전트 상세정보 보기 (pcs resource describe 에이전트명 --full)

모든 resource agent들은 튜닝할 수 있는 파라미터들을 제공한다. 이 명령은 해당 클러스터 리소스의 설명과 튜닝할 수 있는 파라미터의 정보를 보여준다.

 

 

 

 

* 리소스 그룹

일반적으로 실제 클라이언트가 사용하는 서비스는 하나의 리소스로 이루어지지 않는다. 이러한 서비스 단위로 묶어놓은 리소스들을 리소스 그룹이라고 한다. 예를 들어 일반적인 웹 서비스는 IP 주소 리소스, Apache 리소스, 웹 서버의 DocumentRoot 폴더에 대한 공유 파일 시스템 리소스로 구성됩니다. 

 

모든 웹 서비스 리소스가 동일한 클러스터 노드에서 실행되어야 제대로 작동하는 서비스를 제공할 수 있습니다. 이러한 리소스를 함께 묶는 편리한 방법은 동일한 리소스 그룹에 추가하는 것입니다. 동일한 리소스 그룹에 있는 모든 서비스는 리소스 그룹에 추가되는 순서대로 시작되고 역순으로 중지됩니다. 클러스터 노드에 장애가 발생하면 클러스터는 전체 리소스 그룹을 다른 노드로 마이그레이션하고 새 노드에서 리소스를 시작합니다.

 

예를들어 웹 서비스를 하려고 하는데, 3노드 클러스터에서 ip는 노드1에, 파일시스템은 노드2에, httpd 서비스는 노드3에 있다면 서비스가 성립되지 않는다. 리소스 그룹은 이러한 용도에 따른 리소스들을 한데 모아 한번에 한 노드에서 start/stop 하게 한다. 또한 그룹 안에서는 그룹 안의리소스 순서대로 start/stop 하게 한다.

 

또한 어떤 경우에는, 리소스 그룹안에 들어간 리소스들끼리 디펜던시가 있는 경우가 있다. 예를 들어 특정 IP 주소에서 수신 대기하도록 구성된 웹 서버는 노드에서 IP 주소를 구성할 때까지 시작할 수 없다. 즉 VIP리소스가 먼저 시작되어야 웹서버 리소스가 시작하게 된다. 일반적으로 리소스는 그룹에 추가되는 순서대로 시작되고, 중지될때는 역순으로 중지된다. 이러한 순서를 컨트롤하기 위해 리소스 생성/추가시 --before resourceid / --after resourceid  를 사용하여 특정 리소스의 전에 또는 후에 리소스를 등록할 수 있다. (리소스 생성 및 추가는 아래 참고)

 

 

 

* 리소스 생성 / 수정 / 삭제

 

리소스 생성하기

pcs resource create 리소스명 resource_provider resource_parameter --group=그룹명 

 

리소스는 생성된 순서대로 배치되며, 그룹을 명시하면 그룹에 순서대로 들어간다. 이 순서는 리소스 시작/종료에 아주 중요한 부분으로, 운영에 큰 영향을 준다. 따라서 순서를 잘 확인해야 한다. 또한 리소스 그룹에 속하지 않는 리소스를 생성하려면 그룹 옵션은 생략하면 된다.

 

또한 리소스를 생성할 때는 해당 리소스에 대한 액세스 권한이나, 기본적으로 필요한 것들이 있어야 한다. 예를들어, apache 리소스를 올리려면 httpd 패키지가 설치되어 있어야 하고 방화벽이 해제되어야 한다.

 

예시 : filesystem 리소스 생성하기

myfs라는 이름을 가진 리소스이며, 디스크 장치는 /dev/sdb1, 마운트 포인트는 /var/www/html 이고 파일시스템 형식은 xfs 이다.

 

리소스 수정하기

pcs resource update 

 

이미 생성된 클러스터 리소스의 값을 수정하거나 옵션을 변경할 수 있다. 아래 예시를 참고한다.

예시 : 이미 생성된 myfs 리소스의 장치를 /dev/sda1로 변경

 

 

리소스 삭제하기

pcs resource delete 

 

더이상 필요하지 않은 경우 리소스 및 리소스 그룹 구성을 제거할 수 있다. 리소스명 또는 리소스그룹명을 명시하여 삭제할 수 있다.

예시 : 리소스 myfs 삭제

 

 

 

 

* 리소스 동작

리소스는 시작할때, 중지할때, 모니터링할때 3가지의 동작이 있으며, 이 동작들에 대한 주기(interval)과 타임아웃(timeout)이 있다. 주기는 모니터링에만 사용하며, 해당 주기마다 모니터링을 실행한다. 또한 타임아웃은 3가지 동작 모두 적용되며, 해당 타임아웃 시간까지 시작/중지/모니터링이 성공하지 않는경우 문제라고 간주하고 재시작, fence 등을 수행하게 된다.

 

이러한 주기와 타임아웃값들은 튜닝이 가능하며, 리소스 생성시 명시하여 설정할 수 있다. 형식은 아래 예시와 같다. webserver 라는 리소스를 monitor interval 20 초, timeout을 30초로 주어 생성할 때, 아래처럼 한다.

 

리소스 동작 값을 넣을 때는 op 로 시작하며, op monitor/start/stop interval= timeout= 이런식으로 명시한다. 다른 예시로, op monitor interval=20s timeout=30s start timeout=60s stop timeout=120s 이런식으로 사용할 수 있다.

 

리소스 동작값들의 정의는 다음과 같다.

 

name / name=값

수행할 액션을 의미한다. 값은 start, stop, monitor 3가지이다.

 

interval / interval=값 (op start / stop / monitor 액션의 interval)

모니터링 체크 사이의 기간을 정의한다. 

기본값은 resource agent 로부터 가져온다. 만약 resource agent가 디폴트값을 제공하지 않는다면, 디폴트값은 60s 로 설정된다.

start, stop은 따로 세팅이 없는 것으로 보인다.

 

timeout / timeout=값 (op start / stop / monitor 액션의 timeout)

해당 operation이 timeout 시간에 닿기 전에 완료되지 않는 경우, 해당 operation fail되었다고 선언하기 전까지 기다리는 시간의 총합을 정의한다.

start, stop, interval 모두 세팅이 있다.

 

on-fail / on-fail=액션 (op start / stop / monitor 액션이 fail발생 시 수행)

이 액션은 operation이 fail되면 수행한다.

- ignore : 해당 operation 의 fail은 모두 무시한다.

- block : 모든 operation을 중지시킨다.  이 옵션은 클러스터에 펜싱이 구성되지 않은경우, stop operation이 fail되었을때의 디폴트 액션이다.

- stop : 클러스터 내에서 작동하고 있는 리소스를 중지시킨다. 이것은 start , monitor operation의 fail시 디폴트 액션이다.

- restart : 리소스를 stop시키고 start 시킨다.

- fence : 리소스가 fail된 노드를 펜스시킨다. 이 값은 클러스터에 펜싱이 구성된 경우, stop operation 이 fail 되었을 떄의 디폴트 액션이다.

- standby : 리소스가 실행 중이던 클러스터 노드에서 모든 리소스를 다른 노드로 이동한다.

 

예시 :  op start timeout=120s monitor interval=30s timeout=15s on-fail=fence

           시작 타임아웃을 120초로 하고, 모니터 인터벌을 30초로 하고, 모니터가 fail되면 fence 한다.

 

만약 리소스가 start 하는데 fail 된 경우, 그때는 리소스의 failcount가 INFINITY 로 세팅되어 해당 노드에서 리소스가 영원히 실행되지 않도록 막는다. 존재하는 failcount값은 pcs resource failcount show 로 확인이 가능하다. fail의 원인을 트러블슈팅하기위해, [pcs resource debug-start 리소스명] 을 사용하면 리소스 시작 시도의 오류 메시지를 표시하여 해당 부분을살펴보고 문제를 복구할 수 있다. 리소스가 복구되면, [pcs resource cleanup 리소스명] 을 사용하여 해당 리소스의Failcount를 리셋시켜야 해당 노드에서 해당 리소스가 다시 시작할 수 있다.

 

 

 

* 리소스 동작값의 추가 / 제거

리소스 동작값 추가

리소스의 operation은 pcs resource op add 명령으로 추가할 수 있다. 예를들어, 현재 있는 webserver 리소스에다가 모니터링 인터벌 10초, 모니터링 타임아웃 15 초, 그리고 모니터링이 fail되면 펜스시키는 옵션을 주는 경우, 아래처럼 한다.

 

리소스 동작값의 제거

pcs resource op remove 명령으로 제거할 수 있다. 아래처럼 webserver 리소스에서 op 값을 제거한다.

 

 

 

 

 

* 리소스 그룹 생성 예시 : 웹 서비스

클러스터된 웹 서비스는 3가지의 리소스를 요구한다.

 

1. Virtual IP : 퍼블릭 네트워크를 통해 아파치 웹서버에 의해 서비스되는 컨텐츠에 접속할 수 있도록 함. 각 노드들은 정해진 ip를 가지지만, 이 ip를 서비스 운영에 사용하면 노드가 죽었을 때 접속하지 못하는 문제가 발생한다. 이를 막기위해 노드 간 이동하는 대표 Virtual IP가 필요하다.

 

2. 파일시스템 : 아파치 웹서버에 의해 저장된 데이터들. (이론적으로는 모든 노드에 모든 웹 콘텐츠를 보유하는 것도 가능하지만 콘텐츠를 동기화하는 메커니즘이 필요합니다.)

 

3. apache 리소스 : httpd 서비스를 제공

 

 

1. Virtual IP

첫번째로 VIP가 필요하다. 아래와 같이 VIP를 생성한다. 당연히 해당 IP는 각 노드들의 네트워크 장치가 접근 가능한 대역으로 설정해야 한다.

 

2. 공유 스토리지

 

# 중요 

클러스터 노드에서 SELinux를 활성화한 경우, 클러스터 관리자는 마운트된 파일 시스템의 콘텐츠를 관련 데몬에서 사용할 수 있는지 확인해야 합니다. 또한 block device 의 경우 적절한 SELinux 컨텍스트를 설정해야 하며, NFS의 경우 관련 SELinux booleans, (예: httpd_use_nfs=1)을 설정해야 합니다.

 

3.웹 서비스

홈페이지 파일을 서비스하는 apache (httpd) 리소스를 생성해야 한다. 이를 위해 httpd 패키지 설치가 필요하며 방화벽 해제도 필요하다. 또한 /var/www/html에 index.html 파일도 필요하다.

위와 같이 생성 후, curl 172.25.99.80 명령을 수행하면 index.html 파일을 읽어올 수 있다.

 

 

 

* 리소스 그룹에 리소스 추가/제거

 

리소스를 리소스 그룹에 추가하기

현재 존재하는 리소스는 리소스 그룹에 추가될 수 있다. 클러스터 관리자는 pcs resource group add groupname resourcename 명령으로 추가할 수 있다. 만약 해당 리소스가 이미 다른 그룹의 멤버라면, 위 명령어를 쳤을 때 현재 그룹에서 빠지고 명령어에 명시된 그룹에 추가되게 된다. 명시한 그룹이 없는 그룹이라면, 자동으로 그룹을 만들게 된다.

 

예시 : myresource 라는 리소스를 mygroup 에다 추가하려면 아래처럼 한다.

 

 

리소스를 리소스 그룹에서 제거하기

pcs resource group remove groupname resourcename 명령으로 리소스를 리소스 그룹에서 제거할 수 있다. 해당 리소스는 여전히 클러스터에 존재하지만, 해당 리소스 그룹에서는 빠지게 된다. 만약 리소스 그룹에 하나만 남은 리소스를 제거하면, 해당 리소스 그룹도 없어지게 된다.

 

예시 : myresource 라는 리소스를 mygroup 리소스그룹에서 제거하려면 아래처럼 한다.

 

 

 

* 기타 리소스 확인 명령어

 

pcs resource status : 구성된 리소스와 리소스 그룹에 대한  개요, 리소스 상태를 볼 수 있다.

 

pcs resource config : 구성된 리소스의 상세 속성과 operation, 정보 확인

 

 

 

* References 

pcs(8) man page 

 

For more information, refer to the Configuring cluster resources chapter in the Configuring and managing high availability clusters guide at

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_and_managing_high_availability_clusters/index#assembly_configuring-cluster-resources-configuring-and-managing-high-availability-clusters

 

OCF Resource Agents 

https://github.com/ClusterLabs/resource-agents

 

The OCF Resource Agent Developer's Guide 

https://github.com/ClusterLabs/resource-agents/blob/master/doc/dev-guides/ra-dev-guide.asc

 

 

For more information, refer to the Resource monitoring operations chapter in the Configuring and managing high availability clusters guide at 

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_and_managing_high_availability_clusters/index#assembly_resource-monitoring-operations-configuring-and-managing-high-availability-clusters

+ Recent posts