저는 Solaris 11의 ILB를 사용하여 두 백엔드 DNS 서버 사이에 로드 밸런서를 생성하려고 합니다. 이것은 내 요구 사항입니다.
2개의 외부 IP: .XXX.YYY, .XXX.ZZZ - 클라이언트가 연결하는 DNS IP입니다. 이 2개의 외부 IP에 대한 HA 구성에 있는 2개의 ILB 상자 2개의 백엔드 DNS 서버
두 개의 서로 다른 수신 IP에 있는 두 개의 DNS 서버(ns1 및 ns2) 간에 두 개의 ILB 상자(ilb1 및 ilb2) 로드 밸런싱을 갖고 싶습니다. 나는 ilb1이 .XXX.YYY에서 기본이고 .XXX.ZZZ에서 보조이고 ilb가 그 반대이기를 원합니다. 이렇게 하면 DNS 서버 또는 ILB 서버가 실패하더라도 DNS 요청은 영향을 받지 않고 계속됩니다. 그러나 백엔드 서버가 DNS 요청의 실제 SRC_IP를 볼 수 있어야 하기 때문에 이에 대해 전체 NAT를 수행할 수 없습니다. 전체 NAT를 수행하면 DNS 서버가 모든 요청이 ILB에서 오는 것으로 생각하게 됩니다. 상자가 아니라 클라이언트 자체입니다.
HALF-NAT를 채택하면 DNS 요청에 대해 SRC_IP가 올바르게 유지됩니다. 그러나 이는 이제 패킷이 요청된 ILB 상자를 통해 라우팅되어야 하므로 패킷이 올바른 IP를 사용하여 클라이언트에 도달해야 함을 의미합니다. 그렇지 않으면 클라이언트가 패킷을 삭제합니다. ("예상치 못한 소스의 응답" 등). 이것은 까다로운 질문입니다. IP가 두 개이므로 올바른 ILB 상자를 통해 요청을 안정적으로 다시 라우팅하려면 어떻게 해야 합니까? DNS 상자의 /etc/defaultrouter는 1개의 IP만 사용할 수 있으므로 응답의 약 절반이 삭제됩니다.
이 설정 괜찮나요? 내 설명이 진흙처럼 명확합니까?
답변1
필요한 것은 대부분 갖춘 것 같지만 마법이 부족합니다.
먼저, 여러 VIP 주소를 처리하려면 VRRP(또는 애니캐스트도 가능하지만 그렇게 하지 않을 것 같습니다)를 사용해야 합니다. 이 부분이 제대로 작동한다고 명시적으로 언급하지는 않았지만, 아마 그럴 것이라고 생각합니다. ILB와 라우팅에 대해서만 논의하겠습니다.
좋은 소식은 ILB를 통해 라우팅을 강제로 다시 수행할 필요가 없다는 것입니다.
당신이 원하는 것은 호출됩니다직접 서버 복귀그리고 ILB의 "상태 비저장" 모드를 사용하세요.
그 기능은 다음과 같습니다.
- LB는 대상 L2 이더넷 주소를 실제 서버 L2 주소로 변경합니다.
- RS는 실제 L3 소스와 실제 L3 대상이 포함된 패킷을 수신합니다.
- RS는 올바른 L3 소스 및 대상으로 응답합니다.
DSR 설정 방법에 대한 Oracle 설명서올바르게 구성된 DSR로 샘플 코드를 완성하세요. (노트:Oracle의 설명서는 정확하지만 구문이 좋지 않습니다. 명확히 말하면 1, 3, 4단계는 ILB에서 수행되고 2단계는 실제 서버에서 수행됩니다. )
간략하게 설명하세요:
type=DSR
명령ilbadm create-rule
에 사용lo0
각 실제 서버 에 VIP 주소 추가
실제 서버가 Linux인 경우 일부 라우팅 및 arp 스푸핑 보호도 비활성화해야 합니다.
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce