Chạy pg_dump trên máy chủ dự phòng nóng?


21

Tuyên bố miễn trừ trách nhiệm: Tôi thừa nhận chưa thử điều này, nhưng tôi không chắc mình sẽ biết liệu nó có hoạt động chính xác không, vì vậy tôi muốn hỏi.

Tôi muốn chạy một công việc sao lưu hàng đêm (thông qua pg_dumpall) từ một máy chủ dự phòng nóng đang chạy sao chép phát trực tuyến, để tránh đặt tải đó lên chính. Tôi chỉ thấy đề cập đến một số vấn đề mà mọi người gặp phải, ví dụ ở đâyở đây , nhưng rất ít hướng dẫn. Không sao nếu bản sao lưu chậm hơn một chút, miễn là nó phù hợp (cần phải như vậy).

Câu hỏi của tôi là:

  1. Tôi có thực sự muốn làm điều này không, hay nên sao lưu trên máy chủ chính? Tại sao?

  2. Khi thực hiện kết xuất ở chế độ chờ, tôi cần sử dụng cài đặt nào và quy trình nào để sử dụng chính xác? ví dụ tôi phải dừng sao chép trong suốt thời gian sao lưu?


Tôi hy vọng rằng nếu bản sao của bạn giữ cơ sở dữ liệu dự phòng ở trạng thái nhất quán, bản sao lưu của bạn sẽ nhất quán. Như pg_dumptài liệu nêu rõ: "Nó tạo ra các bản sao lưu nhất quán ngay cả khi cơ sở dữ liệu đang được sử dụng đồng thời." pg_dumpallchạy trước cho mỗi cơ sở dữ liệu.
dezso

Câu trả lời:


21

AFAIK, chạy pg_dumptrên chế độ chờ nóng là một trong những điều quan trọng mà standbys hữu ích cho. Nó hoàn toàn an toàn, mặc dù nó không hoàn toàn đáng tin cậy - các bãi rác có thể thất bại nếu chế độ chờ hủy bỏ giao dịch khi nó rơi quá xa so với chủ.

Điều duy nhất bạn thực sự cần xem là đảm bảo chế độ chờ là hiện tại và đang theo kịp. Nếu chế độ chờ bị mất kết nối với chủ và bị tụt lại quá xa, bạn không muốn nhanh chóng sao lưu chế độ chờ hết hạn trong ba tuần.

Bạn sẽ cần cho phép chế độ chờ giảm khá xa so với bản gốc trong quá trình sao lưu, vì nếu không, nó sẽ phải hủy pg_dumpgiao dịch của bạn để tiếp tục phát lại WAL. Xem tài liệu về chế độ chờ nóng , đặc biệt là phần "xử lý xung đột truy vấn" và các tham số max_standby_archive_delaymax_standby_streaming_delay.

Lưu ý rằng chủ phải sẵn sàng giữ đủ tài liệu lưu trữ WAL để cho phép nô lệ bắt kịp lại.


12
  1. Chúng tôi sao lưu dự phòng, nó là hoàn toàn tốt.
  2. Để tránh xung đột câu lệnh bị hủy trong quá trình sao lưu trên hệ thống dự phòng, bạn cần tạm dừng sao chép trên chế độ chờ bằng cách sử dụng SELECT pg_xlog_replay_pause();, sau đó chạy sao lưu, sau khi chạy xong SELECT pg_xlog_replay_resume();để tiếp tục sao chép. Hãy nhớ rằng việc chạy các lệnh trên sẽ gây ra độ trễ phục hồi trên Slave, có thể khá lớn, tùy thuộc vào kích thước cơ sở dữ liệu của bạn. Ngoài ra, hãy tính đến các phân đoạn WAL không gian sẽ mất, vì chúng sẽ không được phát lại trên nô lệ trong khi tạm dừng.

Bạn có thể tìm thấy một số chức năng quản trị hữu ích khác trong tài liệu . Ví dụ: kiểm tra xem máy chủ có thực sự đang trong quá trình khôi phục hay không, trước khi tạm dừng nó : SELECT pg_is_in_recovery().


0

Nếu bạn tạm dừng sao chép trong quá trình sao lưu, (Đây là một ý tưởng tốt để duy trì tính toàn vẹn và nhất quán), bạn có thể chỉnh sửa một số dòng trong postgresql chính của mình:

Bao nhiêu thời gian đang trì hoãn sao lưu của bạn theo thói quen. Đảm bảo rằng nút chính bảo toàn toàn bộ tệp x_log cần thiết để tiếp tục sao chép. Bạn có thể làm điều đó trong chỉnh sửa postgresql.conf

wal_keep_segments = 32      # in logfile segments, 16MB each; 0 disables

Nếu bạn không sửa đổi điều này và quá trình sao lưu của bạn quá dài, có lẽ là nút chính sẽ xóa các tệp xlog trước khi gửi chúng đến nô lệ.


Cài đặt này chỉ cần thiết để nhân rộng trực tuyến. Tôi đang sử dụng bản sao thường xuyên và wal được giữ trong máy chủ dự phòng, ngay cả khi máy chủ Postgres ở chế độ chờ bị tạm dừng.
david.perez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.