Chính xác và cụ thể lớp băm địa chỉ đích LACP lớp 3 hoạt động như thế nào?


54

Dựa trên một câu hỏi trước đó hơn một năm trước ( Ethernet 1 Gbps đa kênh? ), Tôi đã tắt và thiết lập một giá đỡ mới với một ISP mới với các liên kết LACP ở khắp mọi nơi. Chúng tôi cần điều này bởi vì chúng tôi có các máy chủ riêng lẻ (một ứng dụng, một IP) phục vụ hàng ngàn máy tính khách trên Internet vượt quá mức tích lũy 1Gbps.

Ý tưởng LACP này được cho là sẽ cho phép chúng tôi phá vỡ rào cản 1Gbps mà không tốn nhiều tiền cho các thiết bị chuyển mạch và NIC 10GoE. Thật không may, tôi đã gặp phải một số vấn đề liên quan đến phân phối lưu lượng truy cập đi. (Điều này bất chấp cảnh báo của Kevin Kuphal trong câu hỏi được liên kết ở trên.)

Bộ định tuyến của ISP là một loại Cisco. (Tôi đã suy luận rằng từ địa chỉ MAC.) Công tắc của tôi là HP ProCurve 2510G-24. Và các máy chủ là HP DL 380 G5 chạy Debian Lenny. Một máy chủ là một chế độ chờ nóng. Ứng dụng của chúng tôi không thể được phân cụm. Dưới đây là sơ đồ mạng được đơn giản hóa bao gồm tất cả các nút mạng có liên quan với IP, MAC và giao diện.

văn bản thay thế

Mặc dù nó có tất cả các chi tiết, nó hơi khó để làm việc và mô tả vấn đề của tôi. Vì vậy, để đơn giản, đây là sơ đồ mạng được rút gọn thành các nút và liên kết vật lý.

văn bản thay thế

Vì vậy, tôi đã tắt và cài đặt bộ dụng cụ của mình tại giá đỡ mới và kết nối hệ thống cáp của ISP từ bộ định tuyến của họ. Cả hai máy chủ đều có liên kết LACP với công tắc của tôi và công tắc có liên kết LACP với bộ định tuyến ISP. Ngay từ khi bắt đầu, tôi đã nhận ra rằng cấu hình LACP của mình không chính xác: thử nghiệm cho thấy tất cả lưu lượng truy cập đến và từ mỗi máy chủ đều đi qua một liên kết GoE vật lý duy nhất giữa cả máy chủ chuyển đổi và chuyển đổi sang bộ định tuyến.

văn bản thay thế

Với một số tìm kiếm trên google và rất nhiều thời gian RTMF liên quan đến liên kết với linux linux, tôi phát hiện ra rằng tôi có thể kiểm soát liên kết NIC bằng cách sửa đổi /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

Điều này có lưu lượng truy cập rời khỏi máy chủ của tôi trên cả hai NIC như mong đợi. Tuy nhiên, giao thông đã được di chuyển từ switch đến router trên chỉ có một liên kết vật lý, vẫn còn .

văn bản thay thế

Chúng tôi cần lưu lượng truy cập đi qua cả các liên kết vật lý. Sau khi đọc và đọc lại Hướng dẫn quản lý và cấu hình của 2510G-24 , tôi thấy:

[LACP sử dụng] cặp địa chỉ nguồn đích (SA / DA) để phân phối lưu lượng truy cập đi qua các liên kết trung kế. SA / DA (địa chỉ nguồn / địa chỉ đích) khiến công tắc phân phối lưu lượng truy cập đi đến các liên kết trong nhóm trung kế trên cơ sở các cặp địa chỉ nguồn / đích. Nghĩa là, công tắc gửi lưu lượng truy cập từ cùng một địa chỉ nguồn đến cùng một địa chỉ đích thông qua cùng một liên kết trung kế và gửi lưu lượng truy cập từ cùng một địa chỉ nguồn đến một địa chỉ đích khác nhau thông qua một liên kết khác nhau, tùy thuộc vào việc luân chuyển các chỉ định đường dẫn giữa liên kết trong thân cây.

Dường như một liên kết ngoại quan chỉ hiển thị một địa chỉ MAC và do đó, đường dẫn máy chủ đến bộ định tuyến của tôi luôn đi qua một đường dẫn từ bộ chuyển đổi sang bộ định tuyến vì công tắc nhìn thấy nhưng một MAC (chứ không phải hai - một từ mỗi cổng) cho cả các liên kết LACP'd.

Hiểu rồi. Nhưng đây là những gì tôi muốn:

văn bản thay thế

Một công tắc HP ProCurve đắt tiền hơn là 2910al sử dụng địa chỉ nguồn & đích cấp 3 trong hàm băm. Từ phần "Phân phối lưu lượng truy cập đi qua các liên kết trung kế" trong Hướng dẫn cấu hình và quản lý của ProCurve 2910al :

Phân phối thực tế của lưu lượng truy cập thông qua một trung kế phụ thuộc vào tính toán sử dụng các bit từ Địa chỉ nguồn và địa chỉ đích. Khi có địa chỉ IP, phép tính bao gồm năm bit cuối cùng của địa chỉ nguồn IP và địa chỉ đích IP, nếu không thì địa chỉ MAC được sử dụng.

ĐỒNG Ý. Vì vậy, để điều này hoạt động theo cách tôi muốn, địa chỉ đích là chìa khóa vì địa chỉ nguồn của tôi được cố định. Điều này dẫn đến câu hỏi của tôi:

Chính xác và cụ thể như thế nào băm lớp LACP hoạt động?

Tôi cần biết địa chỉ đích nào được sử dụng:

  • IP của khách hàng , đích đến cuối cùng?
  • Hoặc IP của bộ định tuyến , đích truyền liên kết vật lý tiếp theo.

Chúng tôi đã không đi và mua một công tắc thay thế chưa. Xin hãy giúp tôi hiểu chính xác nếu băm địa chỉ đích LACP lớp 3 là hay không phải là thứ tôi cần. Mua một công tắc vô dụng khác không phải là một lựa chọn.


13
Tuyệt vời, câu hỏi nghiên cứu tốt! Thật không may, tôi không biết câu trả lời ...
Doug Luxem

Bạn có thể xem chi phí cây bao trùm của mỗi cây cầu / thân cây trên ProCurve không?
dbasnett

Còn nhà nước và ưu tiên? Có vẻ như khi HP <---> Cisco mà các trung kế có thể không có cùng mức độ ưu tiên và cuối cùng bị chặn. Một quảng cáo cho các nhà cung cấp không trộn ????
dbasnett

6
Đây có thể là câu hỏi được định dạng tốt nhất tôi từng thấy trên Server Fault
sclarson

Tôi hy vọng ai đó có thể quan tâm như vậy đối với câu trả lời như đã được yêu thích trong câu hỏi.
Neil Trorupt

Câu trả lời:


14

Những gì bạn đang tìm kiếm thường được gọi là "chính sách băm truyền" hoặc "thuật toán băm truyền". Nó kiểm soát việc lựa chọn một cổng từ một nhóm các cổng tổng hợp để truyền khung.

Bắt tay với tiêu chuẩn 802.3ad đã được chứng minh là khó khăn vì tôi không sẵn sàng chi tiền cho nó. Phải nói rằng, tôi đã có thể lượm lặt được một số thông tin từ một nguồn bán chính thức làm sáng tỏ những gì bạn đang tìm kiếm. Mỗi bài trình bày này từ năm 2007 Ottawa, ON, CA IEEE cao Study Group Speed họp tiêu chuẩn 802.3ad không uỷ quyền thuật toán đặc biệt cho các "nhà phân phối khung":

Tiêu chuẩn này không bắt buộc bất kỳ thuật toán phân phối cụ thể nào; tuy nhiên, bất kỳ thuật toán phân phối nào cũng phải đảm bảo rằng, khi các khung được nhận bởi Bộ sưu tập khung như được chỉ định trong 43.2.3, thuật toán sẽ không gây ra a) Sắp xếp sai các khung là một phần của bất kỳ cuộc hội thoại nào hoặc b) Sao chép các khung . Yêu cầu trên để duy trì trật tự khung được đáp ứng bằng cách đảm bảo rằng tất cả các khung tạo một cuộc hội thoại nhất định được truyền trên một liên kết theo thứ tự mà chúng được tạo bởi Máy khách MAC; do đó, yêu cầu này không liên quan đến việc bổ sung (hoặc sửa đổi) bất kỳ thông tin nào vào khung MAC, cũng như bất kỳ bộ đệm hoặc xử lý nào trên một phần của Trình thu thập khung tương ứng để sắp xếp lại các khung.

Vì vậy, bất kỳ thuật toán nào mà trình điều khiển chuyển đổi / NIC sử dụng để phân phối các khung truyền phải tuân thủ các yêu cầu như đã nêu trong bản trình bày đó (có lẽ, được trích dẫn từ tiêu chuẩn). Không có thuật toán cụ thể được chỉ định, chỉ có một hành vi tuân thủ được xác định.

Mặc dù không có thuật toán nào được chỉ định, chúng ta có thể xem xét một triển khai cụ thể để cảm nhận về cách thuật toán đó có thể hoạt động. Ví dụ, trình điều khiển "liên kết" nhân Linux có chính sách băm truyền tương thích theo chuẩn 802.3ad áp dụng chức năng (xem bonding.txt trong thư mục Documentation \ network của nguồn kernel):

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

Điều này khiến cả địa chỉ IP nguồn và đích, cũng như địa chỉ MAC nguồn và đích đều ảnh hưởng đến lựa chọn cổng.

Địa chỉ IP đích được sử dụng trong kiểu băm này sẽ là địa chỉ có trong khung. Hãy dành một giây để suy nghĩ về điều đó. Địa chỉ IP của bộ định tuyến, trong tiêu đề khung Ethernet từ máy chủ của bạn tới Internet, không được gói gọn ở bất kỳ đâu trong khung như vậy. Địa chỉ MAC của bộ định tuyến có trong tiêu đề của khung như vậy, nhưng địa chỉ IP của bộ định tuyến thì không. Địa chỉ IP đích được gói gọn trong tải trọng của khung sẽ là địa chỉ của ứng dụng khách Internet thực hiện yêu cầu đến máy chủ của bạn.

Chính sách băm truyền có tính đến cả địa chỉ IP nguồn và đích, giả sử bạn có một nhóm khách hàng rất đa dạng, sẽ làm khá tốt cho bạn. Nói chung, các địa chỉ IP nguồn và / hoặc đích đa dạng rộng rãi hơn trong lưu lượng truy cập trên cơ sở hạ tầng tổng hợp như vậy sẽ dẫn đến kết hợp hiệu quả hơn khi sử dụng chính sách băm truyền dựa trên lớp 3.

Sơ đồ của bạn hiển thị các yêu cầu đến trực tiếp từ các máy chủ từ Internet, nhưng đáng để chỉ ra một proxy có thể làm gì với tình huống này. Nếu sau đó bạn đang ủy quyền các yêu cầu của máy khách đến máy chủ của mình, vì chris nói về câu trả lời của anh ấy thì bạn có thể gây ra tắc nghẽn. Nếu proxy đó thực hiện yêu cầu từ địa chỉ IP nguồn của chính nó, thay vì từ địa chỉ IP của máy khách Internet, bạn sẽ có ít "luồng" hơn trong chính sách băm truyền dựa trên lớp 3 nghiêm ngặt.

Chính sách băm truyền cũng có thể đưa thông tin lớp 4 (số cổng TCP / UDP) vào, miễn là nó tuân theo các yêu cầu trong tiêu chuẩn 802.3ad. Một thuật toán như vậy là trong nhân Linux, như bạn tham khảo trong câu hỏi của mình. Xin lưu ý rằng tài liệu cho thuật toán đó cảnh báo rằng, do sự phân mảnh, lưu lượng truy cập có thể không nhất thiết phải chạy dọc theo cùng một đường dẫn và do đó, thuật toán không tuân thủ nghiêm ngặt theo chuẩn 802.3ad.


Có, tôi đã sắp xếp "chính sách băm truyền" của máy chủ linux . (Một kinh nghiệm rất giáo dục đã làm cho câu hỏi này trở nên khả thi.) Đó là công tắc chết tiệt có tôi trong một chiếc dưa muối. Cảm ơn thông tin về các khung IP - Tôi hơi yếu với mức độ thấp hơn của ngăn xếp mạng. Trong tâm trí của tôi, khung được gửi đến bộ định tuyến, với điểm đến sâu hơn trong tải trọng. : P
Stu Thompson

5

rất ngạc nhiên, một vài ngày trước thử nghiệm của chúng tôi cho thấy xmit_hash_policy = layer3 + 4 sẽ không có bất kỳ ảnh hưởng nào giữa hai máy chủ linux được kết nối trực tiếp, tất cả lưu lượng truy cập sẽ sử dụng một cổng. Cả hai chạy xen kẽ với 1 cây cầu có thiết bị liên kết là thành viên. Rõ ràng nhất, cây cầu có thể gây ra sự cố, chỉ là nó không có ý nghĩa TẠI TẤT CẢ khi xem xét việc băm dựa trên cổng ip + sẽ được sử dụng.

Tôi biết một số người thực sự quản lý để đẩy 180 MB + qua các liên kết ngoại quan (tức là người dùng ceph), vì vậy nó hoạt động chung. Những điều có thể xem xét: - Chúng tôi đã sử dụng CentOS 5.4 cũ - Ví dụ về OP có nghĩa là LACP thứ hai "tháo gỡ" các kết nối - điều đó có hợp lý không?

Những gì chủ đề và tài liệu đọc vv vv đã cho tôi thấy:

  • Nói chung mọi người đều biết rất nhiều về điều này, rất giỏi trong việc học thuộc lý thuyết từ cách liên kết hoặc thậm chí các tiêu chuẩn của IEEE, trong khi kinh nghiệm thực tế gần như không có.
  • Tài liệu của RHEL không đầy đủ nhất.
  • Các tài liệu liên kết là từ năm 2001 và không đủ hiện tại
  • Chế độ layer2 + 3 dường như không có trong CentOS (nó không hiển thị trong modinfo và trong thử nghiệm của chúng tôi, nó đã giảm tất cả lưu lượng truy cập khi được bật)
  • Điều đó không giúp ích gì cho SUSE (BONDING_MODULE_OPTS), Debian (-o bondXX) và RedHat (BONDING_OPTS) đều có các cách khác nhau để chỉ định cài đặt chế độ cho mỗi liên kết
  • Mô-đun hạt nhân CentOS / RHEL5 là "SMP an toàn" nhưng không phải là "SMP có khả năng" (xem thảo luận về hiệu suất cao của facebook) - nó không mở rộng trên một CPU, do đó, với đồng hồ cpu cao hơn> nhiều lõi

Nếu bất cứ ai kết thúc một thiết lập liên kết hiệu suất cao tốt, hoặc thực sự biết những gì họ đang nói về nó sẽ thật tuyệt vời nếu họ mất nửa giờ để viết một tài liệu nhỏ mới về một tài liệu ví dụ sử dụng LACP, không có nội dung và băng thông lẻ > một liên kết


Nó trở nên tồi tệ hơn: Các phiên bản khác nhau của Debian có các phương pháp khác nhau để định cấu hình liên kết! Tôi thực sự đã ghi lại cách tôi thiết lập liên kết của mình trong một bài đăng trên blog, dường như có được lưu lượng truy cập khá.
Stu Thompson

2

Nếu công tắc của bạn nhìn thấy đích L3 thực sự, nó có thể băm vào đó. Về cơ bản nếu bạn đã có 2 liên kết, hãy nghĩ rằng liên kết 1 dành cho các điểm đến được đánh số lẻ, liên kết 2 dành cho các điểm đến được đánh số chẵn. Tôi không nghĩ họ từng sử dụng IP next-hop trừ khi được cấu hình để làm như vậy, nhưng điều đó khá giống với việc sử dụng địa chỉ MAC của mục tiêu.

Vấn đề bạn sẽ gặp phải là, tùy thuộc vào lưu lượng truy cập của bạn, đích đến sẽ luôn là địa chỉ IP duy nhất của một máy chủ để bạn không bao giờ sử dụng liên kết khác đó. Nếu đích là hệ thống từ xa trên internet, bạn sẽ nhận được phân phối đồng đều, nhưng nếu đó là một máy chủ web, nơi hệ thống của bạn là địa chỉ đích, thì công tắc sẽ luôn gửi lưu lượng truy cập chỉ qua một trong các liên kết có sẵn.

Bạn sẽ ở trong tình trạng tồi tệ hơn nữa nếu có bộ cân bằng tải ở đâu đó trong đó, bởi vì sau đó IP "từ xa" sẽ luôn là IP của bộ cân bằng tải hoặc máy chủ. Bạn có thể khắc phục điều đó một chút bằng cách sử dụng nhiều địa chỉ IP trên bộ cân bằng tải và máy chủ, nhưng đó là một hack.

Bạn có thể muốn mở rộng chân trời của các nhà cung cấp một chút. Các nhà cung cấp khác, chẳng hạn như các mạng cực đoan, có thể băm vào những thứ như:

Thuật toán L3_L4 Lớp 3 và Lớp 4, địa chỉ IP nguồn và đích kết hợp và số cổng TCP và UDP nguồn và đích. Có sẵn trên các thiết bị chuyển mạch dòng SummitStack và Summit X250e, X450a, X450e và X650.

Vì vậy, về cơ bản miễn là cổng nguồn của khách hàng (thường thay đổi rất nhiều) thay đổi, bạn sẽ phân phối lưu lượng đều. Tôi chắc rằng các nhà cung cấp khác có tính năng tương tự.

Ngay cả băm trên IP nguồn và IP đích cũng đủ để tránh các điểm nóng, miễn là bạn không có bộ cân bằng tải trong hỗn hợp.


Cảm ơn. Không cân bằng tải. Và tôi không lo lắng về lưu lượng truy cập trong nước - chúng tôi có tỷ lệ lưu lượng truy cập> 50: 1: (Đây là một ứng dụng video trên web.)
Stu Thompson

Tôi nghĩ rằng trong trường hợp của bạn, hàm băm trên đích sẽ không giúp bạn được gì vì công tắc sẽ xem đích là máy chủ của bạn. Kỹ thuật giao thông L2 không tốt lắm. Và 'băm' trong loại ứng dụng này sẽ khá nguyên thủy - hình dung tốt nhất bạn có thể làm là thêm tất cả các bit trong bất kỳ địa chỉ nào đang sử dụng và nếu kết quả là 0 đi ra một liên kết hoặc 1 liên kết đi ra ngoài kia
chris

Theo tôi hiểu từ trích dẫn ProCurve 2910al ở trên của tôi, hàm băm nằm trên năm bit cuối cùng của nguồn đích. Vì vậy, không có vấn đề gì nếu một (máy chủ của tôi) được sửa chữa, cái còn lại sẽ thay đổi cho hầu hết mọi khách hàng ở Cấp 3. Cấp 2? Đó là vấn đề hiện tại của tôi - chỉ có một nguồn và một địa chỉ đích để băm.
Stu Thompson

0

Tôi sẽ đoán rằng nó tắt IP của khách hàng, không phải bộ định tuyến. IP đích và IP đích sẽ ở mức bù cố định trong gói và điều đó sẽ nhanh chóng thực hiện băm. Băm IP bộ định tuyến sẽ yêu cầu tra cứu dựa trên MAC, phải không?


-1

Vì tôi mới kết thúc ở đây, một vài điều tôi đã học được bây giờ: Để tránh tóc bạc, bạn cần một công tắc tốt hỗ trợ chính sách layer3 + 4, và tương tự trong Linux.

Trong một vài trường hợp, ống thổi biến đổi tiêu chuẩn được gọi là ALB / SLB (mode6) có thể hoạt động tốt hơn. Hoạt động nó hút mặc dù.

Bản thân tôi cố gắng sử dụng 3 + 4 nếu có thể, vì tôi thường muốn băng thông đó giữa hai hệ thống liền kề.

Tôi cũng đã thử với OpenVSwitch và đã từng có trường hợp làm gián đoạn luồng lưu lượng (mỗi gói đầu tiên bị mất ... tôi không biết)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.