[Góc engineering] Câu chuyện về đợt "cúp điện" lâu nhất lịch sử
đã đăng vào 4:49 p.m. 9 Tháng 12, 2021

Thông báo lỗi 502 Bad Gateway đã trở thành một mảnh ghép thân thương của trang web LQDOJ trong lòng người dùng nhờ lịch bảo trì dày đặc và đầy bất ngờ của nhà cung cấp máy chủ ảo. Các bạn có thể bắt gặp lỗi 502 khi đang tham gia contest, khi chat chit, viết blog và thậm chí là khi ... chỉ vừa mới đăng nhập xong. Dù mật độ lỗi xảy ra khá thường xuyên nhưng team dev web cũng luôn xử lý chúng rất nhanh gọn để không làm gián đoạn trải nghiệm của mọi người. Tuy nhiên, may mắn đã không mỉm cười với chúng mình vào sự cố ngày thứ bảy vừa rồi (04/12) nữa. Diễn biến của "tuần cuối năm u ám" này (được chính thức đặt tên để kỷ niệm một bài học nhớ đời) có thể được tóm tắt như sau:

  • Vào tầm 16h ngày thứ bảy, thầy Small thông báo cho toàn thể các admin về việc LQDOJ lại bị lỗi 502 sau khi bảo trì máy chủ và việc restart các service không có tác dụng.
  • 17h cùng ngày, server được reboot và tình hình vẫn không tươi sáng hơn. CaiWinDao thử khởi động development server bằng lệnh kinh điển python manage.py runserver và nhận được thông báo lỗi khô khốc: "Table 'dmoj.django_migrations' doesn't exist in engine". Đọc lướt thấy keyword migrations đã biết ngay lành ít dữ nhiều, CaiWinDao đã xác định rằng web không thể có cơ may sống lại trước khi cuom1999 thức giấc.
  • 20h (ở Mỹ đang là buổi sáng), cuom1999 sau bài thể dục buổi sáng đã gấp rút chạy lệnh sao lưu dữ liệu ... ./backup.sh, tuy nhiên, một thông báo lỗi nghiệt ngã đã chờ sẵn: mysqldump: Got error: 1932: "Table 'dmoj.auth_group' doesn't exist in engine" when using LOCK TABLES. Định mệnh đã rõ: Database đã bị crash, MariaDB chính thức đình công. cuom1999 tạm gác việc debug để lên trường dự thi Putnam.
  • Sau hơn một ngày tra cứu, một giải pháp khả thi xuất hiện là sử dụng mysqlfrm để restore database từ các mảnh .idb.frm. Nghe có vẻ đơn giản nhưng việc thực thi đã gặp rất nhiều rào cản nên người dùng vẫn phải chờ đợi mỏn mỏi 🙁
  • Vào thứ hai tuần sau, team hạ tầng server bắt đầu tiến hành tạo một bản sao của web từ mã nguồn trên Github và dữ liệu cào được vào ngày 4/12. cuom1999 đã tham gia hỗ trợ hiệu chỉnh các table trong database để bản sao này có thể chạy trơn tru.
  • Trưa ngày hôm nay, thứ năm (09/12), LQDOJ đã chính thức "hồi sinh" dù vẫn còn tồn tại một số lỗi nhỏ trong đồng bộ dữ liệu. Toàn thể ban quản trị đều thở phào nhẹ nhõm!

Chúng mình thấu hiểu sâu sắc rằng LQDOJ đóng một vai trò không nhỏ trong quá trình học tập và tự rèn luyện của các bạn. Chúng mình cũng xin chân thành cáo lỗi về sự cố vừa qua. Kể từ ngày hôm nay, server sẽ chính thức thực hiện việc sao lưu (backup) vào mỗi ngày để việc khắc phục các sự cố (nếu xảy ra trong tương lai) được nhanh nhất có thể. Xin cảm ơn sự đồng hành và ủng hộ của tất cả thầy cô và các bạn học sinh!


Bình luận