본문 바로가기
Server-side 개발 & 트러블 슈팅/Openstack (오픈스택)

[Openstack] 오픈스택 클러스터링의 개념과 인프라 서비스와 베포

by 코딩하는 동현 2025. 6. 29.

오픈스택 클라우드 베포와 자동화

  1. 클러스터링의 기본 개념과 OpenStack 서비스의 역할: OpenStack이 어떻게 고가용성을 제공하는지, 그리고 클라우드 컨트롤러를 구성하는 주요 서비스들의 기능과 중요성을 설명합니다.
  2. OpenStack의 핵심 서비스 및 공통 인프라 서비스 이해: 각 서비스(Keystone, Nova, Glance, Neutron, Horizon, Telemetry)와 공통적으로 필요한 인프라(메시지 큐, 데이터베이스)의 역할과 구성 요소를 깊이 있게 다룹니다.
  3. OpenStack Ansible(OSA)을 이용한 실제 배포 단계: OSA를 사용하여 OpenStack 환경을 설정하고 배포하는 구체적인 명령 및 설정 파일을 안내합니다.

1. 클러스터링의 기본 개념 및 OpenStack 서비스의 역할

클러스터링이란 무엇인가?

  • 클러스터링두 개 이상의 서버 용량을 묶어서 시스템의 고가용성을 높이는 기술입니다. 이는 서비스가 중단되지 않고 지속적으로 제공되도록 하는 핵심 방법입니다.
  • 수평 확장(Horizontal scaling)은 저렴한 서버를 더 많이 추가하여 전체 용량을 늘리는 방식이고, 수직 확장(Vertical scaling)은 더 비싸고 강력한 서버(더 많은 CPU와 RAM을 가진) 하나를 추가하여 용량을 늘리는 방식입니다. OpenStack은 주로 수평 확장을 지향합니다.
  • 비대칭 클러스터링(Asymmetric clustering)은 주로 데이터베이스나 메시징 시스템에서 사용되며, 하나의 활성 서버가 요청을 처리하고 다른 서버는 대기 상태로 있다가 장애 발생 시 인계받는 방식입니다.
  • 대칭 클러스터링(Symmetric clustering)은 모든 노드가 동시에 활성 상태로 요청을 처리하며, 노드 중 하나에 장애가 발생하면 다른 활성 노드들이 해당 워크로드를 인계받아 처리합니다. 이는 비용 효율적일 수 있습니다.

클라우드 컨트롤러의 중요성

  • 클라우드 컨트롤러는 OpenStack 환경의 수많은 핵심 서비스들을 호스팅하는 역할을 합니다. OpenStack Ansible을 이용한 운영 환경 배포 시, 최소 3개의 컨트롤러 노드로 구성하는 것이 권장됩니다.
  • 이는 데이터베이스와 메시지 큐 같은 핵심 공유 서비스의 고가용성을 확보하는 데 필수적입니다.

2. OpenStack의 핵심 서비스 및 공통 인프라 서비스 이해

클라우드 컨트롤러에 배포되는 주요 OpenStack 서비스와 공통 인프라 서비스는 다음과 같습니다:

OpenStack 핵심 서비스

  • Keystone (아이덴티티 관리): OpenStack의 ID 관리, 리소스 제공(프로젝트, 도메인), 인증, 토큰 발급, 서비스 카탈로그, 정책 제공 등 전반적인 인증 및 권한 부여를 담당합니다.
    • Fernet 토큰을 사용하는데, 이는 기존 PKI/PKIZ 토큰의 크기 문제와 데이터베이스 부하 문제를 해결하며, 데이터베이스에 저장할 필요 없이 토큰 생성 속도가 빠릅니다. OSA는 기본적으로 Fernet 토큰을 사용하며, 보안을 위해 주기적으로 암호화 키를 교체해야 합니다.
  • Nova (컴퓨트 서비스): 가상 머신(VM)을 관리하는 OpenStack의 핵심 구성 요소입니다.
    • nova-api: OpenStack API 및 EC2 API 요청을 처리하고 다른 서비스와 상호작용합니다.
    • nova-conductor: 데이터베이스 및 메시지 큐와 상호작용합니다.
    • nova-scheduler: VM을 위한 최적의 컴퓨트 노드를 선택하며, 필터 및 가중치 메커니즘을 사용합니다.
  • Glance (이미지 관리): 가상 머신 이미지를 저장하고 관리하는 레지스트리 역할을 합니다. 다양한 이미지 포맷(KVM/Qemu, XEN, VMware, Docker 등)을 지원하며, 이미지는 Swift와 같은 백엔드 스토리지에 저장될 수 있습니다.
  • Neutron (네트워크 서비스): 가상 네트워크, 라우팅, 로드 밸런싱, 방화벽 등 고급 네트워크 기능을 제공합니다. API 서비스는 클라우드 컨트롤러에 상주하며, 네트워크 워커는 별도의 네트워크 노드에 분리하여 설치하는 것이 권장됩니다.
  • Horizon (대시보드): OpenStack의 웹 기반 사용자 인터페이스를 제공하며, 모든 OpenStack 서비스에 대한 통합된 접근을 가능하게 합니다. 이는 상태 비저장(stateless) 및 데이터 없는(data-less) 웹 애플리케이션으로 설계되어 확장 및 커스터마이징이 용이합니다.
  • Telemetry (모니터링 및 측정): OpenStack 리소스 사용량 데이터를 수집하고(Ceilometer), 알람을 처리하며(Aodh), 시계열 데이터 저장을 담당합니다(Gnocchi). Liberty 릴리스 이후 Ceilometer에서 알람 기능이 Aodh로 분리되었고, 시계열 데이터베이스 기능은 Gnocchi 프로젝트로 발전했습니다.

공통 인프라 서비스

  • 메시지 큐 (RabbitMQ): OpenStack 구성 요소 간의 비동기 통신을 위한 중앙 허브 역할을 합니다. 고가용성을 위해 클러스터링이 필수적이며, 메시지 미러링 기능(mirrored queues)을 활성화하여 메시지 손실을 방지할 수 있습니다.
  • 데이터베이스 (MySQL, MongoDB): OpenStack의 메타데이터를 저장하는 핵심 구성 요소입니다.
    • MySQL 클러스터링(Galera Cluster)을 통해 고가용성과 데이터 무결성을 확보할 수 있으며, 최소 3개의 노드가 필요합니다.
    • 텔레메트리 서비스를 위해서는 No-SQL 데이터베이스(MongoDB)가 사용됩니다.

3. OpenStack Ansible(OSA)을 이용한 실제 배포 단계

OSA는 OpenStack을 배포하고 관리하기 위한 공식 Ansible 프로젝트입니다. 컨테이너 기반 배포를 통해 서비스 격리 및 생산 환경 모방이 가능합니다.

배포 노드 (Deployment Node) 준비:

  • OSA를 실행하는 워크스테이션으로, Ansible, Git, NTP, SSH 서버 등이 설치되어야 합니다.
  • OpenStack Ansible 저장소를 클론하고(git clone), Ansible 부트스트랩 스크립트를 실행합니다 (scripts/bootstrap-ansible.sh).
  • 대상 호스트에 SSH 키 기반 인증을 설정합니다.

컨트롤러 노드 (Controller Node) 준비:

  • 대상 호스트(실제 OpenStack 서비스를 실행할 노드)는 NTP 동기화, 최소 커널 버전(3.13.0-34-generic 이상) 요구 사항을 충족해야 합니다.
  • 필요에 따라 LVM 볼륨 그룹(lxc)을 설정할 수 있습니다.
  • 다중 NIC와 본딩 인터페이스를 사용한 브릿지 구성은 프로덕션 환경에서 권장됩니다.

OpenStack Ansible (OSA) 설정 파일 구성:

  • OSA의 주요 설정 파일은 /etc/openstack_deploy 디렉토리에 위치하며, openstack_user_config.yml 파일이 사용자 정의 배포를 위해 사용됩니다.
  • openstack_user_config.yml.example 파일을 복사하여 openstack_user_config.yml을 만듭니다.

네트워크 설정 (cidr_networks):

  • 컨테이너, 터널, 스토리지 네트워크를 위한 CIDR(Classless Inter-Domain Routing) 주소를 정의합니다.
  • 관리(br-mgmt), 스토리지(br-storage), 터널(br-vxlan, br-vlan) 브릿지 같은 다양한 네트워크 경로를 설정합니다.
  • used_ips 그룹을 사용하여 이미 사용 중인 IP 주소 범위를 제외할 수 있습니다.

호스트 그룹 (host groups) 구성:

  • openstack_user_config.yml 파일에서 호스트 그룹을 정의하여 특정 서비스를 실행할 대상 호스트를 지정합니다.
  • 주요 호스트 그룹:
    • shared-infra_hosts: 데이터베이스, 메시지 큐 등 공유 인프라 서비스. (예: cc-01, cc-02, cc-03 지정)
    • os-infra_hosts: OpenStack API 서비스 (Keystone, Nova API 등). (예: cc-01, cc-02, cc-03 지정)
    • compute_hosts: 컴퓨트 서비스 (Nova Compute).
    • network_hosts: 네트워크 서비스 (Neutron 에이전트).
    • storage-infra_hosts: Cinder API 서비스. (예: cc-01, cc-02, cc-03 지정)
    • storage_hosts: Cinder 볼륨 서비스.
    • log_hosts: 로깅 서비스.
    • haproxy_hosts: HAProxy 서비스. (예: cc-01, cc-02, cc-03 지정)

HAProxy 및 Keepalived 설정:

  • HAProxy는 컨트롤러 노드에 설치되어 API 로드 밸런싱을 수행할 수 있습니다. 프로덕션 환경에서는 하드웨어 로드 밸런서 사용이 권장됩니다.
  • Keepalived는 HAProxy 인스턴스 간에 가상 IP(VIP)를 공유하도록 구성하여 로드 밸런서 자체의 고가용성을 제공합니다.
  • HAProxy 플레이북은 Galera, RabbitMQ, Glance, Keystone, Neutron, Nova, Cinder, Horizon 등 다양한 OpenStack 서비스에 대한 로드 밸런싱을 기본적으로 처리합니다.
  • haproxy_config.yml 파일이나 user_variables.yml 파일을 통해 설정을 사용자 정의할 수 있습니다. Keepalived 우선순위(haproxy_keepalived_priority_master, haproxy_keepalived_priority_backup) 및 내부/외부 인터페이스(haproxy_keepalived_internal_interface, haproxy_keepalived_external_interface)를 설정합니다.

Ansible 플레이북 실행:

  • OSA는 OpenStack 배포를 위한 일련의 플레이북을 제공합니다.
  • 주요 플레이북:
    • setup-hosts.yml: 컨테이너 설치 및 기본 호스트 구성을 담당합니다.
    • setup-infra.yml: Galera, MariaDB, memcached, RabbitMQ와 같은 인프라 서비스를 설치합니다.
    • setup-openstack.yml: 이미지, 네트워크, 아이덴티티, 대시보드, 컴퓨트 API, 텔레메트리, 오케스트레이션 등 OpenStack API 서비스를 설치합니다.
    • haproxy-install.yml: HAProxy와 Keepalived를 설치하고 구성합니다.
    • 각 OpenStack 서비스별 개별 설치 플레이북 (os-keystone-install.yml, os-glance-install.yml 등)도 제공됩니다.
  • openstack-ansible <플레이북_이름>.yml 명령어를 사용하여 실행합니다.
  • --limit <호스트_그룹> 옵션을 사용하여 특정 호스트 그룹에만 배포를 제한할 수 있습니다.

OpenStack 구성 사용자 정의:

  • 각 OpenStack 플레이북 역할의 defaults/main.yml 파일을 통해 제어 영역 구성을 사용자 정의할 수 있습니다. 예를 들어, Horizon 대시보드에서 Neutron LBaaS 기능을 활성화할 수 있습니다.
  • /etc/openstack_deploy/user_variables.yml 파일은 기본값을 재정의하고 사용자 정의 변수를 설정하는 데 사용됩니다. 이는 높은 우선순위로 적용됩니다.
  • 민감한 정보(비밀번호 등)는 /etc/openstack_deploy/user_secrets.yml에 저장하며, Ansible Vault와 같은 암호화 메커니즘을 사용하여 보안을 강화해야 합니다.
반응형

댓글