कैसे वास्तव में और विशेष रूप से परत 3 LACP गंतव्य पते हैशिंग काम करता है?


54

एक साल पहले के एक पहले के प्रश्न ( मल्टीप्लेक्सेड 1 Gbps इथरनेट? ) के आधार पर , मैं रवाना हो गया और LACP लिंक के साथ एक नए ISP के साथ एक नया रैक सेटअप किया। हमें इसकी आवश्यकता है क्योंकि हमारे पास व्यक्तिगत सर्वर (एक एप्लिकेशन, एक आईपी) में 1Gbps संचयी से अधिक इंटरनेट पर हजारों क्लाइंट कंप्यूटरों की सेवा है।

यह LACP विचार हमें 10GoE स्विच और एनआईसी पर एक भाग्य खर्च किए बिना 1Gbps बाधा को तोड़ने के लिए माना जाता है। दुर्भाग्य से, मैं आउटबाउंड ट्रैफिक वितरण के संबंध में कुछ समस्याओं में चला गया हूं। (उपरोक्त लिंक किए गए प्रश्न में केविन कुफल की चेतावनी के बावजूद।)

ISP का राउटर किसी प्रकार का सिस्को है। (मैंने मैक पते से यह घटाया है।) मेरा स्विच HP HP ProCurve 2510G-24 है। और सर्वर HP DL 380 G5s डेबियन लेन चल रहे हैं। एक सर्वर एक हॉट स्टैंडबाय है। हमारे आवेदन को क्लस्ट नहीं किया जा सकता है। यहां एक सरलीकृत नेटवर्क आरेख है जिसमें आईपी, एमएसीएस और इंटरफेस के साथ सभी रीलेवन नेटवर्क नोड शामिल हैं।

वैकल्पिक शब्द

हालांकि इसमें सभी विवरण हैं लेकिन मेरी समस्या के साथ काम करना और वर्णन करना थोड़ा कठिन है। तो, सादगी की खातिर, यहां एक नेटवर्क आरेख है जो नोड्स और भौतिक लिंक से कम है।

वैकल्पिक शब्द

इसलिए मैं चला गया और नए रैक पर अपनी किट स्थापित की और अपने राउटर से आईएसपी के केबल को जोड़ा। दोनों सर्वरों में मेरे स्विच के लिए एक LACP लिंक है, और स्विच में ISP राउटर के लिए एक LACP लिंक है। शुरू से ही मैंने महसूस किया कि मेरा LACP कॉन्फ़िगरेशन सही नहीं था: परीक्षण ने सभी ट्रैफ़िक को दिखाया और प्रत्येक सर्वर से सर्वर-टू-स्विच और स्विच-टू-राउटर के बीच विशेष रूप से एक भौतिक गो लिंक पर जा रहा था।

वैकल्पिक शब्द

Linux NIC संबंध के बारे में कुछ Google खोजों और बहुत से RTMF समय के साथ, मुझे पता चला कि मैं modifiying द्वारा 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

यह उम्मीद के अनुसार दोनों एनआईसी पर मेरे सर्वर को छोड़ने वाला ट्रैफ़िक मिला। लेकिन ट्रैफ़िक स्विच से राउटर तक केवल एक भौतिक लिंक पर घूम रहा था, फिर भी

वैकल्पिक शब्द

हमें उस लिंक की आवश्यकता है जो दोनों भौतिक लिंक पर जा रहा है। 2510G-24 के प्रबंधन और कॉन्फ़िगरेशन गाइड को पढ़ने और पुन: व्यवस्थित करने के बाद , मुझे लगता है:

[LACP ट्रंक किए गए लिंक पर आउटबाउंड ट्रैफ़िक वितरित करने के लिए स्रोत-गंतव्य पता जोड़े (SA / DA) का उपयोग करता है। SA / DA (स्रोत पता / गंतव्य पता) स्विच को स्रोत / गंतव्य पते जोड़े के आधार पर ट्रंक समूह के भीतर लिंक को आउटबाउंड ट्रैफ़िक वितरित करने का कारण बनता है। यही है, स्विच एक ही स्रोत पते से उसी ट्रंक किए गए लिंक के माध्यम से एक ही गंतव्य पते पर ट्रैफ़िक भेजता है, और एक ही स्रोत पते से एक अलग लिंक के माध्यम से एक अलग गंतव्य पते पर ट्रैफ़िक भेजता है, पथ असाइनमेंट के रोटेशन के आधार पर ट्रंक में लिंक।

ऐसा लगता है कि एक बंधित लिंक केवल एक मैक एड्रेस प्रस्तुत करता है, और इसलिए मेरा सर्वर-टू-राउटर पथ हमेशा स्विच-टू-राउटर से एक पथ पर रहने वाला है क्योंकि स्विच देखता है, लेकिन एक मैक (और दो नहीं - एक से दोनों LACP'd लिंक के लिए प्रत्येक पोर्ट)।

समझ गया। लेकिन मैं यही चाहता हूँ:

वैकल्पिक शब्द

एक और अधिक महंगा एचपी ProCurve स्विच हैश में 2910al स्तर 3 स्रोत और गंतव्य पते का उपयोग करता है। ProCurve 2910al के प्रबंधन और कॉन्फ़िगरेशन गाइड के "आउटबाउंड ट्रैफ़िक वितरण के पार ट्रंक लिंक" अनुभाग से :

ट्रंक के माध्यम से यातायात का वास्तविक वितरण स्रोत पते और गंतव्य पते से बिट्स का उपयोग करके गणना पर निर्भर करता है। जब एक आईपी पता उपलब्ध होता है, तो गणना में आईपी स्रोत पते और आईपी गंतव्य पते के अंतिम पांच बिट्स शामिल होते हैं, अन्यथा मैक पते का उपयोग किया जाता है।

ठीक। इसलिए, इसके लिए जिस तरह से मैं चाहता हूं, काम करने के लिए, गंतव्य पते की कुंजी है क्योंकि मेरे स्रोत का पता तय है। यह मेरे प्रश्न की ओर जाता है:

कैसे वास्तव में और विशेष रूप से परत 3 LACP हैशिंग काम करता है?

मुझे पता होना चाहिए कि कौन सा गंतव्य पता उपयोग किया गया है:

  • ग्राहक का आईपी , अंतिम गंतव्य?
  • या राउटर का आईपी , अगला भौतिक लिंक संचरण गंतव्य।

हम दूर नहीं गए हैं और एक प्रतिस्थापन स्विच अभी तक खरीदा है। कृपया मुझे यह समझने में मदद करें कि क्या परत 3 LACP गंतव्य पता हैशिंग है या नहीं, जो मुझे चाहिए। एक और बेकार स्विच खरीदना एक विकल्प नहीं है।


13
बहुत बढ़िया, अच्छी तरह से शोध सवाल! दुर्भाग्य से, मुझे जवाब नहीं पता ...
डग लक्सम

आप ProCurve पर प्रत्येक पुल / ट्रंक की फैली हुई पेड़ की लागत को देख सकते हैं?
dbasnett

इसके अलावा राज्य और प्राथमिकता? ऐसा लगता है कि जब HP <---> सिस्को कि चड्डी समान प्राथमिकता नहीं हो सकती है और अंत में अवरुद्ध हो सकती है। विक्रेताओं को न मिलाने का विज्ञापन ????
dbasnett

6
यह संभवतः सबसे अच्छा स्वरूपित प्रश्न है जो मैंने सर्वर फॉल्ट
स्कैलरसन

मुझे उम्मीद है कि कोई भी उत्तर के बारे में उतना ही ध्यान रख सकता है जितना कि प्रश्न पर दिया गया था।
नील ट्रोडन

जवाबों:


14

आप जो खोज रहे हैं उसे आमतौर पर "ट्रांसमिट हैश पॉलिसी" या "ट्रांसमिट हैश एल्गोरिथम" कहा जाता है। यह समग्र बंदरगाहों के समूह से एक बंदरगाह के चयन को नियंत्रित करता है जिसके साथ एक फ्रेम को प्रसारित करना है।

802.3ad मानक पर मेरे हाथ मिलना मुश्किल साबित हुआ है क्योंकि मैं इस पर पैसा खर्च करने को तैयार नहीं हूं। यह कहने के बाद कि, मैं एक अर्ध-आधिकारिक स्रोत से कुछ जानकारी को प्राप्त करने में सक्षम हूं, जो आप देख रहे हैं उस पर कुछ प्रकाश डालते हैं। 2007 ओटावा, ON, CA IEEE हाई स्पीड स्टडी ग्रुप की 802.3ad मानक की बैठक से इस प्रस्तुति के अनुसार , "फ्रेम वितरक" के लिए विशेष एल्गोरिदम को अनिवार्य नहीं किया गया है:

यह मानक किसी विशेष वितरण एल्गोरिथ्म को अनिवार्य नहीं करता है; हालाँकि, कोई भी वितरण एल्गोरिथ्म यह सुनिश्चित करेगा कि, जब फ़्रेम फ़्रेम कलेक्टर द्वारा 43.2.3 में निर्दिष्ट किया जाता है, तो एल्गोरिथ्म नहीं होगा) a) किसी भी वार्तालाप, या b के फ़्रेम का मिस-ऑर्डर करने पर फ़्रेम का दोहराव । फ़्रेम ऑर्डरिंग को बनाए रखने के लिए उपरोक्त आवश्यकता को यह सुनिश्चित करके पूरा किया जाता है कि दिए गए वार्तालाप को बनाने वाले सभी फ़्रेमों को मैक क्लाइंट द्वारा उत्पन्न क्रम में एक लिंक पर प्रेषित किया जाता है; इसलिए, यह आवश्यकता मैक फ्रेम में किसी भी जानकारी के जोड़ (या संशोधन) को शामिल नहीं करती है, और न ही फ्रेम को फिर से ऑर्डर करने के लिए संबंधित फ्रेम कलेक्टर की ओर से कोई बफरिंग या प्रसंस्करण।

इसलिए, जो भी एल्गोरिथ्म एक स्विच / एनआईसी चालक प्रेषित फ़्रेम को वितरित करने के लिए उपयोग करता है, उसे उस प्रस्तुति में बताई गई आवश्यकताओं का पालन करना चाहिए (जो, संभवतः, मानक से उद्धृत किया गया था)। कोई विशेष एल्गोरिथ्म निर्दिष्ट नहीं है, केवल एक अनुरूप व्यवहार परिभाषित किया गया है।

भले ही कोई एल्गोरिथ्म निर्दिष्ट नहीं है, हम इस तरह के एक एल्गोरिथ्म कैसे काम कर सकते हैं, इसके बारे में महसूस करने के लिए एक विशेष कार्यान्वयन को देख सकते हैं। उदाहरण के लिए, लिनक्स कर्नेल "बॉन्डिंग" ड्राइवर में फ़ंक्शन लागू करने वाली 802.3 एड-कंप्लीटेड ट्रांसमिटेड हैश पॉलिसी है (देखें कर्नेल सोर्स के डॉक्यूमेंटेशन / नेटवर्किंग डायरेक्टरी में bonding.txt देखें):

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

यह पोर्ट चयन को प्रभावित करने के लिए स्रोत और गंतव्य आईपी पते, साथ ही स्रोत और गंतव्य मैक पते दोनों का कारण बनता है।

इस प्रकार के हैशिंग में प्रयुक्त गंतव्य आईपी पता वह पता होगा जो फ्रेम में मौजूद है। उस बारे में सोचने के लिए एक सेकंड लें। राउटर का IP पता, ईथरनेट फ्रेम हेडर में आपके सर्वर से इंटरनेट तक, ऐसे फ्रेम में कहीं भी एनकैप्सुलेट नहीं किया गया है। राउटर का मैक एड्रेस इस तरह के फ्रेम के हेडर में मौजूद होता है, लेकिन राउटर का आईपी एड्रेस नहीं है। फ्रेम के पेलोड में संलग्न गंतव्य आईपी पता आपके क्लाइंट के लिए अनुरोध करने वाले इंटरनेट क्लाइंट का पता होगा।

एक प्रेषित हैश नीति जो स्रोत और गंतव्य आईपी पते दोनों को ध्यान में रखती है, यह मानते हुए कि आपके पास ग्राहकों का एक व्यापक रूप से विविध पूल है, आपको बहुत अच्छा करना चाहिए। सामान्य तौर पर, इस तरह के कुल बुनियादी ढांचे में बहने वाले ट्रैफ़िक में अधिक व्यापक रूप से विविध स्रोत और / या गंतव्य आईपी पते एक परत 3-आधारित संचारित हैश नीति का उपयोग किए जाने पर अधिक कुशल एकत्रीकरण का परिणाम होगा।

आपके आरेख इंटरनेट से सर्वर पर सीधे आने वाले अनुरोधों को दिखाते हैं, लेकिन यह इंगित करने के लायक है कि प्रॉक्सी स्थिति के लिए क्या कर सकता है। यदि आप अपने सर्वरों के लिए क्लाइंट अनुरोधों का अनुमान लगा रहे हैं, जैसा कि क्रिस अपने उत्तर में बोलता है तो आप अड़चन पैदा कर सकते हैं। यदि वह प्रॉक्सी इंटरनेट क्लाइंट के आईपी पते के बजाय अपने स्वयं के स्रोत आईपी पते से अनुरोध कर रही है, तो आपके पास एक सख्त परत 3-आधारित संचारित हैश नीति में "संभव" कम होगा।

एक प्रेषित हैश नीति भी 4 सूचना (टीसीपी / यूडीपी पोर्ट नंबर) को ध्यान में रख सकती है, इसलिए, जब तक कि यह 802.3ad मानक में आवश्यकताओं के साथ रखा गया हो। इस तरह का एक एल्गोरिथ्म लिनक्स कर्नेल में है, जैसा कि आप अपने प्रश्न में संदर्भ देते हैं। सावधान रहें कि उस एल्गोरिथ्म के लिए प्रलेखन चेतावनी देता है कि, विखंडन के कारण, ट्रैफ़िक आवश्यक रूप से एक ही पथ पर प्रवाहित नहीं हो सकता है और, जैसे कि, एल्गोरिदम सख्ती से 802.3ad-अनुरूप नहीं है।


हां, मैंने लिनक्स सर्वर की "ट्रांसमिटेड हैश पॉलिसी" को छांट लिया है । (एक बहुत ही शैक्षिक अनुभव जिसने इस प्रश्न को संभव बनाया है।) यह एक darn स्विच है जो मुझे अचार में मिला है। आईपी ​​फ्रेम पर जानकारी के लिए धन्यवाद - मैं थोड़ा कमजोर हूं कि नेटवर्क के निचले स्तर कैसे हैं। मेरे दिमाग में फ्रेम राउटर को संबोधित किया गया था, पेलोड में गहराई से। : P
स्टु थॉम्पसन

5

बहुत आश्चर्य की बात है, कुछ दिनों पहले हमारे परीक्षण से पता चला है कि xmit_hash_policy = layer3 + 4 का दो सीधे जुड़े हुए लिनक्स सर्वरों के बीच कोई प्रभाव नहीं पड़ेगा, सभी ट्रैफ़िक एक पोर्ट का उपयोग करेंगे। दोनों 1 ब्रिज के साथ एक्सन चलाते हैं जिसमें एक सदस्य के रूप में संबंध डिवाइस है। सबसे स्पष्ट रूप से, पुल समस्या का कारण बन सकता है, बस यह समझ में नहीं आता है कि आईपी + पोर्ट आधारित हैशिंग का उपयोग किया जाएगा।

मुझे पता है कि कुछ लोग वास्तव में 180 एमबी + से अधिक बंधुआ लिंक (यानी सीफ़ उपयोगकर्ता) को धक्का देने का प्रबंधन करते हैं, इसलिए यह सामान्य रूप से काम करता है। देखने के लिए संभावित चीजें: - हमने पुराने CentOS 5.4 का उपयोग किया है - ओपी उदाहरण का अर्थ होगा दूसरे एलएसीपी "कनेक्शन" को अनहेल्सेस करना - क्या इसका कोई मतलब है, कभी?

इस सूत्र और प्रलेखन पढ़ने आदि ने मुझे क्या दिखाया है:

  • आम तौर पर हर कोई इस बारे में बहुत कुछ जानता है, बॉन्डिंग हाउटो या यहां तक ​​कि आईईईई मानकों से सिद्धांत सुनाने में अच्छा है, जबकि व्यावहारिक अनुभव कोई भी नहीं है।
  • आरएचईएल प्रलेखन सबसे अच्छा में अधूरा है।
  • संबंध प्रलेखन 2001 से है और वर्तमान में पर्याप्त नहीं है
  • layer2 + 3 मोड जाहिरा तौर पर CentOS में नहीं है (यह modinfo में प्रदर्शित नहीं होता है, और हमारे परीक्षण में यह सक्षम होने पर सभी ट्रैफ़िक को गिरा देता है:
  • यह मदद नहीं करता है कि SUSE (BONDING_MODULE_OPTS), डेबियन (-o बांडएक्सएक्स) और रेडहैट (BONDING_OPTS) सभी में प्रति-बंधन मोड सेटिंग्स निर्दिष्ट करने के लिए अलग-अलग तरीके हैं
  • CentOS / RHEL5 कर्नेल मॉड्यूल "एसएमपी सुरक्षित" है, लेकिन "एसएमपी सक्षम" नहीं है (फेसबुक हाइपरफॉर्मेंस बात देखें) - यह एक सीपीयू से ऊपर स्केल नहीं करता है, इसलिए उच्च सीपीयू घड़ी के साथ> कई कोर

यदि कोई भी एक अच्छा उच्च-प्रदर्शन संबंध सेटअप समाप्त करता है, या वास्तव में जानता है कि वे इसके बारे में क्या बात कर रहे हैं तो यह बहुत बढ़िया होगा यदि उन्हें एक नया छोटा हॉव्टो लिखने में आधे घंटे का समय लगा, जो कि दस्तावेज़ों में से एक है LACP, कोई विषम सामान और बैंडविड्थ का उपयोग कर काम कर रहा है। > एक लिंक


यह बदतर हो जाता है: डेबियन के विभिन्न संस्करणों में बॉन्डिंग को कॉन्फ़िगर करने के लिए अलग-अलग तरीके हैं! मैंने वास्तव में प्रलेखित किया है कि कैसे मैंने अपनी बॉन्डिंग को एक ब्लॉग पोस्ट में सेटअप किया है, जो कि सभ्य ट्रैफ़िक प्राप्त करता है।
स्टु थॉम्पसन

2

यदि आपका स्विच सही L3 गंतव्य देखता है, तो यह उस पर हैश कर सकता है। मूल रूप से यदि आपको 2 लिंक मिले हैं, तो सोचें कि लिंक 1 विषम संख्या वाले गंतव्यों के लिए है, लिंक 2 भी गिने हुए गंतव्यों के लिए है। मुझे नहीं लगता कि वे कभी भी अगले-हॉप आईपी का उपयोग करते हैं जब तक कि ऐसा करने के लिए कॉन्फ़िगर नहीं किया जाता है, लेकिन यह लक्ष्य के मैक पते का उपयोग करने के समान है।

आप जिस समस्या को चलाने जा रहे हैं, वह यह है कि आपके ट्रैफ़िक के आधार पर, गंतव्य हमेशा एकल सर्वर का एकल IP पता होगा, इसलिए आप उस अन्य लिंक का उपयोग कभी नहीं करेंगे। यदि गंतव्य इंटरनेट पर दूरस्थ प्रणाली है, तो आपको वितरण भी मिल जाएगा, लेकिन अगर यह एक वेब सर्वर की तरह कुछ है, जहां आपका सिस्टम गंतव्य का पता है, तो स्विच हमेशा उपलब्ध लिंक में से केवल एक पर ट्रैफ़िक भेजेगा।

अगर आप वहां कहीं लोड बैलेंसर है तो आप और भी बुरे आकार में होंगे, क्योंकि तब "रिमोट" आईपी हमेशा लोड बैलेंसर का आईपी या सर्वर होगा। आप लोड बैलेंसर और सर्वर पर बहुत सारे IP पतों का उपयोग करके थोड़ा बहुत प्राप्त कर सकते हैं, लेकिन यह एक हैक है।

आप विक्रेताओं के अपने क्षितिज का विस्तार करना चाहते हैं। अन्य विक्रेता, जैसे कि चरम नेटवर्क, जैसे चीजों पर हैश कर सकते हैं:

L3_L4 एल्गोरिथ्म- लेयर 3 और लेयर 4, संयुक्त स्रोत और गंतव्य आईपी पते और स्रोत और गंतव्य टीसीपी और यूडीपी पोर्ट नंबर। समिटस्टैक और शिखर सम्मेलन X250e, X450a, X450e, और X650 श्रृंखला स्विच पर उपलब्ध है।

तो मूल रूप से क्लाइंट के स्रोत पोर्ट (जो आमतौर पर बहुत परिवर्तन होता है) के रूप में लंबे समय तक, आप समान रूप से ट्रैफ़िक वितरित करेंगे। मुझे यकीन है कि अन्य विक्रेताओं के पास समान विशेषताएं हैं।

यहां तक ​​कि स्रोत और गंतव्य आईपी पर हैशिंग भी हॉट-स्पॉट से बचने के लिए पर्याप्त होगा, जब तक कि आपके पास मिश्रण में लोड बैलेंसर न हो।


धन्यवाद। कोई भार संतुलन नहीं। और मैं इनबाउंड ट्रैफिक के बारे में चिंतित नहीं हूं - हमारे पास ट्रैफ़िक अनुपात में 1 50: 1 आउट: है। (यह एक वेब वीडियो एप्लिकेशन है।)
स्टु थॉम्पसन

मुझे लगता है कि आपके मामले में गंतव्य पर हैश आपको कुछ भी नहीं मिलेगा क्योंकि स्विच आपके सर्वर के रूप में गंतव्य को देखेगा। L2 ट्रैफिक इंजीनियरिंग बहुत अच्छा नहीं है। और इस तरह के अनुप्रयोग में 'हैश' बहुत आदिम होने जा रहा है - जो भी आप कर सकते हैं उसका सबसे अच्छा आंकड़ा है, जो कुछ भी पता (तों) उपयोग में हैं और यदि परिणाम 0 है तो एक लिंक या 1 बाहर जाएं। दूसरे से बाहर जाओ।
क्रिस

जैसा कि मैंने अपने ऊपर ProCurve 2910al उद्धरण से समझा, हैश स्रोत और गंतव्य के अंतिम पाँच बिट्स पर है। तो, कोई फर्क नहीं पड़ता कि क्या एक (मेरा सर्वर) तय हो गया है, दूसरा स्तर 3. स्तर 2 पर लगभग हर ग्राहक के लिए अलग-अलग है? यह मेरी वर्तमान समस्या है - हैश के खिलाफ केवल एक स्रोत और एक गंतव्य पता है।
स्टु थॉम्पसन

0

मैं अनुमान लगाऊंगा कि यह क्लाइंट आईपी से दूर है, न कि राउटर से। असली स्रोत और गंतव्य आईपी पैकेट में एक निश्चित ऑफसेट पर होगा, और यह हैशिंग करने के लिए तेज़ होने वाला है। राउटर आईपी को हाशिए पर मैक के आधार पर एक लुकअप की आवश्यकता होगी, है ना?


-1

चूँकि मैंने अभी-अभी यहाँ वापसी की, कुछ चीजें जो मैंने अब तक सीखी हैं: भूरे बालों से बचने के लिए, आपको एक सभ्य स्विच की आवश्यकता है जो एक लेयर 3 + 4 पॉलिसी का समर्थन करता है, और वही लिनक्स में भी।

कुछ मामलों में ALB / SLB (मोड 6) नामक मानक-परावर्तन ब्लोटरच बेहतर काम कर सकता है। हालाँकि, यह बेकार है।

स्वयं मैं जहां संभव हो, 3 + 4 का उपयोग करने की कोशिश करता हूं, क्योंकि मैं अक्सर दो आसन्न प्रणालियों के बीच उस बैंडविड्थ को चाहता हूं।

मैं भी OpenVSwitch के साथ कोशिश की है और एक बार उदाहरण है कि जहां बाधित यातायात प्रवाह (हर पहला पैकेट खो गया ... मुझे पता नहीं है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.