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.
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.
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.
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 .
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:
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.
sumber
Jawaban:
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":
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):
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.
sumber
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:
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
sumber
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:
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.
sumber
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?
sumber
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)
sumber