Red Hat Training

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

3.2. 직접 라우팅을 사용하는 로드 밸런서

직접 라우팅을 사용하면 실제 서버에서 LVS 라우터를 통해 발신 패킷을 전달하는 대신 요청하는 사용자에게 직접 패킷을 처리하고 라우팅할 수 있습니다. 직접 라우팅을 사용하려면 실제 서버가 LVS 라우터를 사용하여 네트워크 세그먼트에 물리적으로 연결되어 나가는 패킷도 처리하고 직접 보낼 수 있어야 합니다.
네트워크 레이아웃
직접 라우팅 로드 밸런서 설정에서 LVS 라우터는 들어오는 요청을 수신하고 처리를 위해 적절한 실제 서버로 라우팅해야 합니다. 그런 다음 실제 서버는 응답을 클라이언트에 직접 라우팅해야 합니다. 예를 들어 클라이언트가 인터넷에 있고 LVS 라우터를 통해 패킷을 실제 서버로 보내는 경우 실제 서버는 인터넷을 통해 클라이언트에 직접 연결할 수 있어야 합니다. 이 작업은 실제 서버가 패킷을 인터넷에 전달할 수 있도록 게이트웨이를 구성하여 수행할 수 있습니다. 서버 풀의 각 실제 서버는 자체 별도의 게이트웨이(및 인터넷에 대한 자체 연결이 있는 각 게이트웨이)를 가질 수 있으므로 처리량과 확장성을 극대화할 수 있습니다. 그러나 일반적인 로드 밸런서 설정의 경우 실제 서버는 하나의 게이트웨이(및 하나의 네트워크 연결)를 통해 통신할 수 있습니다.
하드웨어
직접 라우팅을 사용하는 로드 밸런서 시스템의 하드웨어 요구 사항은 다른 로드 밸런서 토폴로지와 유사합니다. LVS 라우터는 들어오는 요청을 처리하고 실제 서버에 대한 로드 밸런싱을 수행하기 위해 Red Hat Enterprise Linux를 실행해야 하지만 실제 서버가 제대로 작동하려면 Linux 시스템일 필요가 없습니다. LVS 라우터에는 각각 하나 또는 두 개의 NIC가 필요합니다(백업 라우터가 있는 경우 에 따라 다름). 두 개의 NIC를 사용하여 쉽게 구성하고 트래픽을 분리할 수 있습니다. 수신 요청은 NIC에 의해 처리되고 다른 하나는 실제 서버로 라우팅됩니다.
실제 서버는 LVS 라우터를 무시하고 발신 패킷을 클라이언트에 직접 전송하므로 인터넷에 대한 게이트웨이가 필요합니다. 최대 성능과 가용성을 위해 각 실제 서버는 클라이언트가 연결된 네트워크에 대한 자체 전용 연결이 있는 별도의 게이트웨이(예: 인터넷 또는 인트라넷)에 연결할 수 있습니다.
소프트웨어
keepalived 외부 몇 가지 구성이 있으며 특히 직접 라우팅하여 Load Balancer를 사용할 때 ARP 문제에 직면하는 관리자에게 필요합니다. 자세한 내용은 3.2.1절. “arptables를 사용한 직접 라우팅” 또는 3.2.3절. “iptables를 사용한 직접 라우팅” 을 참조하십시오.

3.2.1. arptables를 사용한 직접 라우팅

arptables 를 사용하여 직접 라우팅을 구성하려면 각 서버에 가상 IP 주소가 구성되어 있어야 패킷을 직접 라우팅할 수 있습니다. VIP에 대한 ARP 요청은 실제 서버에서 완전히 무시되며, VIP를 포함하는 전송될 수 있는 ARP 패킷은 VIP 대신 실제 서버의 IP를 포함하도록 조작됩니다.
애플리케이션은 arptables 메서드를 사용하여 실제 서버가 서비스하는 각 개별 VIP 또는 포트에 바인딩할 수 있습니다. 예를 들어 arptables 메서드를 사용하면 Apache HTTP Server의 여러 인스턴스를 실행하고 시스템의 다른 VIP에 명시적으로 바인딩할 수 있습니다.
그러나 표준 Red Hat Enterprise Linux 시스템 구성 툴을 사용하여 부팅 시 시작되도록 VIP를 구성할 수 없습니다.
각 가상 IP 주소에 대한 ARP 요청을 무시하도록 각 실제 서버를 구성하려면 다음 단계를 수행합니다.
  1. 각 실제 서버에서 각 가상 IP 주소에 대한 ARP 테이블 항목을 만듭니다. director가 실제 서버와 통신하는 데 사용하는 IP는 real_ip 입니다. 종종 eth0에 바인딩된 IP입니다.
    arptables -A IN -d <virtual_ip> -j DROP
    arptables -A OUT -s <virtual_ip> -j mangle --mangle-ip-s <real_ip>
    
    이렇게 하면 실제 서버가 가상 IP 주소에 대한 모든 ARP 요청을 무시하고, 대신 서버의 실제 IP를 포함하도록 발신 ARP 응답을 변경합니다. VIP에 대한 ARP 요청에 응답해야 하는 유일한 노드는 현재 활성 LVS 노드입니다.
  2. 각 실제 서버에서 이 작업이 완료되면 각 실제 서버에서 다음 명령을 입력하여 ARP 테이블 항목을 저장합니다.
    arptables-save > /etc/sysconfig/arptables
    systemctl enable arptables.service
    systemctl enable 명령을 사용하면 네트워크가 시작되기 전에 시스템이 부팅 시 arptables 구성을 다시 로드합니다.
  3. IP 별칭을 만들기 위해 ip addr 를 사용하여 모든 실제 서버에서 가상 IP 주소를 구성합니다. 예를 들면 다음과 같습니다.
    # ip addr add 192.168.76.24 dev eth0
  4. Direct Routing에 Keepalived를 구성합니다. 이 작업은 keepalived.conf 파일에 lb_kind DR 를 추가하여 수행할 수 있습니다. 자세한 내용은 4장. Keepalived를 사용한 초기 로드 밸런서 구성 을 참조하십시오.

3.2.2. firewalld를 사용한 직접 라우팅

firewalld 를 사용하여 방화벽 규칙을 생성하여 직접 라우팅 방법을 사용하여 ARP 문제를 해결할 수도 있습니다. firewalld 를 사용하여 직접 라우팅을 구성하려면 실제 서버가 시스템에 VIP 주소가 없는 경우에도 실제 서버가 VIP 주소로 전송된 패킷을 서비스하도록 투명한 프록시를 생성하는 규칙을 추가해야 합니다.
firewalld 방법은 arptables 메서드보다 쉽게 구성할 수 있습니다. 가상 IP 주소 또는 주소는 활성 LVS director에만 있으므로 이 방법은 LVS ARP 문제를 완전히 우회합니다.
그러나 모든 반환 패킷을 전달하는 데 오버헤드가 있으므로 firewalld 방법을 사용하여 arptables 를 사용하는 성능 문제가 있습니다.
firewalld 방법을 사용하여 포트를 재사용할 수도 없습니다. 예를 들어 둘 다 가상 IP 주소 대신 INADDR_ANY 에 바인딩해야 하므로 포트 80에 바인딩된 두 개의 별도의 Apache HTTP Server 서비스를 실행할 수 없습니다.
firewalld 방법을 사용하여 직접 라우팅을 구성하려면 모든 실제 서버에서 다음 단계를 수행합니다.
  1. firewalld 가 실행 중인지 확인합니다.
    # systemctl start firewalld
    시스템을 시작할 때 firewalld 가 활성화되어 있는지 확인합니다.
    # systemctl enable firewalld
  2. 실제 서버에 서비스를 제공하기 위해 모든 VIP, 포트, 프로토콜(TCP 또는 UDP) 조합에 대해 다음 명령을 입력합니다. 이 명령을 실행하면 실제 서버가 제공된 VIP 및 포트로 향하는 패킷을 처리합니다.
    # firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -d vip -p tcp|udp -m tcp|udp --dport port -j REDIRECT
  3. 방화벽 규칙을 다시 로드하고 상태 정보를 유지합니다.
    # firewall-cmd --reload
    현재 영구 구성은 새로운 firewalld 런타임 구성과 다음 시스템 시작 시 구성이 됩니다.

3.2.3. iptables를 사용한 직접 라우팅

iptables 방화벽 규칙을 생성하여 직접 라우팅 방법을 사용하여 ARP 문제를 해결할 수도 있습니다. iptables 를 사용하여 직접 라우팅을 구성하려면 실제 서버가 시스템에 VIP 주소가 없는 경우에도 실제 서버가 VIP 주소로 전송된 패킷을 서비스하도록 투명한 프록시를 생성하는 규칙을 추가해야 합니다.
iptables 방법은 arptables 메서드보다 쉽게 구성할 수 있습니다. 또한 가상 IP 주소는 활성 LVS director에만 있으므로 이 방법은 LVS ARP 문제를 완전히 우회합니다.
그러나 모든 패킷을 전달하는 데 오버헤드가 있으므로 iptables 방법을 사용하여 arptables 를 사용하는 성능 문제가 있습니다.
iptables 방법을 사용하여 포트를 재사용할 수도 없습니다. 예를 들어 둘 다 가상 IP 주소 대신 INADDR_ANY 에 바인딩해야 하므로 포트 80에 바인딩된 두 개의 별도의 Apache HTTP Server 서비스를 실행할 수 없습니다.
iptables 방법을 사용하여 직접 라우팅을 구성하려면 다음 단계를 수행합니다.
  1. 각 실제 서버에서 실제 서버에 대해 서비스를 제공하기 위해 모든 VIP, 포트, 프로토콜(TCP 또는 UDP) 조합에 대해 다음 명령을 입력합니다.
    iptables -t nat -t PREROUTING -p <tcp|udp> -d <vip> --dport <port> -j REDIRECT
    이 명령을 실행하면 실제 서버가 제공된 VIP 및 포트로 향하는 패킷을 처리합니다.
  2. 각 실제 서버에 구성을 저장합니다.
    # iptables-save > /etc/sysconfig/iptables
    # systemctl enable iptables.service
    systemctl enable 명령을 사용하면 네트워크가 시작되기 전에 시스템이 부팅 시 iptables 구성을 다시 로드합니다.

3.2.4. sysctl을 사용한 직접 라우팅

Direct Routing을 사용할 때 ARP 제한을 처리하는 또 다른 방법은 sysctl 인터페이스를 사용하는 것입니다. 관리자는 실제 서버가 ARP 요청에서 VIP를 알리지 않고 VIP 주소에 대한 ARP 요청에 응답하지 않도록 두 개의 systcl 설정을 구성할 수 있습니다. 이를 활성화하려면 다음 명령을 입력합니다.
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
또는 /etc/sysctl.d/arp.conf 파일에 다음 행을 추가할 수도 있습니다.
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2