“Thật là nghịch lý, nhưng đúng, khi nói rằng chúng ta càng biết nhiều, chúng ta càng trở nên ngu dốt hơn theo nghĩa tuyệt đối, vì chỉ nhờ sự giác ngộ mà chúng ta mới trở nên ý thức được những giới hạn của mình. Chính xác một trong những kết quả hài lòng nhất của sự tiến hóa trí tuệ là việc liên tục mở ra những triển vọng mới và lớn hơn. " Nikola Tesla
PostgreSQL là một dự án tuyệt vời và nó phát triển với tốc độ đáng kinh ngạc. Chúng tôi sẽ tập trung vào sự phát triển của khả năng chịu lỗi trong PostgreSQL trong suốt các phiên bản của nó với một loạt bài đăng trên blog.
Tóm lại là PostgreSQL
Bản chất của nó là PostgreSQL có khả năng chịu lỗi. Đầu tiên, đây là một hệ thống quản lý cơ sở dữ liệu mã nguồn mở tiên tiến và sẽ kỷ niệm sinh nhật lần thứ 20 trong năm nay. Do đó, nó là một công nghệ đã được chứng minh và có một cộng đồng tích cực, nhờ đó nó có tiến độ phát triển nhanh chóng.
PostgreSQL tuân thủ SQL (SQL:2011) và hoàn toàn tuân thủ ACID (tính nguyên tử, tính nhất quán, tính cô lập, độ bền).
PostgreSQL cho phép sao chép vật lý và logic và có các giải pháp sao chép vật lý và logic được tích hợp sẵn. Chúng ta sẽ nói về các phương pháp sao chép (trong các bài đăng tiếp theo trên blog) trong PostgreSQL liên quan đến khả năng chịu lỗi.
PostgreSQL cho phép các giao dịch đồng bộ và không đồng bộ, PITR (Phục hồi điểm trong thời gian) và MVCC (Điều khiển đồng thời đa vũ trụ). Tất cả các khái niệm này đều liên quan đến khả năng chịu lỗi ở một số cấp độ và tôi sẽ cố gắng giải thích tác dụng của chúng trong khi giải thích các thuật ngữ cần thiết và ứng dụng của chúng trong PostgreSQL.
PostgreSQL rất mạnh mẽ!
Tất cả các hành động trên cơ sở dữ liệu được thực hiện trong giao dịch , được bảo vệ bằng nhật ký giao dịch sẽ thực hiện khôi phục sự cố tự động trong trường hợp phần mềm bị lỗi.
Cơ sở dữ liệu có thể được tùy chọn tạo bằng tổng kiểm tra khối dữ liệu để giúp chẩn đoán lỗi phần cứng. Nhiều cơ chế sao lưu tồn tại, với PITR đầy đủ và chi tiết, trong trường hợp cần khôi phục chi tiết. Nhiều công cụ chẩn đoán có sẵn.
Nhân rộng cơ sở dữ liệu được hỗ trợ nguyên bản. Sao chép đồng bộ có thể cung cấp nhiều hơn “5 Nines” (99,999 phần trăm) tính khả dụng và bảo vệ dữ liệu, nếu được định cấu hình và quản lý đúng cách.
Xem xét các sự kiện ở trên, chúng ta có thể dễ dàng khẳng định rằng PostgreSQL rất mạnh!
Khả năng chịu lỗi của PostgreSQL:WAL
Ghi trước nhật ký là hệ thống chịu lỗi chính cho PostgreSQL.
WAL bao gồm một loạt các tệp nhị phân được ghi vào thư mục con pg_xlog của thư mục dữ liệu PostgreSQL. Mỗi thay đổi được thực hiện đối với cơ sở dữ liệu được ghi lại đầu tiên trong WAL, do đó có tên là nhật ký “ghi trước”, như một từ đồng nghĩa của “nhật ký giao dịch”. Khi một giao dịch được cam kết, hành vi mặc định — và an toàn — là buộc các bản ghi WAL vào đĩa.
Nếu PostgreSQL gặp sự cố, WAL sẽ được phát lại, điều này sẽ trả cơ sở dữ liệu về điểm của giao dịch đã cam kết cuối cùng và do đó đảm bảo độ bền của bất kỳ thay đổi cơ sở dữ liệu nào.
Giao dịch? Cam kết?
Bản thân các thay đổi cơ sở dữ liệu không được ghi vào đĩa khi cam kết giao dịch. Những thay đổi đó được ghi vào đĩa đôi khi sau đó bởi trình ghi nền hoặc điểm kiểm tra trên một máy chủ được điều chỉnh tốt. ( Kiểm tra mô tả WAL ở trên. )
Giao dịch là một khái niệm cơ bản của tất cả các hệ thống cơ sở dữ liệu. Điểm cốt yếu của một giao dịch là nó bao gồm nhiều bước vào một hoạt động duy nhất, tất cả hoặc không có gì.
Các trạng thái trung gian giữa các bước không hiển thị đối với các giao dịch đồng thời khác và nếu một số lỗi xảy ra khiến giao dịch không thể hoàn thành, thì không có bước nào ảnh hưởng đến cơ sở dữ liệu. PostgreSQL không hỗ trợ đọc bẩn ( giao dịch đọc dữ liệu được ghi bởi một giao dịch không được cam kết đồng thời ).
Trạm kiểm soát
Khôi phục sự cố phát lại WAL, nhưng nó bắt đầu khôi phục từ thời điểm nào?
Quá trình khôi phục bắt đầu từ các điểm trong WAL được gọi là điểm kiểm tra . Thời gian khôi phục sự cố phụ thuộc vào số lượng thay đổi trong nhật ký giao dịch kể từ điểm kiểm tra cuối cùng. Điểm kiểm tra là điểm khởi đầu an toàn đã biết để khôi phục, vì nó đảm bảo rằng tất cả các thay đổi trước đó đối với cơ sở dữ liệu đã được ghi vào đĩa.
Một trạm kiểm soát có thể là ngay lập tức hoặc đã lên lịch . Các điểm kiểm tra ngay lập tức được kích hoạt bởi một số hành động của siêu người dùng, chẳng hạn như CHECKPOINT
lệnh hoặc khác; các điểm kiểm tra theo lịch trình được PostgreSQL quyết định tự động.
Kết luận
Trong bài đăng trên blog này, chúng tôi đã liệt kê các tính năng quan trọng của PostgreSQL liên quan đến khả năng chịu lỗi trong PostgreSQL. Chúng tôi đã đề cập đến ghi nhật ký ghi trước, giao dịch, cam kết, mức độ cô lập, điểm kiểm tra và khôi phục sự cố. Chúng tôi sẽ tiếp tục nhân rộng PostgreSQL ở bài đăng blog tiếp theo.
Tài liệu tham khảo:
Tài liệu PostgreSQL
Sách nấu ăn quản trị PostgreSQL 9 - Phiên bản thứ hai