Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4장. Keepalived를 사용한 초기 로드 밸런서 구성

Load Balancer 패키지를 설치한 후 Keepalived에 사용할 LVS 라우터 및 실제 서버를 설정하려면 몇 가지 기본 단계를 수행해야 합니다. 이 장에서는 이러한 초기 단계를 자세히 설명합니다.

4.1. 기본 Keepalived 구성

이 기본 예에서는 두 개의 시스템이 로드 밸런서로 구성됩니다. LB1(Active) 및 LB2(Backup)는 실제 IP 주소 192.168.1.20에서 192.168.1.24로 번호가 지정된 httpd 웹 서버 풀에 대한 라우팅 요청으로, 가상 IP 주소를 10.0.0.1로 공유합니다. 각 로드 밸런서에는 두 개의 인터페이스(eth0eth1)가 있으며, 하나는 외부 인터넷 트래픽을 처리하는 데 사용되며 다른 하나는 실제 서버로 요청을 라우팅하는 데 사용됩니다. 사용된 로드 밸런싱 알고리즘은 Round Robin이며 라우팅 방법은 Network Address Translation입니다.

4.1.1. keapalived.conf 파일 생성

keepalived는 로드 밸런서로 구성된 각 시스템의 keepalived.conf 파일을 통해 구성됩니다. 4.1절. “기본 Keepalived 구성” 예제와 같은 로드 밸런서 토폴로지를 생성하려면 텍스트 편집기를 사용하여 활성 및 백업 로드 밸런서, LB1 및 LB2 모두에서 keepalived.conf 를 엽니다. 예를 들면 다음과 같습니다.
vi /etc/keepalived/keepalived.conf
4.1절. “기본 Keepalived 구성” 에 설명된 대로 구성이 포함된 기본 로드 밸런싱 시스템에는 다음 코드 섹션에 설명된 대로 keepalived.conf 파일이 있습니다. 이 예에서 keepalived.conf 파일은 VRRP 인스턴스를 제외하고 활성 및 백업 라우터 모두에서 동일합니다. 4.1.1.2절. “VRRP 인스턴스”

4.1.1.1. 글로벌 정의

keepalived.conf 파일의 글로벌 정의 섹션을 사용하면 관리자가 로드 밸런서를 변경할 때 알림 세부 정보를 지정할 수 있습니다. 글로벌 정의는 선택 사항이며 Keepalived 구성에 필요하지 않습니다. keepalived.conf 파일의 이 섹션은 LB1 및 LB2 모두에서 동일합니다.
global_defs {

   notification_email {
       admin@example.com
   }
   notification_email_from noreply@example.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 60
}
notification_email 는 로드 밸런서의 관리자이며, notification_email_from 는 로드 밸런서 상태가 변경되는 주소입니다. SMTP별 구성은 알림이 발송되는 메일 서버를 지정합니다.

4.1.1.2. VRRP 인스턴스

다음 예제에서는 마스터 라우터 및 백업 라우터에 keeplalived.conf 파일의 vrrp_sync_group 스탠자를 보여줍니다. statepriority 값은 두 시스템 간에 다릅니다.
다음 예제에서는 LB1의 keepalived.conf 파일에 대한 vrrp_sync_group 스탠자를 보여줍니다.
vrrp_sync_group VG1 {
   group {
      RH_EXT
      RH_INT
   }
}

vrrp_instance RH_EXT {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass passw123
    }
    virtual_ipaddress {
    10.0.0.1
    }
}

vrrp_instance RH_INT {
   state MASTER
   interface eth1
   virtual_router_id 2
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass passw123
   }
   virtual_ipaddress {
       192.168.1.1
   }
}
다음 예제에서는 LB2용 keepalived.conf 파일의 vrrp_sync_group 스탠자를 백업 라우터로 보여줍니다.
vrrp_sync_group VG1 {
   group {
      RH_EXT
      RH_INT
   }
}

vrrp_instance RH_EXT {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass passw123
    }
    virtual_ipaddress {
    10.0.0.1
    }
}

vrrp_instance RH_INT {
   state BACKUP
   interface eth1
   virtual_router_id 2
   priority 99
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass passw123
   }
   virtual_ipaddress {
       192.168.1.1
   }
}
이 예에서 vrrp_sync_group 스탠자는 모든 상태 변경(예: 페일오버)을 통해 함께 유지되는 VRRP 그룹을 정의합니다. 인터넷(RH_EXT)과 통신하는 외부 인터페이스와 내부 인터페이스(RH_INT)용 인스턴스가 정의되어 있습니다.
vrrp_instance 행은 가상 IP 인스턴스를 생성하는 VRRP 서비스 데몬의 가상 인터페이스 구성을 자세히 설명합니다. MASTER 는 활성 서버를 지정하고 상태는 백업 서버를 지정합니다.
interface 매개 변수는 이 특정 가상 IP 인스턴스에 물리적 인터페이스 이름을 할당합니다.
virtual_router_id 는 가상 라우터 인스턴스의 숫자 식별자입니다. 이 가상 라우터에 참여하는 모든 LVS 라우터 시스템에서 동일해야 합니다. 동일한 네트워크 인터페이스에서 keepalived 의 여러 인스턴스를 구별하는 데 사용됩니다.
우선순위 는 할당된 인터페이스가 장애 조치(failover)에서 인수되는 순서를 지정합니다. 즉 숫자가 클수록 우선순위가 높습니다. 이 우선순위 값은 0에서 255 사이의 범위 내에 있어야 하며, MASTER 상태로 구성된 Load Balancing 서버에는 state 로 구성된 서버의 우선순위 값보다 높은 우선순위 값이 설정되어 있어야 합니다.
인증 블록은 장애 조치(failover) 동기화를 위해 서버를 인증하는 데 사용되는 인증 유형(auth_type) 및 암호(auth_pass)를 지정합니다. PASS 는 암호 인증을 지정합니다. Keepalived는 AH 또는 연결 무결성을 위해 인증 헤더도 지원합니다.
마지막으로 virtual_ipaddress 옵션은 인터페이스 가상 IP 주소를 지정합니다.

4.1.1.3. 가상 서버 정의

keepalived.conf 파일의 가상 서버 정의 섹션은 LB1 및 LB2 모두에서 동일합니다.
virtual_server 10.0.0.1 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    protocol TCP

    real_server 192.168.1.20 80 {
        TCP_CHECK {
                connect_timeout 10
        }
    }
    real_server 192.168.1.21 80 {
        TCP_CHECK {
                connect_timeout 10
        }
    }
    real_server 192.168.1.22 80 {
        TCP_CHECK {
                connect_timeout 10
        }
    }
    real_server 192.168.1.23 80 {
        TCP_CHECK {
                connect_timeout 10
        }
    }

}
이 블록에서는 virtual_server 가 먼저 IP 주소로 구성됩니다. 그런 다음 delay_loop 는 상태 점검 간 시간(초)을 구성합니다. lb_algo 옵션은 가용성에 사용되는 알고리즘의 종류를 지정합니다(이 경우 Round-Robin의 경우 rr; 가능한 lb_algo 값 목록은 표 4.1. “lv_algo values for Virtual Server”참조). lb_kind 옵션은 라우팅 방법을 결정합니다. 이 경우 네트워크 주소 변환(또는 nat)이 사용됩니다.
가상 서버 세부 정보를 구성한 후 먼저 IP 주소를 지정하여 real_server 옵션이 다시 구성됩니다. TCP_CHECK 스탠자는 TCP를 사용하여 실제 서버의 가용성을 확인합니다. connect_timeout 은 시간 초과가 발생하기 전의 시간(초)을 구성합니다.
참고
로드 밸런서 또는 실제 서버 중 하나에서 가상 IP에 액세스하는 것은 지원되지 않습니다. 마찬가지로 실제 서버와 동일한 시스템에서 로드 밸런서를 구성하는 것은 지원되지 않습니다.

표 4.1. lv_algo values for Virtual Server

알고리즘 이름lv_algo
round-Robin
rr
weighted Round-Robin
wrr
least-Connection
lc
가중치 Least-Connection
wlc
locality-Based Least-Connection
lblc
복제를 사용한 지역 기반 Least-Connection 스케줄링
lblcr
대상 해시
dh
소스 해시
sh
소스 Expected Delay
sed
never Queue
nq