Chuyện có thật · GitLab, 31/1/2017

Một lệnh,
sai một cái máy

Một kỹ sư xóa nhầm khoảng 300 GB dữ liệu. Rồi cả năm lớp sao lưu đều không dùng được. Kể lại theo bản phân tích của chính GitLab, để rút ra việc nên làm trước khi gõ một lệnh xóa.

Dòng thời gianNăm lớp sao lưuMười tám giờ khôi phụcSáu mươi giây trước khi gõ
rm: đúng máy chưa?
sao lưu chưa thử là chưa có
Ba ý chính

Câu chuyện, nói gọn

1Một lệnh xóa vào nhầm máy. Khoảng 300 GB biến mất, lệnh bị dừng sau một hai giây, quá muộn.
2Rồi sao lưu không dùng được. Năm lớp, mỗi lớp hỏng một kiểu, và không ai làm chủ việc kiểm tra. Mất khoảng 18 giờ để khôi phục.
3Gõ nhầm chỉ là mắt xích cuối. GitLab sửa quy trình, không đổ lỗi, và công khai mọi thứ.

Tóm lại: sao lưu chưa thử khôi phục thì chưa phải sao lưu.
Lưu ý: đây là chuyện có thật nhưng không phải chuyện của tác giả. Kể theo bản phân tích của GitLab, không đặt tên người kỹ sư, không đoán điều họ nghĩ.

Từ khó, nói dễ

Sáu từ để hiểu câu chuyện

Thuật ngữNói dễ hiểu
Máy chủ chính (primary)Máy cơ sở dữ liệu đang chạy thật
Máy chủ phụ (secondary)Máy sao chép lại máy chính để thay thế khi hỏng
Sao chép đồng bộMáy phụ liên tục nhận thay đổi từ máy chính
Sao lưu (backup)Bản sao để khôi phục sau sự cố. Khác với sao chép đồng bộ
Ảnh chụp (snapshot)Bản chụp trạng thái ổ đĩa tại một thời điểm
Không đổ lỗi (blameless)Tìm điểm yếu của hệ thống, không tìm người để trách
Dòng thời gian

Từ một ngày thường đến một đêm dài

Giờ (UTC)Chuyện gì xảy ra
1Một kỹ sư chụp ảnh ổ đĩa cơ sở dữ liệu để thử tải ở môi trường thử
1Tải tăng vọt: thư rác và một tiến trình xóa dữ liệu chạy nhầm
2Máy phụ ngừng sao chép. Phải dựng lại bằng tay, công cụ treo im lặng
2Lệnh xóa chạy trên máy chính, khoảng 300 GB biến mất
+18 giờChép dữ liệu về xong, GitLab.com chạy lại (1/2, 17:00)
Khoảnh khắc

Một lệnh, một hai giây

300 GB

Bị xóa khỏi máy chủ chính trước khi lệnh bị dừng, chỉ một hai giây sau.

Việc định làm

Xóa thư mục dữ liệu của máy phụ để dựng lại sao chép.

Việc đã xảy ra

Lệnh chạy trên máy chính.

Mình không biết người đó nghĩ gì, và bài này không đoán.
Năm lớp sao lưu

Không lớp nào dùng được

LớpVì sao không dùng được
Sao lưu hằng ngàySai phiên bản công cụ nên rỗng. Báo lỗi bằng email bị từ chối, không ai biết
Ảnh chụp ổ đĩa đám mâyChưa bật cho máy chủ cơ sở dữ liệu
Ảnh chụp LVMMỗi 24 giờ, làm để chép sang môi trường thử. Chỉ có một bản tay 6 giờ trước
Sao chép sang máy phụDành cho dự phòng, không phải khôi phục. Máy phụ vừa bị xóa để dựng lại
Bản ở môi trường thửCó dữ liệu nhưng trên ổ đĩa chậm, ở vùng khác
Vì sao

Mỗi lớp hỏng một kiểu, và không ai làm chủ

Lớp dùng được
0/5

Ngoài một ảnh chụp tay tình cờ do chính kỹ sư đó chụp 6 giờ trước.

Người làm chủ
0

Theo GitLab, sao lưu không có người chịu trách nhiệm kiểm tra thường xuyên.

Điểm chung

Không ai thử khôi phục trước khi cần. Cái chưa thử thì chưa biết có chạy.

Khôi phục

Mười tám giờ chép dữ liệu về

Bản được chọn
6 giờ

Ảnh chụp tay trước sự cố, mất ít dữ liệu hơn bản 24 giờ.

Thời gian chép
~18 giờ

Ổ đĩa chậm bị giới hạn khoảng 60 Mbps, nút thắt là ổ đĩa.

Cộng thêm vào bộ đếm
100.000

Để không dùng lại mã số đã cấp trước sự cố.

Trạng thái khôi phục

Cơ sở dữ liệu về lúc 17:20 UTC ngày 31/1.

Chạy lại

17:00 UTC ngày 1/2, tạm chưa có webhook, dựng lại sau.

Kiểm tra cuối

Xong khoảng 18:00 UTC cùng ngày.

Thiệt hại

Ước tính của GitLab

Dự án
5.000+

Dự án mất thay đổi từ khoảng 17:20.

Bình luận
5.000+

Bình luận mất.

Tài khoản mới
~700

Tài khoản tạo trong khoảng đó.

Không bị ảnh hưởng

Kho mã Git và wiki (lưu riêng), khách hàng tự cài đặt.

Dự án tạo sau 17:20

Chỉ khôi phục kho mã, không có issue hay merge request.

Lưu ý

Mốc cuối của khoảng mất dữ liệu ghi 23:30 ở một phần và 00:00 ở phần khác. Đừng coi là chính xác tuyệt đối.

Trước công chúng

Cách GitLab xử lý cũng đáng học

1Một tài liệu chung công khaiGhi lại từng bước ngay khi làm.
2Phát trực tiếp việc khôi phụcTrên YouTube, cao điểm khoảng 5.000 người xem.
3Bản phân tích dài sau mười ngàyKèm danh sách khoảng 15 việc cần làm.
4Nhận chuyện nêu tên ngườiVà hứa ẩn tên trong các sự cố sau.
5Không đổ lỗiHỏi "làm sao để không ai nhầm được", không hỏi "ai nhầm".
Chuỗi nguyên nhân

Lệnh nhầm chỉ là mắt xích cuối

1

Tải tăng vọt

Thư rác và một tiến trình xóa dữ liệu chạy nhầm.

2

Máy phụ ngừng

Hệ thống không lưu nhật ký thay đổi để dùng lại.

3

Dựng lại bằng tay

Thiếu tài liệu, công cụ treo im lặng.

4

Sao lưu hỏng âm thầm

Thông báo lỗi bị từ chối, không ai biết.

5

Thiếu ảnh chụp

Chưa bật cho máy chủ cơ sở dữ liệu.

6

Không ai làm chủ

Không ai kiểm tra việc khôi phục.

7

Hai máy dễ nhầm

Dấu nhắc lệnh chưa đủ phân biệt.

Mắt xích cuối

Gõ nhầm lệnh.

GitLab đã sửa

Tập trung vào khôi phục và nhận diện máy

1

Dấu nhắc lệnh rõ ràng

Cho biết máy và môi trường.

2

Giám sát sao lưu

Có bảng theo dõi công khai.

3

Ảnh chụp mỗi giờ

LVM cho cơ sở dữ liệu sản xuất (đã làm).

4

Ảnh chụp đám mây

Bật cho máy chủ cơ sở dữ liệu.

5

Tự thử khôi phục

Sao lưu phải chứng minh được.

6

Khôi phục theo thời điểm

Lưu nhật ký liên tục.

7

Tài liệu, sổ tay

Cho việc dựng lại sao chép.

8

Người làm chủ

Giao một người lo độ bền dữ liệu.

Gợi ý của mình

Sáu mươi giây trước khi gõ lệnh xóa

1

Máy nào?

Đọc tên máy trên dấu nhắc, đừng đoán.

2

Thư mục nào?

In đường dẫn hiện tại trước khi xóa.

3

Chạy thử

Chế độ chỉ liệt kê, xem sẽ xóa gì.

4

Sao lưu có thật?

Đã khôi phục thử và thấy dữ liệu về.

5

Người thứ hai

Với dữ liệu sản xuất, thêm một cặp mắt rất rẻ.

6

Đừng làm khi quá mệt

Suy luận chung, GitLab không nói người đó mệt.

7

Phút đầu sau khi nhầm

Dừng lệnh, báo ngay, đừng tự sửa lặng lẽ.

Lưu ý

Đây là gợi ý của tác giả, không phải kết luận của GitLab.

Cân bằng

Nhìn câu chuyện cho đúng cỡ

Điều nên nhớ
  • Chủ yếu dựa vào một nguồn: báo cáo của GitLab
  • Một số chi tiết khác nhau giữa các phần
  • Gần 10 năm trước, công cụ đã đổi
Đừng hiểu nhầm
  • Không đổ lỗi không có nghĩa là không trách nhiệm
  • Không biết người đó cảm thấy gì
  • Nguyên nhân vẫn rất quen

Thời AI, mỗi agent có quyền xóa là một người gõ lệnh không bao giờ mệt và không thấy "có gì sai sai". Quyền tối thiểu, chỉ đọc trước, người duyệt.

Việc làm ngay

Chọn một bản sao lưu bạn tin, và thử khôi phục nó trong tuần này.

Chưa từng thử thì bạn chưa có bản sao lưu, bạn chỉ có hy vọng.