게임회사의 경우 하나의 세션을 연결하고 이를 장시간 유지하면서 플레이하는 유형의 패킷이 많다. 하지만 요즘 웹 사이트를 통한 비즈니스가 많아지면서, 네트워크 트래픽 부하를 줄이기 위한 여러가지 연구가 있는데, 그중 가장 유명하고 인상적인 Direct Server Return(이하 DSR)에 대해 정리해 보겠다.
DSR이란
DSR은 네트워크 구성에 있어서, 로드 밸런서에 착신한 클라이언트의 리퀘스트 패킷을
리스폰스는 로드 밸런서를 경유하지 않고 직접(Direct)에 클라이언트에 돌려주는 방식을 의미한다.
DSR은 F5개열의 BIG-IP에서는 nPath라우팅이라 불리는 기술에 해당한다. 트래픽 플로우는 다음과 같다.
가는 패킷:클라이언트 ⇒ 로드 밸런서 ⇒ 리얼 서버
돌아오는 패킷:리얼 서버 ⇒ 클라이언트
보통 서비스는 응답할 때 용량이 요청보다 크다. 이를 로드 밸런서를 거치지 않기 때문에 로드 밸런서의 부하 문제를 해소하여 많은량의 요청의 처리가 가능하게 된다. 로드 밸런서는 외부 트래픽의 비중이 높을 때 DSR을 이용하면 되돌아 오는 패킷 처리가 없기 때문에 성능 향상에 큰 도움이 된다. 필자 역시 DSR 구성을 통해 처리량 문제가 해소되는 것을 경험하였다. 아래 F5에서 공개한 문서를 읽어보면 보다 자세한 정보를 얻을 수 있다.
L2DSR
L2DSR은 TCP/IP에서 Layer 2, 물리 계층이라고 할 수 있는, MAC Address를 통한 DSR 이다.
로드 밸런서의 VIP혹 Loopback Interface로 서버에 직접 설정하므로서 구성이 가능하다.
이렇게 구성하면 서버는 로드 밸런서로 부터 온 요청이 자신의 것으로 판단하여 직접 클라이언트에 전달하게 된다.
물론 정적 라우팅 설정도 해줘야 한다.
그리고 L2DSR을 많이 사용하지 않는 가장 큰 이유는 동일 네트워크에서만 사용이 가능하기 때문에 글로벌 네트워크와 같은 경우 구성하기 어렵다고 할 수 있다.
L3DSR
L3는 TCP/IP에서 Layer 3, IP를 기반으로 둔 DSR이라고 할 수 있다. L3DSR의 핵심은 바로 동일 네트워크를 벗어나서 DSR 구성이 가능하다는 것이다. 즉 다른 지역의 IDC에 위치한 경우에도 DSR을 구성할 수 있으므로, 요즘같이 글로벌 서비스가 필요한 회사에서는 사용하기 용의하다고 할 수 있다.
그리고 L3DSR에는 IP Tunnel 기반과 TOS(DSCP) 방식으로 나뉜다.
IP Tunnel
IP Tunnel은 로드 밸런서가 서버로 보낼때 IP 헤더를 추가하는 방식으로 운영 된다. 추가된 IP 해더 값에는 내부와 외부 IP 정보가 있고 이를 통해 직접 전달이 가능하게 된다. 이를 위해 아래 그림과 같이 IP Header 값인 20bytes가 추가되어야 한다.
따라서 원래 사이즈인 Payload 값 1460 bytes는 추가된 IP 헤더를 위해 1440 bytes로 줄어들게 된다. 이는 패킷 전송의 손해이기도 하며, 서버에서 MSS(Maximun Segment Size)를 수정해줘야 한다.
ToS(DSCP)
ToS(Type of Service) 필드의 DSCP(Differenttiated Service Code Point)를 활용하여 QoS 개념의 우선 순위를 통해 서버와 로드 밸런서같에 동일하게 매핑해둔 DSCP를 보고 VIP에 연결된 서버를 찾아서 VIP 요청을 서버의 Loopback Interface로 전달하게 된다. 이후 처리는
서버 구성
서버에서 해야 할 점은 로드 밸런서 IP를 서버 Loopback Interface로 구성이 필요하다는 것은 L2/L3DSR이 동일하다.
서버는 기본적으로 자신의 IP가 아닌경우 패킷을 버리도록 설정이 되어 있다. 이를 Loopback Interface로 설정하여 들어온 패킷도 서버에서는 버리지 않고 Loopback Interface에 할당된 IP로 응답하도록 구성해야 하기 때문에 ARP disable 구성도 필요하다.
#Temp make interface
ifconfig tunl0 {{ VIP }} netmask 255.255.255.255 broadcast {{ VIP }} up
route add -host {{ VIP }} dev tunl0
#DSR Loopback Interface when restart
vim /etc/init.d/tunl0
DEVICE=lo:0
IPADDR=192.168.0.101
NETMASK=255.255.255.255
NETWORK=192.168.0.101
BROADCAST=192.168.0.101
ONBOOT=yes
NAME=loopback:0
ARP 비활성화/들어오는 패킷에 대한 허용
net.ipv4.conf.loopback:0.arp_ignore = 1
net.ipv4.conf.loopback:0.arp_announce = 2
net.ipv4.conf.loopback:0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
- rp_filter 란
FIB(Forward Information Base, Route cache라고도 부르며, "ip route"명령어 등으로 확인이 가능하다)에 정의된 정보와 일치하지 않을 경우, 들어온 패킷을 버리는 기능으로 1로 설정하면 동작함.
'Etc' 카테고리의 다른 글
Mac - ftp cli 사용하기 inetutils (2) | 2022.03.18 |
---|---|
PowerPoint - 실시간 자막/통역 자동으로 만들기 (0) | 2022.03.16 |
맥북 - 로그인시 프로그램 자동 실행 쉽게 추가하기 (0) | 2021.07.24 |
BoB 10기 모집 - 2021년 6월 4일 마감 (0) | 2021.05.27 |
Windows/Linux Command line run Exit code (0) | 2021.04.01 |