L4 스위치의 라우팅 모드중에 DSR(Direct Server Return)이라는 평범하지 않은 모드가 있습니다.
말그대로 서버에서 결과를 바로 리턴한다는 뜻이지요. 어떤것인지 다음의 그림을 보면서 설명 드리겠습니다.
위와 같은 네트워크 구조가 있다고 합시다. 위의 구조는 전형적인 DSR을 위한 구조이지만 우선 평범한 SLB(Server Load Balancer) 에 대해 설명 드리겠습니다.
편의를 위해 L3 스위치의 아이피는 표시하지 않았습니다. 123.123.123.123은 외부에 공개되는 아이피입니다.
저 아이피를 통해 웹서비스에 접속할 수 있습니다. 10.1.1.x 대의 아이피들은 잘 아시겠지만 내부 네트워크입니다.
이것을 보시면 외부 인터넷에서 L4를 거치지 않고는 웹서버들에게 접근할 수 없다는 것을 알 수 있습니다.
일반적인 로드밸런싱은 다음과 같은 방법으로 이루어 집니다. DSR용 구조라 설명이 좀 복잡합니다;;
SLB 접속 :
Internet → A → L3 Switch → B → L4 Switch → C → L3 Switch → D → Web Server 1 → D → L3 Switch → C → L4 Switch → B → L3 Switch → A → Internet
설명을 적으면서 계속 잘못되었다는 생각이 들지만 중요한점은 클라이언트의 Request와 서버의 Response가 둘다 L4를 거쳐간다는것만 알아주시면 됩니다.
하지만 DSR구조는 L4가 서버들의 로드밸런싱은 하지만 리턴은 서버에서 클라이언트에게 바로 리턴합니다. L4를 거치지 않습니다.
그렇다면 다음과 같은 방법으로 이루어 지겠죠.
DSR 접속 :
Internet → A → L3 Switch → B → L4 Switch → C → L3 Switch → D → Web Server 1 → D → L3 Switch → A → Internet
어떤 차이가 있는지 보이시나요? 답장은 L4를 거치지 않고 바로 클라이언트에게 전송됩니다.
하지만 여기서 서버에 추가적인 설정이 필요합니다.
클라이언트는 분명히 123.123.123.123으로 Request를 보냈기 때문에 마찬가지로 123.123.123.123으로부터 Response가 돌아와야 합니다.
하지만 10.1.1.2아이피를 가지고 있는 서버가 반환을 하였죠. 클라이언트의 컴퓨터는 답장을 받았지만 잘못된 패킷으로 인지하고 버려버리게 됩니다.
이래선 통신이 제대로 되질 못하죠. 해결 방법은 서버의 Loopback 주소를 변경하면 됩니다.
하지만 제가 무식하게 lo의 아이피를 127.0.0.1에서 123.123.123.123으로 바꿨더니 서버가 바보가 되더군요.
채널본딩을 사용하면 됩니다. lo가 특수한 장치라서 정상적인 설정 방법으로는 채널본딩이 안되지만 다음과 같은 명령어는 잘됩니다.
/sbin/ifconfig lo:0 123.123.123.123 netmask 255.255.255.255
이때 주의할것인 서브넷마스크가 255.255.255.255여야 한다는겁니다. 이렇게 함으로써 잘못된 Loopback주소를 브로드캐스팅 하는것을 막을 수있습니다.
[eye@theeye /] $ ifconfig
eth0 Link encap:Ethernet HWaddr 00:0B:DB:95:0E:E1
inet addr:123.123.123.123 Bcast:123.123.123.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:30871472 errors:0 dropped:0 overruns:0 frame:0
TX packets:42803475 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:414432160 (395.2 MiB) TX bytes:1433412018 (1.3 GiB)
Interrupt:185
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:30192781 errors:0 dropped:0 overruns:0 frame:0
TX packets:30192781 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1340081608 (1.2 GiB) TX bytes:1340081608 (1.2 GiB)
lo:0 Link encap:Local Loopback
inet addr:123.123.123.123 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1
[출처] [L4 SWITCH] DSR 모드에서의 서버 네트워크 설정 방법|작성자 박종환
추가적으로 /etc/sysctl.conf에 다음의 내용을 추가하여 주도록 합시다.
이후에 sysctl -p 명령을 통해 설정을 적용하시면 됩니다