Keepalived를 활용한 고가용성 서비스 구축 가이드

Keepalived 개요:

Keepalived는 VRRP(Virtual Router Redundancy Protocol) 프로토콜을 기반으로 하는 고가용성(HA) 솔루션입니다. 하나의 마스터 서버와 여러 대의 백업 서버로 구성되며, 모든 서버에 동일한 서비스 설정을 배포합니다. 외부에는 가상 IP(VIP)를 통해 서비스를 제공하며, 마스터 서버에 장애가 발생하면 VIP가 자동으로 백업 서버로 이동합니다.

Keepalived의 역할:

Keepalived는 뛰어난 서비스 고가용성 보장을 제공합니다. 서버 상태를 지속적으로 모니터링하다가 문제가 발생하면 해당 서버를 시스템에서 제거하고, 백업 서버가 즉시 그 역할을 대체합니다. 장애 서버가 정상으로 복귀하면 다시 서비스 그룹에 포함시킵니다.

Keepalived 동작 원리:

Keepalived는 VRRP(가상 라우터 중복 프로토콜)를 기반으로 작동하며, TCP/IP 모델의 3계층(네트워크), 4계층(전송), 5계층(애플리케이션)에서 동작합니다. 동일한 기능을 제공하는 N개의 라우터를 하나의 그룹으로 묶고, 하나의 마스터와 여러 백업으로 구성합니다. 마스터는 VIP를 통해 서비스를 제공하며, 지속적으로 멀티캐스트 패킷을 전송합니다. 백업이 이 VRRP 패킷을 수신하지 못하면 마스터가 다운된 것으로 간주하고, VRRP 우선순위에 따라 새로운 마스터를 선출합니다.

Keepalived 모듈:

  • core 모듈: Keepalived의 핵심으로, 메인 프로세스 시작, 유지, 전역 설정 파일 로드 및 파싱을 담당합니다.
  • check 모듈: 다양한 건강 상태 확인 방식을 지원하는 헬스 체크 모듈입니다.
  • vrrp 모듈: VRRP 프로토콜을 실제로 구현하는 모듈입니다.

Keepalived 핵심 기능:

  • 헬스 체크: TCP 3-way 핸드셰이크, ICMP 요청, HTTP 요청, UDP, Echo 요청 등을 통해 로드 밸런서 뒤의 실제 서버 상태를 확인합니다.
  • 장애 조치(Failover): 주로 마스터-백업 구조의 서버에서 사용되며, VRRP를 통해 두 서버 간의 하트비트를 유지합니다. 마스터에 문제가 발생하면 백업이 해당 서비스를 인계받아 서비스 안정성을 극대화합니다.

Keepalived 환경 구성:

keepalived1(master): 172.25.254.10
keepalived2(backup): 172.25.254.20
web1: 172.25.254.110
web2: 172.25.254.120

마스터 서버(keepalived1) 설정:

[root@KA1 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
       admin@example.com
   }
   notification_email_from ka1@cluster.local
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KA1.cluster.local
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}
vrrp_instance VI_1 {
   state MASTER
   interface eth0
   virtual_router_id 20
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 2222
   }
   virtual_ipaddress {
       172.25.254.100/24 dev eth0 label eth0:0
   }
}

백업 서버(keepalived2) 설정:

[root@KA2 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
       admin@example.com
   }
   notification_email_from ka2@cluster.local
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KA2.cluster.local
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}

vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   virtual_router_id 20
   priority 90
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 2222
   }
   virtual_ipaddress {
       172.25.254.100/24 dev eth0 label eth0:0
   }
}

설정 적용 및 서비스 실행:

# 양쪽 서버에서 Keepalived 서비스 시작 및 부팅 시 자동 실행 설정
[root@KA1 ~]# systemctl start keepalived
[root@KA1 ~]# systemctl enable keepalived

[root@KA2 ~]# systemctl start keepalived
[root@KA2 ~]# systemctl enable keepalived

# VIP 상태 확인
[root@KA1 ~]# ip addr show eth0:0

태그: Keepalived vrrp 고가용성 리눅스 서버 가상 IP

6월 18일 18:12에 게시됨