Nhận tệp WAL từ ví dụ AWS RDS PostgreQuery


18

Chúng tôi có một ví dụ RDS Postgres trên Amazon Web Services. Chúng tôi đã bật sao lưu tự động và chúng tôi chụp ảnh nhanh hàng ngày. Chúng tôi muốn tạo bản sao lưu 'cập nhật' cục bộ của phiên bản RDS mà chúng tôi có thể tự quản lý. Chạy pg_dump so với thể hiện là không đủ vì chúng tôi muốn có thể khôi phục cơ sở dữ liệu về bất kỳ thời điểm nào. Chúng tôi muốn có một bản sao lưu cục bộ của RDS và tất cả các tệp WAL kể từ khi bản sao lưu đó được thực hiện. Câu hỏi:

  1. Có thể truy cập các tệp WAL và bản sao lưu mà RDS đang tự động tạo trong thói quen sao lưu của nó không? Điều này sẽ là lý tưởng. Tôi muốn tải về một bản sao địa phương của họ. Sau khi điều tra ban đầu, tôi cảm thấy câu trả lời cho câu hỏi này là 'không'. Nghe có vẻ như RDS đang lưu trữ các tệp WAL và bản sao lưu trong S3, nhưng nó khiến chúng không thể truy cập được. Tôi rất thích xác nhận.

  2. Có cách nào khác để truy cập các giao dịch (tệp WAL) đã xảy ra trên phiên bản RDS không? Tôi tưởng tượng rằng chúng ta sẽ có thể tạo cơ sở dữ liệu Postgres trên các giao dịch EC2 và 'feed' từ phiên bản RDS 'sống' chính của chúng ta vào phiên bản EC2 này. Khi phiên bản EC2 của chúng tôi được cập nhật, chúng tôi có thể kéo các tệp WAL từ đó. Thật là đau đầu, mặc dù: / Có thể thiết lập này? Điều kỳ diệu để 'cung cấp' từ phiên bản RDS của chúng tôi đến phiên bản EC2 để nó luôn được cập nhật là gì?

Cảm ơn!

Câu trả lời:


17

Cập nhật: Tôi đã đăng bài này lên các diễn đàn AWS - vui lòng truy cập và yêu cầu nó ở đó .


Tại thời điểm viết bài, Amazon RDS không hỗ trợ sao chép vật lý ngoài RDS. Bạn có thể GRANTsử dụng REPLICATIONquyền sử dụng rds_superuserthông tin đăng nhập, nhưng bạn không thể định cấu hình replicationcác mục nhập cho các IP bên ngoài pg_hba.conf.

Hơn nữa, khi bạn tạo một nhóm tham số DB trong RDS, một số tham số chính được hiển thị nhưng bị khóa, ví dụ: archive_commandbị khóa /etc/rds/dbbin/pgscripts/rds_wal_archive %p. AWS RDS cho PostgreSQL dường như không hiển thị các WAL này cho truy cập bên ngoài (giả sử, thông qua S3) vì bạn sẽ cần phải sử dụng bản sao WAL-Shipping cho PITR bên ngoài.

Vì vậy, tại thời điểm này, nếu bạn muốn vận chuyển, đừng sử dụng RDS. Đó là một cơ sở dữ liệu dễ sử dụng đóng hộp, nhưng dễ sử dụng thường có nghĩa là nó cũng bị hạn chế, và đó chắc chắn là trường hợp ở đây. Như Joe Love chỉ ra trong các bình luận, nó cung cấp vận chuyển WAL và PITR trong RDS , nhưng bạn không thể truy cập vào WAL từ bên ngoài RDS.

Vì vậy, bạn cần sử dụng các phương tiện sao lưu riêng của RDS - bãi chứa, ảnh chụp nhanh và PITR dựa trên WAL của chính nó.


Ngay cả khi RDS đã cho phép bạn thực hiện các kết nối sao chép (cho pg_basebackuphoặc phát trực tuyến sao chép) và cho phép bạn truy cập WAL đã lưu trữ, bạn có thể không thực sự sử dụng WAL đó. RDS chạy một PostgreQuery đã được vá, mặc dù không ai biết bản vá đó nặng đến mức nào hoặc liệu nó có làm thay đổi đáng kể định dạng trên đĩa hay không. Nó cũng chạy trên kiến ​​trúc được chọn bởi Amazon, có lẽ là x64 Linux, nhưng không dễ xác định. Do định dạng và sao chép đĩa của PostgreQuery phụ thuộc vào kiến ​​trúc, bạn chỉ có thể sao chép vào các máy chủ có cùng kiến ​​trúc như Amazon RDS sử dụng và chỉ khi bản dựng PostgreQuery của bạn tương thích với chúng.

Trong số những điều khác, điều này có nghĩa là bạn không có cách nào dễ dàng để di chuyển khỏi RDS. Bạn sẽ phải dừng tất cả ghi vào cơ sở dữ liệu đủ lâu để thực hiện pg_dump, khôi phục nó và chạy DB mới. Các thủ thuật thông thường với sao chép và chuyển đổi dự phòng, với rsync, v.v., sẽ không hoạt động vì bạn không có quyền truy cập trực tiếp vào máy chủ DB.

Ngay cả khi RDS chạy PostgreQuery chưa được vá, Amazon có thể sẽ không muốn cho phép bạn thực hiện WAL streaming vào RDS hoặc nhập vào RDS bằng pg_basebackuplý do bảo mật. PostgreQuery coi thư mục dữ liệu là nội dung đáng tin cậy và nếu bạn đã tạo ra bất kỳ chức năng 'LANGUAGE c' thông minh nào có chức năng nội bộ hoặc thực hiện bất kỳ điều gì khó khăn khác, bạn có thể khai thác máy chủ để có quyền truy cập lớn hơn bạn nghĩ . Vì vậy, Amazon sẽ không cho phép WAL vào bất cứ lúc nào sớm.

Họ có thể hỗ trợ gửi WAL đi, nhưng các vấn đề trên với khả năng tương thích định dạng, tự do thực hiện thay đổi, v.v. vẫn được áp dụng.


Thay vào đó, bạn nên sử dụng một công cụ như Londiste hoặc Bucardo.


Nếu RDS không hỗ trợ PITR, thì nút "Khôi phục lại thời điểm" tốt cho việc gì?
Joe Love

1
RDS hỗ trợ PITR trong RDS . Bạn không thể gửi WAL ngoài RDS. Tôi sẽ chỉnh sửa để làm cho câu trả lời rõ ràng hơn, vì tôi có thể thấy bạn đã đọc nó như thế nào khi nói RDS hoàn toàn không có hỗ trợ PITR.
Craig Ringer


1

Việc sao chép bằng các hệ thống dựa trên kích hoạt như Londiste và Bucardo vào và ra khỏi RDS hiện được hỗ trợ kể từ ngày 10 tháng 11 năm 2014 , mỗi câu trả lời trên chủ đề diễn đàn đó.

Thông báo tại đây


1
Điều đó rất tiện lợi - nhưng không giống như được nói ở đây. Họ đang bổ sung hỗ trợ cho các bản sao logic dựa trên kích hoạt như Bucardo và Londiste với RDS. Điều này không thêm hỗ trợ cho phát trực tuyến dựa trên nhật ký "vật lý" như được sử dụng bởi chế độ chờ nóng pg_basebackup, v.v. Họ đã đưa ra lựa chọn tốt nhất có thể, vì các mối lo ngại về bảo mật ngăn họ thực sự hỗ trợ sao chép vật lý.
Craig Ringer

Aha, vâng. Và cảm ơn đã chỉnh sửa. Tôi đã nhận được câu hỏi này từ một câu hỏi khác mà thường được hỏi nhiều hơn cho các tùy chọn sao chép - nên đã nhận thấy câu hỏi này hỏi cụ thể về các tệp WAL.
michel-slm

Vui lòng thêm một liên kết đến câu hỏi liên quan, sau đó. Dù sao nó cũng hữu ích.
Craig Ringer

Bạn đang ở đây - cũng sẽ đăng câu trả lời của tôi ở đó: stackoverflow.com/questions/20468230/
Kẻ
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.