2013-10-16 15 views
6

Được phép và/hoặc hợp lý để cấu hình máy chủ PostgreSQL 9.2 chủ để KHÔNG lưu trữ nhưng để thực hiện sao chép trực tuyến. Điều đó được định cấu hình như được hiển thị bên dưới:Trong PostgreSQL 9.2, có cần lưu trữ để sao chép trực tuyến không?

wal_level = hot_standby 
archive_mode = off 

Máy chủ "nô lệ" (nóng) có được định cấu hình để lưu trữ phân đoạn WAL không?

wal_level = hot_standby 
hot_standby = on 
archive_mode = on 

Điều này sẽ cho phép lưu lượng mạng lưu trữ trên máy chủ chính được cắt giảm một nửa (nhân bản nhưng không lưu trữ). Điều này có vẻ hợp lý và tài liệu xuất hiện để hỗ trợ cấu hình này nhưng tôi muốn một chút bảo đảm rằng chúng tôi có một cấu hình tốt.

Trả lời

7

Từ documentation (mạnh thêm bởi bản thân mình):

Nếu bạn sử dụng luồng sao chép mà không cần lưu trữ liên tục dựa trên file, bạn phải thiết lập wal_keep_segments trong tổng thể đến một giá trị đủ cao để đảm bảo các phân đoạn WAL cũ không được tái chế quá sớm, trong khi chế độ chờ có thể vẫn cần chúng để bắt kịp. Nếu chế độ chờ ở phía sau quá nhiều, nó cần phải được khởi động lại từ bản sao lưu cơ sở mới. Nếu bạn thiết lập lưu trữ WAL có thể truy cập được từ chế độ chờ, wal_keep_segments không cần thiết vì chế độ chờ luôn có thể sử dụng kho lưu trữ để bắt kịp.

Vì vậy, theo hiểu biết của tôi, khi bạn có quá nhiều giao dịch đang chạy, người nô lệ có thể gặp khó khăn trong việc đồng bộ hóa. Đặc biệt nếu chủ nhân loại bỏ các tập tin WAL trước khi nô lệ thực sự có được những gì bên trong. Nếu không có archive_mode trên máy chủ, các tệp WAL có thể bị xóa mà không để lại bất kỳ cách nào để đưa chúng trở lại.

Nếu bạn duy trì tính năng lưu trữ WAL tại chỗ và thêm luồng khi cấu trúc nóng-lưu trữ đang hoạt động, điều này không thể xảy ra vì slave luôn có thể truy cập WAL đã lưu trữ và sẽ lấy lại các giao dịch chưa được đồng bộ hóa ngay sau hoạt động trên luồng cho phép. Nếu không có quyền truy cập vào kho lưu trữ, rủi ro rõ ràng là mất toàn vẹn nô lệ của bạn sau một số công cụ thực sự nặng.

Các vấn đề liên quan