আমাদের আজ একটি HAProxy ভিএম এর সাথে আমাদের কিছুটা ব্যর্থতা সমস্যা ছিল। আমরা এটি খনন করার পরে, আমরা এটি খুঁজে পেয়েছি:
জানুয়ারী 07 07:41:45 হ্যাপ্রোক্সি 2 কার্নেল: [226818.070059] __রেটলিট: 10 কলব্যাক দমন করা হয়েছে জানুয়ারী 07 07:41:45 হ্যাপ্রোক্সি 2 কার্নেল: [226818.070064] সকেটের মেমরির বাইরে জানুয়ারী 07 07:41:47 হ্যাপ্রোক্সি 2 কার্নেল: [226819.560048] সকেটের মেমরির বাইরে জানুয়ারী 07 07:41:49 হ্যাপ্রোক্সি 2 কার্নেল: [226822.030044] সকেটের মেমরির বাইরে
কোনটি, এই লিঙ্কটির জন্য , আপাতত কম ডিফল্ট সেটিংসের জন্য করতে হয় net.ipv4.tcp_mem
। সুতরাং আমরা তাদের ডিফল্টগুলি থেকে 4x বাড়িয়েছি (এটি উবুন্টু সার্ভার, লিনাক্সের স্বাদের বিষয়টি নিশ্চিত কিনা তা নিশ্চিত নয়):
বর্তমান মানগুলি: 45984 61312 91968 নতুন মানগুলি হ'ল: 183936 245248 367872
এর পরে, আমরা একটি উদ্ভট ত্রুটি বার্তা দেখতে শুরু করেছি:
জানুয়ারী 08 08:18:49 haproxy1 কার্নেল: [2291.579726] রুট হ্যাশ চেইনটি খুব দীর্ঘ! জানুয়ারী 08 08:18:49 haproxy1 কার্নেল: [2291.579732] আপনার গোপন_ইন্টারওয়ালটি সামঞ্জস্য করুন!
শ .. এটা একটা গোপন কথা !!
স্পষ্টতই এটি করতে হবে /proc/sys/net/ipv4/route/secret_interval
যা 600 এ ডিফল্ট এবং রুট ক্যাশে পর্যায়ক্রমে ফ্লাশিং নিয়ন্ত্রণ করে
secret_interval
কার্নেল কত ঘন ঘন দূরে সমস্ত রুট হ্যাশ এন্ট্রি কিভাবে নতুন / পুরাতন তারা নির্বিশেষে উড়িয়ে দেওয়ার নির্দেশ দেয়। আমাদের পরিবেশে এটি সাধারণত খারাপ। সিপিইউ প্রতিবার ক্যাশে সাফ হওয়ার পরে প্রতি সেকেন্ডে কয়েক হাজার এন্ট্রি পুনর্নির্মাণে ব্যস্ত থাকবে। তবে আমরা এটিকে দিনে একবার চালানোর জন্য সেট করে রেখেছি স্মৃতি ফাঁসকে উপসাগরীয় স্থানে রাখতে (যদিও আমাদের কখনও তা হয়নি)।
আমরা এটি হ্রাস করতে পেরে খুশি হলেও, রুট ক্যাশে থেকে পুরানো মানগুলি কেবলমাত্র দ্রুত ঠেলে না দেওয়ার পরিবর্তে নিয়মিত বিরতিতে পুরো রুট ক্যাশে ফেলে দেওয়ার পরামর্শ দেওয়া অদ্ভুত বলে মনে হয় ।
কিছু তদন্তের পরে, আমরা দেখতে পেলাম /proc/sys/net/ipv4/route/gc_elasticity
যেটি রুটের টেবিলের আকারটি পরীক্ষা করে রাখার জন্য একটি ভাল বিকল্প বলে মনে হচ্ছে:
gc_elasticity
রুট হ্যাশ এন্ট্রিগুলির মেয়াদ শেষ হওয়ার আগে কার্নেলটি গড় বালতি গভীরতার হিসাবে সর্বোত্তমভাবে বর্ণনা করা যেতে পারে। এটি সক্রিয় রুটের উপরের সীমাটি বজায় রাখতে সহায়তা করবে।
রুট ক্যাশে আরও আগ্রাসীভাবে ছাঁটাইয়ের আশায় আমরা 8 থেকে 4 এ স্থিতিস্থাপকতাটি সামঞ্জস্য করেছি। secret_interval
আমাদের কাছে সঠিক মনে হয় না। তবে এখানে বেশ কয়েকটি সেটিংস রয়েছে এবং এটি অস্পষ্ট যা আসলে এখানে যাওয়ার সঠিক উপায়।
- / প্রোক / সিএস / নেট / আইপিভি 4 / রুট / জিসি_এলাস্টিকটি (8)
- / ক্রোক / সিস / নেট / আইপিভি 4 / রুট / জিসি_ইন্টারভাল (60)
- / ক্রোক / সিস / নেট / আইপিভি 4 / রুট / জিসি_মিনি_ইন্টারভাল (0)
- / ক্রোক / সিস / নেট / আইপিভি 4 / রুট / জিসি_টাইমআউট (300)
- / ক্রোক / সিস / নেট / আইপিভি 4 / রুট / সিক্রেট_ইন্টারওয়াল (600)
- / proc / sys / নেট / ipv4 / রুট / জিসি_থ্রেশ (?)
- rhash_entries (কার্নেল প্যারামিটার, ডিফল্ট অজানা?)
আমরা লিনাক্সের রাউটিংকে আরও খারাপ করতে চাই না , সুতরাং আমরা এই ধরনের কিছু সেটিংস নিয়ে গণ্ডগল করতে ভয় পাচ্ছি।
হাই ট্র্যাফিক HAProxy দৃষ্টান্তের জন্য, কেউ কী রাউটিং পরামিতিগুলির সাথে টিউন করতে সবচেয়ে ভাল পরামর্শ দিতে পারে?