Lưu trữ liên tục: có thể sử dụng nhiều máy không?


7

Có thể sử dụng archive_commandđể gửi đến nhiều máy? Có phải nó chỉ đơn giản như tách với một &&vì về cơ bản nó chỉ là một dòng lệnh?

command1 && command2

Tôi cho rằng điều này có thể có tác động xấu nếu một lệnh thất bại, ví dụ nếu command1thất bại thì command2sẽ không chạy; và nếu command2thất bại, nó sẽ trả về số không cho toàn bộ và Postgres sẽ thử gửi lại WAL, điều đó có nghĩa là nó sẽ chạy lại command1.

Tôi hy vọng có một giải pháp chính thức hơn cho vấn đề này. Mục tiêu của tôi là có một bản sao lưu bên trong trung tâm dữ liệu và một bản sao lưu bên ngoài trung tâm dữ liệu.


Mặc dù không phải là một câu trả lời cho câu hỏi của bạn, tôi khuyên bạn nên xem xét việc sử dụng các tính năng sao chép phát trực tuyến trong các phiên bản mới hơn của PG. Tuy nhiên, bạn vẫn nên sử dụng vận chuyển WAL để khen ngợi nó, vì điều đó cho phép các bản sao bắt kịp nếu chúng ngoại tuyến và đi quá xa so với chủ, tuy nhiên, vì vậy câu hỏi của bạn vẫn có liên quan. Phiên bản máy chủ nào bạn đang sử dụng anywya?
Craig Ringer

Câu trả lời:


3

Đầu tiên, tôi luôn tạo một tập lệnh bao bọc khi tạo các lệnh như thế. Điều đó làm cho việc gỡ lỗi lệnh dễ dàng hơn mà không phải báo hiệu postgres để tải lại bất cứ thứ gì. Điều này cũng làm cho việc đăng nhập từ tập lệnh lưu trữ của bạn dễ dàng hơn.

Điều bạn cần tìm hiểu đầu tiên là cách bạn muốn sao chép dữ liệu của mình. Cách bạn đang làm bây giờ có vẻ ổn, ít nhất là nếu bạn kiểm tra xem tệp đích không tồn tại trước khi sao chép nó. Bằng cách đó, nó có thể được chạy lại bao nhiêu lần tùy thích và nó sẽ cố gắng sao chép nó vào vị trí bên ngoài.


2
Cảm ơn câu trả lời. Postgres cũng có các đoạn mã dự phòng sau đây, đó là cách thực hành được đề xuất postgresql.org/docs/civerse/static/ mẹo
Collin Peters

0

Tôi tin rằng bạn có thể làm điều này với nhiều rsynclệnh thay vì sử dụng một cái gì đó như cp. Theo cách đó, nếu một máy chủ yêu cầu khởi động lại thì các máy chủ khác sẽ không bị ảnh hưởng.

Cái gì đó như:

archive_command = 'rsync -a %p root@local.com:/var/lib/postgresql/9.1/wals/%f

\&& 

rsync -a %p root@remote.com:/var/lib/postgresql/9.1/wals/%f '

Không chính thức, nhưng về mặt lý thuyết là khả thi.


Tôi đã nghĩ về điều này, nhưng nếu lệnh rsync đầu tiên thất bại thì sao? Giả sử nó trả về thất bại, điều đó có nghĩa là rsync thứ hai thậm chí sẽ không chạy
Collin Peters

bạn không cần nghỉ "\" trong đó. Trên thực tế, việc đưa break vào archive_command cho phiên bản 9.5 sẽ phá vỡ nó.
Dina
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.