피드 구독

오늘날과 같은 환경에서는 운영 중단이 거의 없을 정도로 최소화하여 고객에게 지속적인 서비스를 제공하는 능력이 매우 중요합니다. Red Hat Enterprise Linux(RHEL) High Availability Add-On은 프로덕션 시스템의 신뢰성, 확장성, 가용성을 개선하여 이러한 목표를 달성하도록 지원합니다. 고가용성(HA) 클러스터는 단일 장애 지점을 제거하고 노드가 작동하지 않는 경우 클러스터 노드 간 서비스를 페일오버하여 이를 수행합니다.

이 글에서는 ha_cluster RHEL 시스템 역할을 사용하여, 액티브/패시브 모드에서 공유 스토리지가 있는 Apache HTTP 서버를 실행하는 HA 클러스터 구성 방법을 보여드리겠습니다.

RHEL 시스템 역할은 일관된 워크플로우를 제공하고 수동 태스크 실행을 간소화하는 데 도움이 되도록 RHEL에 포함된 Ansible 역할 및 모듈의 컬렉션입니다. RHEL HA 클러스터링에 대한 자세한 내용은 고가용성 클러스터 구성 및 관리 도큐멘테이션을 참조하세요.

환경 개요

예시 환경에는 controlnode라는 제어 노드 시스템과 두 개의 관리형 노드 rhel8-node1, rhel8-node2가 있으며 모두 RHEL 8.6을 실행합니다. 두 관리형 노드 모두 호스트 이름이 apc-switch인 APC 전원 스위치를 통해 전원이 공급됩니다.

rhel8-node1rhel8-node2 노드로 구성된 rhel8-cluster라는 클러스터를 생성하려고 합니다. 클러스터는 LVM(논리 볼륨 관리) 논리 볼륨에 마운트된 ext4 파일 시스템의 페이지를 제공하는 유동 IP 주소를 사용하여 액티브/패시브 모드에서 Apache HTTP 서버를 실행합니다. 펜싱은 apc-switch에서 제공합니다.

두 클러스터 노드 모두 LVM 논리 볼륨에 마운트된 ext4 파일 시스템을 사용하여 공유 스토리지에 연결됩니다. Apache HTTP 서버가 두 노드에 모두 설치되고 구성되었습니다. Pacemaker 클러스터에서 ext4 파일 시스템으로 LVM 볼륨 구성고가용성 클러스터 구성 및 관리 문서의 Apache HTTP 서버 구성 장을 참조하세요.

3개 서버 모두에 ansible이라는 이름으로 Ansible 서비스 계정을 이미 설정했습니다. controlnode의 ansible 계정이 각 노드에 로그인할 수 있도록 SSH 키 인증을 설정했습니다. 또한 각 노드에서 sudo를 통해 root 계정에 액세스할 수 있도록 ansible 서비스 계정이 구성되었습니다. 또한 controlnode에 rhel-system-roles 및 ansible 패키지를 설치했습니다. 이러한 태스크에 대한 자세한 내용은 RHEL 시스템 역할 소개 게시글을 참조하세요.

인벤토리 파일 및 역할 변수 정의

controlnode 시스템에서 첫 번째 단계는 새 디렉터리 구조를 생성하는 것입니다.

[ansible@controlnode ~]$ mkdir -p ha_cluster/group_vars

이러한 디렉터리는 다음과 같이 사용됩니다.

  • ha_cluster 디렉터리에는 플레이북과 인벤토리 파일이 포함됩니다.
  • ha_cluster/group_vars 파일에는 각 Ansible 인벤토리 그룹의 호스트에 적용되는 인벤토리 그룹의 변수 파일이 포함됩니다.

ha_cluster 시스템 역할에서 구성할 호스트를 나열하고 그룹화할 Ansible 인벤토리 파일을 정의해야 합니다. 다음 콘텐츠로 ha_cluster/inventory.yml에 인벤토리 파일을 생성하겠습니다.

---
all:
  children:
    rhel8_cluster:
      hosts:
        rhel8-node1:
        rhel8-node2:

인벤토리는 rhel8_cluster라는 인벤토리 그룹을 정의하고 두 개의 관리형 노드를 이 그룹에 할당합니다.

다음으로, ha_cluster 시스템 역할 실행 시 이 역할의 동작을 제어하는 역할 변수를 정의하겠습니다. ha_cluster 역할에 대한 README.md 파일은 /usr/share/doc/rhel-system-roles/ha_cluster/README.md에서 사용할 수 있으며 역할, 사용 가능한 역할 변수 목록 및 사용 방법을 포함합니다.

ha_cluster 역할에 대해 정의해야 하는 변수 중 하나는 ha_cluster_hacluster_password 변수입니다. 이는 hacluster 사용자 암호를 정의합니다. 일반 텍스트로 저장되지 않도록 Ansible Vault를 사용하여 해당 값을 암호화하겠습니다.

[ansible@controlnode ~]$ ansible-vault encrypt_string 'your-hacluster-password' --name ha_cluster_hacluster_password
New Vault password:
Confirm New Vault password:
ha_cluster_hacluster_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256 376135336466646132313064373931393634313566323739363365616439316130653539656265373663636632383930323230343731666164373766353161630a303434316333316264343736336537626632633735363933303934373666626263373962393333316461616136396165326339626639663437626338343530360a39366664336634663237333039383631326263326431373266616130626333303462386634333430666333336166653932663535376538656466383762343065
Encryption successful

your-hacluster-password를 원하는 암호로 바꿉니다. 커맨드를 실행하면 플레이북이 실행될 때 변수 암호를 해독하는 데 사용할 수 있는 Vault 암호를 요청합니다. Vault 암호를 입력하고 재입력한 암호가 같다고 확인되면 암호화된 변수가 출력에 표시됩니다. 변수는 다음 단계에서 생성되는 변수 파일에 배치됩니다.

이제 다음 내용으로 ha_cluster/group_vars/rhel8_cluster.yml에 파일을 생성하여 rhel8_cluster 인벤토리 그룹에 나열된 클러스터 노드에 대한 변수를 정의하는 파일을 생성하겠습니다

.

---
ha_cluster_cluster_name: rhel8-cluster
ha_cluster_hacluster_password: !vault |
       $ANSIBLE_VAULT;1.1;AES256
       3761353364666461323130643739313936343135663237393633656164393161306535
       39656265373663636632383930323230343731666164373766353161630a3034343163
       3331626434373633653762663263373536393330393437366662626337396239333331
       6461616136396165326339626639663437626338343530360a39366664336634663237
       3330393836313262633264313732666161306263333034623866343334306663333361
       66653932663535376538656466383762343065
ha_cluster_fence_agent_packages:
  - fence-agents-apc-snmp
ha_cluster_resource_primitives:
  - id: myapc
    agent: stonith:fence_apc_snmp
    instance_attrs:
      - attrs:
          - name: ipaddr
            value: apc-switch
          - name: pcmk_host_map
            value: rhel8-node1:1;rhel8-node2:2
          - name: login
            value: apc
          - name: passwd
            value: apc
  - id: my_lvm
    agent: ocf:heartbeat:LVM-activate
    instance_attrs:
      - attrs:
          - name: vgname
            value: my_vg
          - name: vg_access_mode
            value: system_id
  - id: my_fs
    agent: ocf:heartbeat:Filesystem
    instance_attrs:
      - attrs:
          - name: device
            value: /dev/my_vg/my_lv
          - name: directory
            value: /var/www
          - name: fstype
            value: ext4
  - id: VirtualIP
    agent: ocf:heartbeat:IPaddr2
    instance_attrs:
      - attrs:
          - name: ip
            value: 198.51.100.3
          - name: cidr_netmask
            value: 24
  - id: Website
    agent: ocf:heartbeat:apache
    instance_attrs:
      - attrs:
          - name: configfile
            value: /etc/httpd/conf/httpd.conf
          - name: statusurl
            value: http://127.0.0.1/server-status
ha_cluster_resource_groups:
  - id: apachegroup
    resource_ids:
      - my_lvm
      - my_fs
      - VirtualIP
      - Website

그러면 ha_cluster 역할이 노드에 rhel8-cluster라는 클러스터를 생성합니다.

클러스터에 정의된 stonith:fence_apc_snmp 유형의 펜스 기기 myapc1개가 있습니다. 기기는 각각 로그인과 암호에 apcapc를 사용하여 apc-switch IP 주소에서 액세스할 수 있습니다. 클러스터 노드는 이 기기를 통해 전원이 공급됩니다. rhel8-node1은 소켓 1에 연결되고, rhel8-node2는 소켓 2에 연결됩니다. 다른 펜스 기기가 사용되지 않으므로 ha_cluster_fence_agent_packages 변수를 지정했습니다. 이렇게 하면 기본값이 재정의되므로 다른 펜스 에이전트가 설치되지 않습니다.

4개의 리소스가 클러스터에서 실행됩니다.

  • LVM 볼륨 그룹 my_vgocf:heartbeat:LVM-activate 유형의 my_lvm 리소스에 의해 활성화됩니다.
  • ext4 파일 시스템이 ocf:heartbeat:Filesystem 유형의 my_fs 리소스에 의해 공유 스토리지 기기 /dev/my_vg/my_lv로부터 /var/www로 마운트됩니다.
  • HTTP 서버의 유동 IP 주소 198.51.100.3/24ocf:heartbeat:IPaddr2 유형의 VirtualIP 리소스에서 관리합니다.
  • HTTP 서버는 ocf:heartbeat:apache 유형의 Website 리소스로 표시되며, 구성 파일은 /etc/httpd/conf/httpd.conf에 저장되고 모니터링을 위한 상태 페이지는 http://127.0.0.1/server-status에서 사용할 수 있습니다.

모든 리소스는 apachegroup 그룹에 배치되어 단일 노드에서 실행되고 지정된 순서(my_lvm, my_fs, VirtualIP, Website)로 시작됩니다.

플레이북 생성

다음 단계는 ha_cluster/ha_cluster.yml에서 다음 콘텐츠를 사용하여 플레이북 파일을 생성하는 것입니다.

---
- name: Deploy a cluster
  hosts: rhel8_cluster
  roles:
    - rhel-system-roles.ha_cluster

이 플레이북은 rhel8_cluster 인벤토리 그룹에 정의된 모든 시스템에 대해 ha_cluster 시스템 역할을 호출합니다.

플레이북 실행

이제 모든 것이 준비되었으므로 플레이북을 실행할 수 있습니다. 이 데모에서는 RHEL 제어 노드를 사용하고 있으며 커맨드라인에서 플레이북을 실행합니다. cd 커맨드를 사용하여 ha_cluster 디렉터리로 이동한 다음 ansible-playbook 커맨드를 사용하여 플레이북을 실행하겠습니다.

[ansible@controlnode ~]$ cd ha_cluster/
[ansible@controlnode ~]$ ansible-playbook -b -i inventory.yml --ask-vault-pass ha_cluster.yml

ha_cluster.yml 플레이북을 실행하고, 루트로 실행하고(-b 플래그), inventory.yml 파일을 Ansible 인벤토리(-i 플래그)로 사용하고 ha_cluster_hacluster_password 변수(--ask-vault-pass 플래그)를 해독하려면 vault 암호를 제공하라는 메시지가 표시되어야 합니다.

플레이북이 완료되면 실패한 태스크는 없는지 확인해야 합니다.

Screenshot of a Linux terminal showing no failed tasks

구성 검증

클러스터가 설정되어 리소스를 실행 중인지 확인하기 위해 rhel8-node1에 로그인하여 다음과 같이 클러스터 상태를 표시합니다.

Screenshot of a linux terminal displaying the cluster status of rhel8-node1

동일한 출력을 표시하는 rhel8-node2에서도 확인합니다.

그런 다음 웹 브라우저를 열고 IP 198.51.100.3에 연결하여 웹사이트에 액세스할 수 있는지 확인합니다.

페일오버를 테스트하기 위해 rhel8-node1에서 네트워크 케이블을 가져옵니다. 잠시 후 클러스터에서 페일오버를 수행하고 rhel8-node1를 펜싱합니다. rhel8-node2에 로그인하고 클러스터 상태를 표시합니다. 모든 리소스가 rhel8-node1에서 rhel8-node2로 마이그레이션되었음을 보여줍니다. 또한 웹 브라우저에서 웹사이트를 다시 로드하여 여전히 액세스 가능한지 확인합니다.

Screenshot of a linux terminal displaying the cluster status of rhel8-node2

rhel8-node1을 네트워크에 다시 연결하고 클러스터에 다시 조인(join)하도록 다시 한 번 재부팅합니다.

결론

ha_cluster RHEL 시스템 역할은 다양한 워크로드를 실행하는 RHEL HA 클러스터를 빠르고 일관되게 구성하는 데 도움이 될 수 있습니다. 이 글에서는 역할을 사용하여 액티브/패시브 모드의 공유 스토리지에서 웹사이트를 실행하는 Apache HTTP 서버를 구성하는 방법을 다루었습니다.

Red Hat은 RHEL 환경의 다른 중요한 측면을 자동화하는 데 도움이 될 수 있는 다양한 RHEL 시스템 역할을 제공합니다. 추가 역할은 이 사용 가능한 RHEL 시스템 역할 목록에서 확인할 수 있습니다. 지금 바로 더 효율적이고 일관되며 자동화된 방식으로 RHEL 서버를 관리해보세요.

Red Hat Ansible Automation Platform에 대해 자세한 정보가 필요하신가요? E-book으로 제공되는 Red Hat의 오토메이션 아키텍트 핸드북을 확인하세요.

 


저자 소개

Tomas Jelinek is a Software Engineer at Red Hat with over seven years of experience with RHEL High Availability clusters.

Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

채널별 검색

automation icon

오토메이션

기술, 팀, 인프라를 위한 IT 자동화 최신 동향

AI icon

인공지능

고객이 어디서나 AI 워크로드를 실행할 수 있도록 지원하는 플랫폼 업데이트

open hybrid cloud icon

오픈 하이브리드 클라우드

하이브리드 클라우드로 더욱 유연한 미래를 구축하는 방법을 알아보세요

security icon

보안

환경과 기술 전반에 걸쳐 리스크를 감소하는 방법에 대한 최신 정보

edge icon

엣지 컴퓨팅

엣지에서의 운영을 단순화하는 플랫폼 업데이트

Infrastructure icon

인프라

세계적으로 인정받은 기업용 Linux 플랫폼에 대한 최신 정보

application development icon

애플리케이션

복잡한 애플리케이션에 대한 솔루션 더 보기

Original series icon

오리지널 쇼

엔터프라이즈 기술 분야의 제작자와 리더가 전하는 흥미로운 스토리