안녕하세요?
최근에 LACP 구성을 새로 만들어서 테스트를 좀 했는데 대역폭 분산이 잘 안되더라고요.
클라이언트 2대에서 커넥션을 4-5개씩 만들어서 해봤는데도 전체 합계가 1Gbps 를 넘지 못해가지고 알아보니까.
분산 알고리즘이 src-dst-mac 으로 되어 있더라고요. (스위치는 DELL 5548 입니다.)
이전에 DELL 8132F 모델은 Enhanced Hashing 이라고 해서, 출발지와 목적지 포트까지도 이용해서 분산을 하는 알고리즘이 지원됐는데,
5548모델은 급이 낮아서인지 L3 정보인 IP까지만 보고 분산을 하는 것 같습니다.(매뉴얼에는 src-dst-mac, src-dst-ip, src-dst-mac-ip 까지 있네요.)
2포트 LACP <-> 4포트 LACP 서버간에 커넥션을 여러개 만들어서 전체 대역폭이 2Gbps까지 쓰도록 하고 싶었는데,
그렇게 하려면 port 까지 보고 분산을 시켜줘야 하는데 그게 스위치에서 안되는 것이었습니다.
아무튼 결론은 스위치가 별로라면 스위치에 의존적인 LACP를 쓰는 것보다는 그냥 OS에서 지원하는 본딩 방식이 나은 것 같습니다.
리눅스의 경우에는 balanced-alb 모드가 괜찮아 보이네요.
LACP는 반드시 한 스위치에 몰아서 꽂아야 되는 반면에, 이 경우에는 슬레이브 노드의 랜선을 각각 다른 스위치에 꽂아도 된다고 나와있네요.
각각 다른 스위치에 꽂았을 때, 경우에 따라서는 트래픽이 이상하게 돌아올수도 있겠지만, 한 스위치의 장애를 회피하는 목적으로 사용할 수도 있을 것 같습니다.
https://www.kernel.org/doc/Documentation/networking/bonding.txt
리눅스 bonding 문서를 보시면, balanced-alb의 경우 스위치의 지원은 필요하지 않다고 나와 있습니다.
balanced-alb의 경우에 전송하는 경우는 알아서 나눠서 어댑터 별로 나눠서 하고,
수신하는 경우에는 arp 응답을 상대측 서버마다 다르게 하며 상대측에서 mac address로 분산이 되도록 되어 있습니다.
물론 서버 자체에서 하는 것보다는 스위치쪽에서 잘 해주는 것이 낫겠죠.
패킷을 보내는 거야 내가 내가 가진 NIC 들에 알아서 나눠 보내주면 되지만, 남이 보내주는 것은 스위치에서 보내주는 NIC으로 받아야 되니까요.
L4 패킷까지 분석해서 처리할 수 있어서 포트 기반으로 분산을 한다면 아주 좋았겠죠. 그럼 서버 두 대간의 1:1 연결해서도 커넥션이 많으면 총 대역폭이 늘어날 테니까요.
8132F는 그게 됐길래 5548도 될 줄 알았는데 안되더라구요.