आज हमारे HAProxy VMs में से एक के साथ हमारे पास थोड़ी विफलता थी। जब हमने इसे खोदा, तो हमने पाया:
26 जनवरी 07:41:45 haproxy2 कर्नेल: [226818.070059] __ratelimit: 10 कॉलबैक दमन 26 जनवरी 07:41:45 haproxy2 कर्नेल: [226818.070064] सॉकेट मेमोरी से बाहर 26 जनवरी 07:41:47 haproxy2 कर्नेल: [226819.560048] सॉकेट मेमोरी से बाहर 26 जनवरी 07:41:49 haproxy2 कर्नेल: [226822.030044] सॉकेट मेमोरी से बाहर
इस लिंक के अनुसार , जाहिरा तौर पर कम डिफ़ॉल्ट सेटिंग्स के साथ क्या करना है net.ipv4.tcp_mem
। इसलिए हमने उन्हें उनके डिफॉल्ट्स से 4 गुना बढ़ा दिया (यह उबंटू सर्वर है, निश्चित नहीं कि लिनक्स फ्लेवर मायने रखता है):
वर्तमान मान हैं: 45984 61312 91968 नए मूल्य हैं: 183936 245248 367872
उसके बाद, हमें एक विचित्र त्रुटि संदेश दिखाई देने लगा:
26 जनवरी 08:18:49 haproxy1 कर्नेल: [2291.579726] रूट हैश श्रृंखला बहुत लंबी है! 26 जनवरी 08:18:49 haproxy1 कर्नेल: [2291.579732] अपने secret_interval को समायोजित करें!
Shh .. यह एक रहस्य है !!
यह जाहिरा तौर /proc/sys/net/ipv4/route/secret_interval
पर 600 के लिए चूक और रूट कैश के आवधिक नियंत्रण के साथ करना है
secret_interval
गिरी कितनी बार दूर सभी मार्ग हैश प्रविष्टियों कैसे नए / पुराने वे कर रहे हैं की परवाह किए बिना उड़ाने की निर्देश देता है। हमारे परिवेश में यह आमतौर पर खराब है। हर बार कैश क्लियर होने पर सीपीयू हजारों प्रविष्टियां प्रति सेकंड के पुनर्निर्माण में व्यस्त होगी। हालाँकि हम इसे खाड़ी में मेमोरी लीक रखने के लिए दिन में एक बार चलाने के लिए सेट करते हैं (हालांकि हमारे पास कभी नहीं था)।
हालांकि हम इसे कम करने के लिए खुश हैं, लेकिन रूट अंतराल से पुराने मूल्यों को तेजी से धकेलने के बजाय नियमित अंतराल पर पूरे रूट कैश को छोड़ने की सिफारिश करना अजीब लगता है ।
कुछ जाँच के बाद, हमने पाया /proc/sys/net/ipv4/route/gc_elasticity
कि मार्ग तालिका आकार को जाँच में रखने के लिए एक बेहतर विकल्प है:
gc_elasticity
मार्ग की हैश प्रविष्टियों को समाप्त करने से पहले कर्नेल को स्वीकार करने के लिए औसत बाल्टी की गहराई के रूप में सबसे अच्छा वर्णित किया जा सकता है। यह सक्रिय मार्गों की ऊपरी सीमा को बनाए रखने में मदद करेगा।
हमने रूट कैश की आशाओं में लोच को 8 से 4 तक समायोजित किया, जिससे खुद को अधिक आक्रामक रूप से पेश किया। secret_interval
हमारे लिए सही नहीं लगता है। लेकिन वहाँ सेटिंग्स का एक गुच्छा रहे हैं और यह स्पष्ट नहीं है जो वास्तव में यहाँ जाने का सही तरीका है।
- / proc / sys / net / ipv4 / मार्ग / gc_elasticity (8)
- / proc / sys / net / ipv4 / मार्ग / gc_interval (60)
- / proc / sys / net / ipv4 / मार्ग / gc_min_interval (0)
- / proc / sys / net / ipv4 / मार्ग / gc_timeout (300)
- / proc / sys / net / ipv4 / मार्ग / secret_interval (600)
- / proc / sys / net / ipv4 / मार्ग / gc_thresh (?)
- rhash_entries (कर्नेल पैरामीटर, डिफ़ॉल्ट अज्ञात?)
हम लिनक्स रूटिंग को बदतर नहीं बनाना चाहते हैं , इसलिए हम इनमें से कुछ सेटिंग्स के साथ गड़बड़ करने से डरते हैं।
क्या कोई सलाह दे सकता है कि उच्च यातायात HAProxy उदाहरण के लिए कौन से रूटिंग पैरामीटर सर्वोत्तम हैं?