레이어 3 LACP 대상 주소 해싱은 어떻게 정확하고 구체적으로 작동합니까?


54

1 년 전의 초기 질문 ( 멀티플렉싱 된 1 Gbps 이더넷? )을 기반으로 LACP 링크가있는 새로운 ISP가있는 새로운 랙을 설치했습니다. 인터넷을 통해 1Gbps 이상의 누적으로 수천 대의 클라이언트 컴퓨터를 지원하는 개별 서버 (하나의 응용 프로그램, 하나의 IP)가 있기 때문에 이것이 필요합니다.

이 LACP 아이디어는 10GoE 스위치 및 NIC에 많은 비용을 들이지 않고 1Gbps 장벽을 무너 뜨릴 것으로 예상됩니다. 불행히도 아웃 바운드 트래픽 배포와 관련된 몇 가지 문제가 있습니다. (위의 링크 된 질문에서 Kevin Kuphal의 경고에도 불구하고)

ISP의 라우터는 일종의 Cisco입니다. (MAC 주소에서 추론했습니다.) 내 스위치는 HP ProCurve 2510G-24입니다. 그리고 서버는 Debian Lenny를 실행하는 HP DL 380 G5입니다. 한 서버는 핫 대기입니다. 애플리케이션을 클러스터링 할 수 없습니다. 다음은 IP, MAC 및 인터페이스가있는 모든 관련 네트워크 노드를 포함하는 단순화 된 네트워크 다이어그램입니다.

대체 텍스트

그것은 모든 세부 사항을 가지고 있지만 내 문제를 다루고 설명하기가 약간 어렵습니다. 간단하게하기 위해 여기에 노드와 물리적 링크로 축소 된 네트워크 다이어그램이 있습니다.

대체 텍스트

그래서 나는 새 랙에 키트를 설치하고 설치하고 ISP의 케이블을 라우터에서 연결했습니다. 두 서버 모두 내 스위치에 대한 LACP 링크가 있고 스위치에는 ISP 라우터에 대한 LACP 링크가 있습니다. 처음부터 LACP 구성이 올바르지 않다는 것을 깨달았습니다. 테스트 결과 각 서버로의 모든 트래픽이 서버 간 스위치와 스위치 간 라우터간에 하나의 물리적 GoE 링크를 통해 진행되고있는 것으로 나타났습니다.

대체 텍스트

리눅스 NIC 본딩에 관한 구글 검색과 많은 RTMF 시간으로 수정을 통해 NIC 본딩을 제어 할 수 있음을 발견했습니다. /etc/modules

# /etc/modules: kernel modules to load at boot time.
# mode=4 is for lacp
# xmit_hash_policy=1 means to use layer3+4(TCP/IP src/dst) & not default layer2 
bonding mode=4 miimon=100 max_bonds=2 xmit_hash_policy=1

loop

이로 인해 트래픽이 예상대로 두 NIC를 통해 서버를 떠나게되었습니다. 그러나 트래픽은 여전히 하나의 물리적 링크를 통해 스위치에서 라우터로 이동하고있었습니다 .

대체 텍스트

두 물리적 링크를 통과하는 트래픽이 필요합니다. 2510G-24의 관리 및 구성 안내서를 읽고 다시 읽은 후 다음을 발견했습니다.

[LACP는] 트렁크 링크를 통해 아웃 바운드 트래픽을 분산시키기 위해 SA / DA (Source-Destination Address Pair)를 사용합니다. SA / DA (소스 주소 / 대상 주소)는 스위치가 소스 / 대상 주소 쌍을 기반으로 트렁크 그룹 내의 링크에 아웃 바운드 트래픽을 분산시킵니다. 즉, 스위치는 동일한 트렁크 링크를 통해 동일한 소스 주소에서 동일한 대상 주소로 트래픽을 보내고 다른 경로를 통해 동일한 소스 주소에서 다른 대상 주소로 트래픽을 보냅니다. 트렁크의 링크.

본딩 된 링크는 하나의 MAC 주소 만 제공하는 것으로 보이므로 스위치에서 하나의 MAC (두 개가 아닌 두 개가 아닌)을 볼 수 있기 때문에 서버-라우터 경로는 항상 스위치 간에서 한 경로를 넘을 것입니다. 각 LACP의 링크에 대해).

알았다. 그러나 이것이 내가 원하는 것입니다 :

대체 텍스트

더 비싼 HP ProCurve 스위치는 2910al이 해시에서 레벨 3 소스 및 대상 주소를 사용한다는 것입니다. ProCurve 2910al 관리 및 구성 안내서 의 "트렁크 링크를 통한 아웃 바운드 트래픽 분배"섹션에서 :

트렁크를 통한 트래픽의 실제 분포는 소스 주소 및 대상 주소의 비트를 사용한 계산에 따라 다릅니다. IP 주소를 사용할 수있는 경우 계산에는 IP 소스 주소와 IP 대상 주소의 마지막 5 비트가 포함되며 그렇지 않은 경우 MAC 주소가 사용됩니다.

승인. 따라서 원하는 방식으로 작동하려면 소스 주소가 고정되어 있기 때문에 대상 주소가 핵심입니다. 이것은 내 질문으로 이어진다.

레이어 3 LACP 해싱은 어떻게 정확하고 구체적으로 작동합니까?

어떤 목적지 주소가 사용되는지 알아야합니다.

  • 클라이언트의 IP , 최종 목적지?
  • 또는 다음 물리적 링크 전송 목적지 인 라우터의 IP

아직 교체 스위치를 구입하지 않았습니다. 레이어 3 LACP 대상 주소 해싱이 필요한지 아닌지를 정확하게 이해하도록 도와주세요. 다른 쓸모없는 스위치를 구입하는 것은 옵션이 아닙니다.


13
훌륭하고 잘 연구 된 질문! 불행히도, 나는 답을 모른다 ...
Doug Luxem

ProCurve에서 각 브리지 / 트렁크의 스패닝 트리 비용을 볼 수 있습니까?
dbasnett

또한 주와 우선 순위? HP <---> Cisco에서 트렁크의 우선 순위가 같지 않아 결국 차단 될 수 있습니다. 공급 업체를 혼합하지 않은 것에 대한 광고 ????
dbasnett

6
이것은 아마도 서버 오류에서 본 가장 좋은 형식의 질문 일 것입니다
sclarson

나는 누군가가 질문에 풍부한 답변에 대해 동일한 양의주의를 기울일 수 있기를 바랍니다.
Neil Trodden

답변:


14

찾고있는 것을 일반적으로 "전송 해시 정책"또는 "전송 해시 알고리즘"이라고합니다. 프레임을 전송하는 집합 포트 그룹에서 포트 선택을 제어합니다.

802.3ad 표준에 손을 대는 것은 돈을 쓰려고하지 않기 때문에 어려운 것으로 판명되었습니다. 내가 말했듯이, 나는 당신이 찾고있는 것에 약간의 빛을 비추는 준 공식 출처에서 정보를 얻을 수있었습니다. 당 2007 오타와에서이 프레 젠 테이션, ON, CA IEEE 고속 연구 그룹 회의 802.3ad를 표준은 "프레임 유통"에 대한 특정 알고리즘을 강제하지 않습니다

이 표준은 특정 배포 알고리즘을 요구하지 않습니다. 그러나 모든 배포 알고리즘은 43.2.3에 규정 된 프레임 수집기에 의해 프레임이 수신 될 때 알고리즘이 a) 주어진 대화의 일부인 프레임의 오정렬 또는 b) 프레임의 복제를 유발하지 않아야한다. . 프레임 순서를 유지하기위한 상기 요건은 주어진 대화를 구성하는 모든 프레임이 MAC 클라이언트에 의해 생성 된 순서대로 단일 링크를 통해 전송되도록 보장함으로써 충족된다; 따라서,이 요구 사항은 프레임을 재정렬하기 위해 MAC 프레임에 정보를 추가 (또는 수정)하거나 대응하는 프레임 콜렉터 부분에 대한 버퍼링 또는 처리를 포함하지 않습니다.

따라서 스위치 / NIC 드라이버가 전송 된 프레임을 배포하는 데 사용하는 알고리즘은 해당 프레젠테이션 (아마도 표준에서 인용)에 명시된 요구 사항을 준수해야합니다. 지정된 특정 알고리즘이 없으며 준수 동작 만 정의됩니다.

지정된 알고리즘이 없지만 특정 알고리즘이 작동하는 방식을 파악하기 위해 특정 구현을 살펴볼 수 있습니다. 예를 들어, Linux 커널 "본딩"드라이버에는 기능을 적용하는 802.3ad 호환 전송 해시 정책이 있습니다 (커널 소스의 Documentation \ networking 디렉토리에있는 bond.txt 참조).

Destination Port = ((<source IP> XOR <dest IP>) AND 0xFFFF) 
    XOR (<source MAC> XOR <destination MAC>)) MOD <ports in aggregate group>

이로 인해 소스 및 대상 IP 주소와 소스 및 대상 MAC 주소가 모두 포트 선택에 영향을줍니다.

이 유형의 해싱에 사용 된 대상 IP 주소는 프레임에있는 주소입니다. 그것에 대해 잠시 생각하십시오. 서버에서 인터넷으로 떨어진 이더넷 프레임 헤더에있는 라우터의 IP 주소는 이러한 프레임의 어느 곳에도 캡슐화되지 않습니다. 라우터의 MAC 주소 는 이러한 프레임의 헤더에 있지만 라우터의 IP 주소는 없습니다. 프레임의 페이로드에 캡슐화 된 대상 IP 주소는 서버에 요청하는 인터넷 클라이언트의 주소입니다.

다양한 클라이언트 풀이 있다고 가정 할 때 소스 및 대상 IP 주소를 모두 고려하는 전송 해시 정책은 매우 적합합니다. 일반적으로, 이러한 통합 된 인프라를 통해 흐르는 트래픽에서보다 광범위하게 다양한 소스 및 / 또는 대상 IP 주소는 계층 3 기반 전송 해시 정책이 사용될 때보다 효율적인 집계를 초래합니다.

다이어그램은 인터넷에서 서버로 직접 들어오는 요청을 보여 주지만 프록시가 상황에 대해 수행 할 수있는 작업을 지적 할 가치가 있습니다. 클라이언트 요청을 서버에 프록시하는 경우 chris가 답변에서 말한 것처럼 병목 현상이 발생할 수 있습니다. 해당 프록시가 인터넷 클라이언트의 IP 주소 대신 자체 소스 IP 주소에서 요청하는 경우 엄격하게 계층 3 기반 전송 해시 정책에서 가능한 "흐름"이 줄어 듭니다.

전송 해시 정책은 802.3ad 표준의 요구 사항을 유지하는 한 계층 4 정보 (TCP / UDP 포트 번호)도 고려할 수 있습니다. 이러한 알고리즘은 질문에서 참조 할 때 Linux 커널에 있습니다. 해당 알고리즘에 대한 설명서는 조각화로 인해 트래픽이 반드시 동일한 경로를 따라 흐를 수있는 것은 아니며 알고리즘이 엄격하게 802.3ad 호환되지 않는다는 것을 경고합니다.


예, 리눅스 서버의 "전송 해시 정책" 을 정리했습니다 . (이 질문을 가능하게 한 매우 교육적인 경험입니다.) 절망스러운 스위치입니다. IP 프레임에 대한 정보에 감사드립니다. 네트워크 스택 수준이 낮을수록 약간 약합니다. 내 마음에 프레임은 라우터로 보내졌고 페이로드에서 목적지가 더 깊어졌습니다. : P
Stu Thompson

5

매우 놀랍게도 며칠 전 테스트에서 xmit_hash_policy = layer3 + 4는 직접 연결된 두 Linux 서버간에 아무런 영향을 미치지 않으며 모든 트래픽은 하나의 포트를 사용합니다. 둘 다 결합 장치를 멤버로하는 1 개의 브리지로 xen을 실행합니다. 가장 중요한 것은 브리지가 문제를 일으킬 수 있다는 것입니다. 단지 ip + port 기반 해싱을 사용한다는 점을 고려하면 전혀 의미가 없습니다.

일부 사람들은 실제로 본드 링크 (예 : ceph 사용자)를 통해 180MB 이상을 푸시 할 수 있으므로 일반적으로 작동합니다. 살펴볼 수있는 것들 :-우리는 오래된 CentOS 5.4를 사용했습니다.-OPs 예제는 두 번째 LACP가 연결을 "해체"한다는 의미입니다.

이 스레드 및 문서 읽기 등이 나에게 보여준 것 :

  • 일반적으로 모든 사람은 이것에 대해 많은 것을 알고 있으며, 본딩 방법 또는 IEEE 표준에서 이론을 인용하는 데 능숙하지만 실제 경험은 거의 없습니다.
  • RHEL 설명서가 완전하지 않습니다.
  • 본딩 문서는 2001 년부터 현재 상태가 아닙니다.
  • layer2 + 3 모드는 CentOS에없는 것 같습니다 (modinfo에 표시되지 않으며 테스트에서 활성화되면 모든 트래픽을 삭제했습니다)
  • SUSE (BONDING_MODULE_OPTS), 데비안 (-o bondXX) 및 RedHat (BONDING_OPTS) 모두 본드 별 모드 설정을 지정하는 방법이 서로 다릅니다.
  • CentOS / RHEL5 커널 모듈은 "SMP 안전"이지만 "SMP 가능"기능이 아닙니다 (페이스 북 고성능 대화 참조). 하나의 CPU 이상으로 확장되지 않으므로 더 높은 CPU 클럭 본딩> 많은 코어

경우 사람이 좋은 고성능 본딩 설정을 종료하거나, 정말 그들이 LACP, 아니 이상한 물건과 대역폭을 사용 ONE 작업 예를 문서화 새로운 작은 하우투를 작성 시간 반 걸렸다 경우 좋지 않을까 무슨 말을하는지 알고 > 하나의 링크


나 빠진다 : 데비안의 버전마다 다른 방법으로 본딩을 구성한다! 실제로 블로그 게시물에 본딩을 설정하는 방법을 문서화했으며, 이는 적절한 트래픽을 얻는 것으로 보입니다.
Stu Thompson

2

스위치에 실제 L3 대상이 표시되면 해시 할 수 있습니다. 기본적으로 2 개의 링크가있는 경우 링크 1은 홀수 번호 목적지, 링크 2는 짝수 번호 목적지라고 생각하십시오. 그렇게 구성하지 않는 한 다음 홉 IP를 사용한다고 생각하지는 않지만 대상의 MAC 주소를 사용하는 것과 거의 같습니다.

문제는 트래픽에 따라 대상이 항상 단일 서버의 단일 IP 주소이므로 다른 링크를 사용하지 않는다는 것입니다. 대상이 인터넷의 원격 시스템 인 경우 배포가 가능하지만 시스템이 대상 주소 인 웹 서버와 같은 경우 스위치는 항상 사용 가능한 링크 중 하나를 통해 트래픽을 보냅니다.

어딘가에로드 밸런서가있는 경우 "원격"IP가 항상로드 밸런서의 IP 또는 서버이기 때문에 상태가 더 나빠질 수 있습니다. 로드 밸런서와 서버에서 많은 IP 주소를 사용하면 문제를 해결할 수 있지만 이는 해킹입니다.

공급 업체의 지평을 조금 넓힐 수 있습니다. 익스트림 네트워크와 같은 다른 공급 업체는 다음과 같은 것을 해시 할 수 있습니다.

L3_L4 알고리즘 — 레이어 3 및 레이어 4, 소스 및 대상 IP 주소와 소스 및 대상 TCP 및 UDP 포트 번호가 결합되었습니다. SummitStack 및 Summit X250e, X450a, X450e 및 X650 시리즈 스위치에서 사용 가능합니다.

따라서 기본적으로 클라이언트의 소스 포트 (일반적으로 많이 변경됨)가 변경되는 한 트래픽을 고르게 분산시킵니다. 다른 벤더들도 비슷한 기능을 가지고 있다고 확신합니다.

믹스에로드 밸런서가없는 한 소스 및 대상 IP의 해싱만으로도 핫스팟을 피할 수 있습니다.


감사. 로드 밸런싱이 없습니다. 또한 인바운드 트래픽이 걱정되지 않습니다. 트래픽 비율이 50 : 1 이상입니다. (웹 비디오 응용 프로그램입니다.)
Stu Thompson

스위치의 경우 대상이 서버로 표시되므로 대상의 해시가 아무것도 얻지 못한다고 생각합니다. L2 교통 공학은 그다지 좋지 않습니다. 그리고 이런 종류의 응용 프로그램에서 '해시'는 매우 원시적입니다. 사용할 수있는 최선의 방법은 사용중인 주소에 상관없이 모든 비트를 합산하고 결과가 0 인 경우 하나의 링크 또는 1 다른 사람을 외출하십시오.
chris

위의 ProCurve 2910al 인용문에서 알 수 있듯이 해시는 소스 대상 의 마지막 5 비트에 있습니다. 따라서 하나 (내 서버)가 고정 되더라도 다른 서버는 거의 모든 클라이언트에 대해 레벨 3에서 달라질 수 있습니다. 레벨 2? 이것이 현재의 문제입니다. 해시 할 소스 주소와 대상 주소가 하나뿐입니다.
Stu Thompson

0

라우터가 아닌 클라이언트 IP에서 벗어난 것 같습니다. 실제 소스 및 대상 IP는 패킷에서 고정 된 오프셋에 있으며 해싱을 빠르게 수행 할 수 있습니다. 라우터 IP를 해싱하려면 MAC을 기반으로 한 조회가 필요합니다.


-1

방금 여기 다시 돌아 왔으므로 지금까지 배운 것들 : 회색 머리를 피하려면 layer3 + 4 정책을 지원하는 적절한 스위치가 필요하며 Linux에서도 마찬가지입니다.

대부분의 경우 ALB / SLB (mode6)라는 표준 변형 블로 토치가 더 잘 작동 할 수 있습니다. 작동 적으로 그것은 짜증납니다.

나는 종종 두 인접 시스템 사이의 대역폭을 원하기 때문에 가능한 경우 3 + 4를 사용하려고합니다.

또한 OpenVSwitch를 사용해 보았으며 트래픽 흐름을 방해하는 인스턴스가있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.