Bagaimana tepatnya & khusus cara hashing alamat tujuan layer 3 LACP bekerja?

54

Berdasarkan pertanyaan sebelumnya lebih dari setahun yang lalu ( Multiplexed 1 Gbps Ethernet? ), Saya pergi dan memasang rak baru dengan ISP baru dengan tautan LACP di semua tempat. Kami memerlukan ini karena kami memiliki server individual (satu aplikasi, satu IP) yang melayani ribuan komputer klien di seluruh Internet melebihi kumulatif 1Gbps.

Ide LACP ini seharusnya memungkinkan kita menembus penghalang 1Gbps tanpa menghabiskan banyak uang pada switch 10GoE dan NIC. Sayangnya, saya mengalami beberapa masalah terkait dengan distribusi lalu lintas keluar. (Ini terlepas dari peringatan Kevin Kuphal dalam pertanyaan terkait di atas.)

Router ISP adalah sejenis Cisco. (Saya menyimpulkan itu dari alamat MAC.) Switch saya adalah HP ProCurve 2510G-24. Dan servernya adalah HP DL 380 G5 yang menjalankan Debian Lenny. Satu server adalah siaga panas. Aplikasi kita tidak dapat dikelompokkan. Berikut adalah diagram jaringan yang disederhanakan yang mencakup semua node jaringan yang relevan dengan IP, MAC, dan antarmuka.

teks alternatif

Meskipun memiliki semua detail, agak sulit untuk dikerjakan dan menjelaskan masalah saya. Jadi, demi kesederhanaan, ini adalah diagram jaringan yang direduksi menjadi simpul dan tautan fisik.

teks alternatif

Jadi saya pergi dan menginstal kit saya di rak baru dan menghubungkan kabel ISP saya dari router mereka. Kedua server memiliki tautan LACP ke sakelar saya, dan sakelar tersebut memiliki tautan LACP ke router ISP. Sejak awal saya menyadari bahwa konfigurasi LACP saya tidak benar: pengujian menunjukkan semua lalu lintas ke dan dari setiap server melewati satu tautan fisik GoE secara eksklusif antara server-to-switch dan switch-to-router.

teks alternatif

Dengan beberapa pencarian Google dan banyak waktu RTMF mengenai ikatan NIC linux, saya menemukan bahwa saya dapat mengontrol ikatan NIC dengan memodifikasi /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

Ini membuat traffic meninggalkan server saya melalui kedua NIC seperti yang diharapkan. Tapi lalu lintas bergerak dari saklar ke router lebih hanya satu link fisik, masih .

teks alternatif

Kami membutuhkan lalu lintas yang melewati kedua tautan fisik. Setelah membaca dan membaca ulang Panduan Manajemen dan Konfigurasi 2510G-24 , saya menemukan:

[LACP menggunakan] pasangan alamat sumber-tujuan (SA / DA) untuk mendistribusikan lalu lintas keluar melalui tautan trunk. SA / DA (alamat sumber / alamat tujuan) menyebabkan sakelar untuk mendistribusikan lalu lintas keluar ke tautan dalam grup trunk atas dasar pasangan alamat sumber / tujuan. Yaitu, saklar mengirim lalu lintas dari alamat sumber yang sama ke alamat tujuan yang sama melalui tautan trunked yang sama, dan mengirimkan lalu lintas dari alamat sumber yang sama ke alamat tujuan yang berbeda melalui tautan yang berbeda, tergantung pada rotasi penugasan jalur di antara tautan di bagasi.

Tampaknya sebuah tautan berikat hanya menyajikan satu alamat MAC, dan oleh karena itu jalur server-ke-router saya akan selalu lebih dari satu jalur dari switch-ke-router karena switch melihat tetapi satu MAC (dan bukan dua - satu dari setiap port) untuk kedua tautan LACP.

Mengerti. Tapi ini yang saya inginkan:

teks alternatif

Sakelar HP ProCurve yang lebih mahal adalah 2910al yang menggunakan sumber & alamat tujuan level 3 dalam hash-nya. Dari bagian "Distribusi Lalu Lintas Lintas Lintas Trunked" pada Panduan Manajemen dan Konfigurasi ProCurve 2910al :

Distribusi lalu lintas aktual melalui trunk bergantung pada perhitungan menggunakan bit dari Alamat Sumber dan alamat Tujuan. Ketika alamat IP tersedia, perhitungan mencakup lima bit terakhir dari alamat sumber IP dan alamat tujuan IP, jika tidak, alamat MAC yang digunakan.

BAIK. Jadi, agar ini berfungsi seperti yang saya inginkan, alamat tujuan adalah kuncinya karena alamat sumber saya sudah diperbaiki. Ini mengarah ke pertanyaan saya:

Bagaimana tepatnya & khusus cara kerja hashing layer 3 LACP?

Saya perlu tahu alamat tujuan mana yang digunakan:

  • IP klien , tujuan akhir?
  • Atau IP router , tujuan transmisi tautan fisik berikutnya.

Kami belum pergi dan membeli sakelar pengganti. Tolong bantu saya mengerti persis jika hashing alamat tujuan layer 3 LACP adalah atau tidak apa yang saya butuhkan. Membeli saklar lain yang tidak berguna bukanlah suatu pilihan.

Stu Thompson
sumber
13
Pertanyaan yang sangat bagus, sudah diteliti dengan baik! Sayangnya, saya tidak tahu jawabannya ...
Doug Luxem
Bisakah Anda melihat biaya spanning tree dari masing-masing jembatan / trunk di ProCurve?
dbasnett
Juga negara dan prioritas? Tampaknya ketika HP <---> Cisco bahwa bagasi mungkin tidak memiliki prioritas yang sama dan akhirnya diblokir. Iklan untuk tidak mencampur vendor ????
dbasnett
6
Ini mungkin pertanyaan terformat terbaik yang pernah saya lihat di Server Fault
sclarson
Saya berharap seseorang dapat mengambil jumlah yang sama dari jawaban seperti yang dicurahkan pada pertanyaan.
Neil Trodden

Jawaban:

14

Apa yang Anda cari biasanya disebut "transmit hash policy" atau "transmit hash algoritme". Ini mengontrol pemilihan port dari sekelompok port agregat yang digunakan untuk mengirimkan frame.

Mendapatkan tangan saya pada standar 802.3ad terbukti sulit karena saya tidak mau mengeluarkan uang untuk itu. Karena itu, saya dapat memperoleh beberapa informasi dari sumber semi-resmi yang memberi penjelasan tentang apa yang Anda cari. Per presentasi dari Ottawa, ON, CA IEEE High Speed ​​Study Group 2007 yang memenuhi standar 802.3ad tidak mengamanatkan algoritma tertentu untuk "distributor bingkai":

Standar ini tidak mengamanatkan algoritma distribusi tertentu apa pun; namun, setiap algoritma distribusi harus memastikan bahwa, ketika frame diterima oleh seorang Collector Frame sebagaimana ditentukan dalam 43.2.3, algoritma tidak akan menyebabkan a) kesalahan pemesanan frame yang merupakan bagian dari setiap percakapan yang diberikan, atau b) Duplikasi frame . Persyaratan di atas untuk mempertahankan pemesanan bingkai dipenuhi dengan memastikan bahwa semua frame yang menyusun percakapan yang diberikan ditransmisikan pada satu tautan dalam urutan bahwa mereka dihasilkan oleh Klien MAC; karenanya, persyaratan ini tidak melibatkan penambahan (atau modifikasi) informasi apa pun ke bingkai MAC, maupun penyanggaan atau pemrosesan pada bagian Kolektor Bingkai yang sesuai untuk memesan kembali bingkai.

Jadi, algoritma apa pun yang digunakan oleh driver switch / NIC untuk mendistribusikan frame yang ditransmisikan harus mematuhi persyaratan sebagaimana dinyatakan dalam presentasi itu (yang, mungkin, mengutip dari standar). Tidak ada algoritma khusus yang ditentukan, hanya perilaku yang memenuhi syarat yang ditentukan.

Meskipun tidak ada algoritma yang ditentukan, kita dapat melihat implementasi tertentu untuk merasakan bagaimana algoritma tersebut dapat bekerja. Pengandar "bonding" kernel Linux, misalnya, memiliki kebijakan hash pengiriman yang kompatibel dengan 802.3ad yang berlaku fungsi (lihat bonding.txt dalam direktori Documentation \ networking dari sumber kernel):

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

Ini menyebabkan sumber dan alamat IP tujuan, serta sumber dan alamat MAC tujuan, mempengaruhi pemilihan port.

Alamat IP tujuan yang digunakan dalam jenis hashing ini adalah alamat yang ada dalam bingkai. Luangkan waktu sejenak untuk memikirkannya. Alamat IP router, di header frame Ethernet jauh dari server Anda ke Internet, tidak dienkapsulasi di mana pun dalam frame seperti itu. Alamat MAC router ada di header bingkai seperti itu, tetapi alamat IP router tidak. Alamat IP tujuan yang dienkapsulasi dalam muatan frame akan menjadi alamat klien Internet yang membuat permintaan ke server Anda.

Kebijakan hash pengiriman yang memperhitungkan baik sumber dan alamat IP tujuan, dengan asumsi Anda memiliki kumpulan klien yang sangat beragam, akan cukup baik untuk Anda. Secara umum, sumber dan / atau alamat IP tujuan yang lebih beragam dalam lalu lintas yang mengalir melintasi infrastruktur agregat akan menghasilkan agregasi yang lebih efisien ketika kebijakan hash transmit berbasis layer 3 digunakan.

Diagram Anda menunjukkan permintaan yang datang langsung ke server dari Internet, tetapi ada baiknya menunjukkan apa yang mungkin dilakukan proxy terhadap situasi tersebut. Jika Anda mem-proxy-kan permintaan klien ke server Anda, ketika chris berbicara tentang jawabannya, maka Anda dapat menyebabkan kemacetan. Jika proksi tersebut membuat permintaan dari alamat IP sumbernya sendiri, bukan dari alamat IP klien Internet, Anda akan memiliki lebih sedikit "aliran" dalam kebijakan hash transmit berbasis 3 layer yang ketat.

Kebijakan hash pengiriman juga dapat mempertimbangkan informasi layer 4 (nomor port TCP / UDP), asalkan tetap dengan persyaratan dalam standar 802.3ad. Algoritme semacam itu ada di kernel Linux, seperti yang Anda rujuk dalam pertanyaan Anda. Berhati-hatilah bahwa dokumentasi untuk algoritma tersebut memperingatkan bahwa, karena fragmentasi, lalu lintas mungkin tidak selalu mengalir di sepanjang jalur yang sama dan, dengan demikian, algoritme tersebut tidak sepenuhnya sesuai dengan 802.3ad.

Evan Anderson
sumber
Ya, saya telah menyortir "transmit hash policy" server linux . (Pengalaman yang sangat mendidik yang memungkinkan pertanyaan ini.) Ini adalah saklar sialan yang membuat saya acar. Terima kasih atas info tentang frame IP - Saya agak lemah dengan bagaimana tingkat yang lebih rendah dari tumpukan jaringan. Dalam benak saya bingkai ditujukan ke router, dengan tujuan lebih dalam di payload. : P
Stu Thompson
5

sangat mengejutkan, beberapa hari yang lalu pengujian kami menunjukkan bahwa xmit_hash_policy = layer3 + 4 tidak akan memiliki efek antara dua server linux yang terhubung langsung, semua lalu lintas akan menggunakan satu port. keduanya menjalankan xen dengan 1 jembatan yang memiliki perangkat pengikat sebagai anggota. Yang paling jelas, bridge dapat menyebabkan masalah, hanya saja itu tidak masuk akal sama sekali mengingat bahwa ip berbasis port hashing akan digunakan.

Saya tahu beberapa orang benar-benar berhasil mendorong 180MB + lebih dari tautan terikat (yaitu pengguna ceph), jadi itu berfungsi secara umum. Hal-hal yang mungkin untuk dilihat: - Kami menggunakan CentOS 5.4 yang lama - Contoh OPs berarti LACP kedua "tidak menghancurkan" koneksi - apakah itu masuk akal, pernah?

Apa yang ditampilkan oleh utas dan dokumentasi ini, dll., Dll. Telah menunjukkan kepada saya:

  • Secara umum semua orang tahu banyak tentang ini, pandai membaca teori dari ikatan ikatan atau bahkan standar IEEE, sedangkan pengalaman praktis hampir tidak ada.
  • Dokumentasi RHEL paling tidak lengkap.
  • Dokumentasi ikatan berasal dari tahun 2001 dan tidak cukup terkini
  • Mode layer2 + 3 rupanya tidak di CentOS (itu tidak muncul di modinfo, dan dalam pengujian kami itu menjatuhkan semua lalu lintas ketika diaktifkan)
  • Itu tidak membantu bahwa SUSE (BONDING_MODULE_OPTS), Debian (-o bondXX) dan RedHat (BONDING_OPTS) semuanya memiliki cara berbeda untuk menentukan pengaturan mode per-bond
  • Modul kernel CentOS / RHEL5 adalah "SMP aman" tetapi tidak "mampu SMP" (lihat facebook highperformance talk) - modul ini TIDAK berskala di atas satu CPU, jadi dengan mengikat jam cpu lebih tinggi> banyak core

Jika ada orang yang memasang pengaturan ikatan berkinerja tinggi yang baik, atau benar-benar tahu apa yang mereka bicarakan itu akan luar biasa jika mereka menghabiskan setengah jam untuk menulis sebuah dokumen kecil baru yang mendokumentasikan SATU contoh kerja menggunakan LACP, tidak ada barang aneh dan bandwidth > satu tautan

darkfader
sumber
Semakin buruk: Versi Debian yang berbeda memiliki metode berbeda untuk mengonfigurasi ikatan! Saya sebenarnya telah mendokumentasikan bagaimana saya mengatur ikatan saya di posting blog, yang tampaknya mendapatkan lalu lintas yang layak.
Stu Thompson
2

Jika sakelar Anda melihat tujuan L3 yang sebenarnya, ia dapat mengaitinya. Pada dasarnya jika Anda punya 2 tautan, anggap tautan 1 untuk tujuan bernomor ganjil, tautan 2 adalah untuk tujuan genap. Saya tidak berpikir mereka pernah menggunakan IP next-hop kecuali jika dikonfigurasi untuk melakukannya, tapi itu hampir sama dengan menggunakan alamat MAC target.

Masalah yang akan Anda hadapi adalah, tergantung pada lalu lintas Anda, tujuan akan selalu menjadi alamat IP tunggal server tunggal sehingga Anda tidak akan pernah menggunakan tautan lain itu. Jika tujuannya adalah sistem jarak jauh di internet, Anda akan mendapatkan distribusi yang merata, tetapi jika itu seperti server web, di mana sistem Anda adalah alamat tujuan, peralihan akan selalu mengirimkan lalu lintas hanya melalui salah satu tautan yang tersedia.

Anda akan berada dalam kondisi yang lebih buruk jika ada penyeimbang beban di suatu tempat di sana, karena IP "jarak jauh" akan selalu menjadi IP penyeimbang beban atau server. Anda bisa menyiasatinya sedikit dengan menggunakan banyak alamat IP pada load balancer dan server, tapi itu peretasan.

Anda mungkin ingin sedikit memperluas wawasan vendor Anda. Vendor lain, seperti jaringan ekstrem, dapat melakukan hal-hal seperti:

Algoritma L3_L4 — Lapisan 3 dan Lapisan 4, sumber gabungan dan alamat IP tujuan dan sumber dan nomor port TCP dan UDP tujuan. Tersedia di switch seri SummitStack dan Summit X250e, X450a, X450e, dan X650.

Jadi pada dasarnya selama port sumber klien (yang biasanya banyak berubah) berubah, Anda akan mendistribusikan lalu lintas secara merata. Saya yakin vendor lain memiliki fitur serupa.

Bahkan hashing pada IP sumber dan tujuan akan cukup untuk menghindari hot-spot, asalkan Anda tidak memiliki penyeimbang beban dalam campuran.

chris
sumber
Terima kasih. Tidak ada penyeimbangan beban. Dan saya tidak khawatir tentang lalu lintas masuk - kami memiliki rasio lalu lintas> 50: 1. (Ini aplikasi video Web.)
Stu Thompson
Saya pikir dalam kasus Anda hash pada tujuan tidak akan mendapatkan apa-apa karena saklar akan melihat tujuan sebagai server Anda. Rekayasa lalu lintas L2 tidak begitu baik. Dan 'hash' dalam aplikasi semacam ini akan menjadi sangat primitif - angka yang terbaik yang dapat Anda lakukan adalah menjumlahkan semua bit dalam alamat apa pun yang sedang digunakan dan jika hasilnya 0 keluar satu tautan atau 1 pergi yang lain.
chris
Seperti yang saya pahami dari kutipan ProCurve 2910al saya di atas, hash ada pada lima bit terakhir dari sumber dan tujuan. Jadi, tidak masalah jika satu (server saya) diperbaiki, yang lain akan bervariasi untuk hampir setiap klien di Level 3. Level 2? Itulah masalah saya saat ini - hanya ada satu sumber dan satu alamat tujuan yang harus di-hash.
Stu Thompson
0

Saya akan menebak bahwa itu dari IP klien, bukan router. Sumber asli dan IP tujuan akan berada pada offset tetap dalam paket, dan itu akan cepat untuk melakukan hashing. Hashing IP router akan membutuhkan pencarian berdasarkan MAC, kan?

Bill Weiss
sumber
-1

Karena saya baru saja kembali ke sini, beberapa hal yang saya pelajari sekarang: Untuk menghindari rambut beruban, Anda memerlukan sakelar yang layak yang mendukung kebijakan layer3 + 4, dan hal yang sama juga di Linux.

Dalam beberapa kasus, obeng standar-sesat yang disebut ALB / SLB (mode6) mungkin bekerja lebih baik. Secara operasional itu menyebalkan.

Saya sendiri mencoba menggunakan 3 + 4 jika memungkinkan, karena saya sering menginginkan bandwidth antara dua sistem yang berdekatan.

Saya juga sudah mencoba dengan OpenVSwitch dan pernah contoh di mana arus lalu lintas terganggu (setiap paket pertama hilang ... saya tidak tahu)

Florian Heigl
sumber