محمد سلیمانی فر
محمد سلیمانی فر
خواندن ۲ دقیقه·۵ سال پیش

خطری که از بیخ گوش ۱۰۰ها هزار کاربر ْQuiz of Kings رد شد

در لینوکس، Root سیستم عامل یکی از حساس‌ترین بخش‌هاییه که نباید پر بشه و باید همیشه حواسمون بهش باشه.
ما هم نسبت به این مساله بی‌توجه نبودیم و یه Cronjob داشتیم که هر روز Root رو چک و خالی می‌کرد؛ اما یه چیز رو در نظر گرفته بودیم که یه روز کار دستمون داد.
برای یک مسئله‌ای مجبور شدیم تعدادی Command تو سیستم Run کنیم و از قضا اون روز در زمان اجرای اون کامندها مشکلی خارجی برای سیستم پیش اومد که باعث شده بود کامندها Failed بشن و لاگشون رو بریزن تو /var/log/ .

نتیجه این شد که Root سیستم ۹۹.۹٪ پر شد؛ دیگه توی اون سرور نمی‌شد هیچ کاری کرد، ولی با این حال داشت به Requestها پاسخ می‌داد و در واقع هنوز ۱۰۰ درصد Root پر نشده بود که به Down شدن منجر بشه. با این حال هیچ کامند Bashای دیگه نمی‌شد به صورت Manual توی اون سرور زد و همه چیز Freeze شده‌ بود.

بحران اصلی این بود که این سرور، سرورِ Endpoint مربوط به DNS هم بود که با Down شدنش کل بازی Down می‌شد و یک Redis که Authentication انجام می‌داد هم روی این سرور Run بود که اگر اون هم لطمه می‌خورد، حجم قابل توجهی از کاربران نمی‌تونستن بازی کنن.

دیگه نمی‌شد به اون سرور SSH هم زد؛ حتی با ILO هم نمی شد با Shell رفت توش و کاری کرد، چون همون اول Error میداد که Root پر شده و اجازه تایپ هیچ کامندی نمی‌داد.

تنها راهی که به ذهنمون می‌رسید، این بود که یه زمانی که ترافیک کمه سرور رو دستی خاموش کنیم و هارد رو بیرون بکشیم و به یه سیستمی وصل کنیم و از طریق اون Root رو خالی کنیم؛ اما دیتاسنتر تو تعطیلات عید بودند و فردای اون روز هم نبودند و ما تا چند ساعت آینده قطعا Down می‌شدیم و Down شدن همانا و ۲ روز از دسترس خارج شدن کوییز همان.

اما ناگهان یک اتفاقی افتاد! Cron job تخلیه Root اجرا شد و تونست یک اپسیلون از حجم چیزهایی که توی Root بود کم کنه. همین باعث شد حداقل بتونیم فقط یک کامند رو با موفقیت Run کنیم. فقط یک کامند! که با زدن همون کامند دوباره ترمینال Freeze می‌شد.

هنوز نمی‌شد SSH زد و یا با ILO وصل شد؛ اما همون یک کامند دلگرمی بزرگی بود. به علاوه این‌که خوشبختانه من یه tmux تو یه سرور دیگه داشتم که توش چهار پنج تا تب ساختم بودم و چهار پنج تا SSH زده بودم به این سرور.

تنها کامندی که گفتیم ریسک کنیم و بزنیم و مارو نجات داد این بود rm -rf /var/log و با زدن همین کامند نجات پیدا کردیم!


نتایج اخلاقی:

- همیشه یک Cronjob داشته باشید که root رو تمیز کنه و اگرچه /var/log/ غالبا اون‌قدر پر نمیشه که اذیت کنه؛ ولی تا جایی که میشه اون هم به صورت منظم پاک کنید.

- چندین Endpoint برای DNSتون داشته باشید و سعی کنید از هر Resourceای حتما Replication داشته باشید (در این مورد ما به دلایلی نمی‌تونستیم از یه سری چیزهای حیاتی Replication داشته باشیم! ولی اگر می‌داشتیم، اصلا برامون جای نگرانی نبود).

- همیشه تو چندین سرور tmux session داشته باشید و توش به همه‌ی سرورهایی که باهاشون کار می‌کنید SSH فعال داشته باشید.

rootبحرانquizofkingsکوییز آو کینگزبرنامه نویسی
هم موسس کوییز آف کینگز - برنامه نویس و توسعه دهنده ارشد بکند - علاقه مند به تکنولوژی و مقالات علمی.
شاید از این پست‌ها خوشتان بیاید