Làm cách nào tôi có thể nâng cấp liền mạch phiên bản chính của cơ sở dữ liệu postgres AWS RDS?


13

Sáng nay tôi đã tham gia nâng cấp cơ sở dữ liệu PostgreSQL trên AWS RDS. Chúng tôi muốn chuyển từ phiên bản 9.3.3 sang phiên bản 9.4.4. Chúng tôi đã "thử nghiệm" bản nâng cấp trên cơ sở dữ liệu dàn, nhưng cơ sở dữ liệu dàn đều nhỏ hơn nhiều và không sử dụng Multi-AZ. Hóa ra bài kiểm tra này khá bất cập.

Cơ sở dữ liệu sản xuất của chúng tôi sử dụng Multi-AZ. Chúng tôi đã thực hiện nâng cấp phiên bản nhỏ trong quá khứ và trong những trường hợp đó, RDS sẽ nâng cấp chế độ chờ trước rồi sau đó quảng cáo lên bản chính. Do đó, thời gian chết duy nhất phát sinh là ~ 60 giây trong thời gian chuyển đổi dự phòng.

Chúng tôi cho rằng điều tương tự sẽ xảy ra đối với việc nâng cấp phiên bản chính, nhưng ồ chúng tôi đã sai như thế nào.

Một số chi tiết về thiết lập của chúng tôi:

  • db.m3.lund
  • IOPS được cấp phép (SSD)
  • Dung lượng lưu trữ 300 GB, trong đó 139 GB được sử dụng
  • Chúng tôi đã có các bản nâng cấp hệ điều hành RDS nổi bật, chúng tôi muốn bó với bản nâng cấp này để giảm thiểu thời gian chết

Dưới đây là các sự kiện RDS được ghi lại trong khi chúng tôi thực hiện nâng cấp:

nhập mô tả hình ảnh ở đây

CPU cơ sở dữ liệu đã được tối đa hóa trong khoảng từ 08:44 đến 10:27. Rất nhiều thời gian này dường như bị chiếm giữ bởi RDS chụp ảnh chụp trước nâng cấp và sau nâng cấp.

Các tài liệu AWS không cảnh báo về những hậu quả như vậy, mặc dù từ khi đọc chúng, rõ ràng một lỗ hổng rõ ràng trong cách tiếp cận của chúng tôi là chúng tôi đã không tạo một bản sao của cơ sở dữ liệu sản xuất trong thiết lập Multi-AZ và cố gắng nâng cấp nó thành chạy thử

Nói chung, nó rất bực bội vì RDS đã cung cấp cho chúng tôi rất ít thông tin về những gì nó đang làm và thời gian có thể mất bao lâu. (Một lần nữa, thực hiện chạy thử sẽ giúp ...)

Ngoài ra, chúng tôi muốn học hỏi từ sự cố này vì vậy đây là câu hỏi của chúng tôi:

  • Đây có phải là điều bình thường khi thực hiện nâng cấp phiên bản chính trên RDS không?
  • Nếu chúng tôi muốn thực hiện nâng cấp phiên bản lớn trong tương lai với thời gian chết tối thiểu, chúng tôi sẽ thực hiện như thế nào? Có một số cách thông minh để sử dụng nhân rộng để làm cho nó liền mạch hơn?

Sau khi nâng cấp, chúng tôi nhận thấy rằng các postgres đang cố thực hiện quét tuần tự trên một số bảng với hàng triệu bản ghi, trong đó đáng lẽ nó phải sử dụng một chỉ mục thay thế (do đó đã hết thời gian truy vấn của chúng tôi). Một hướng dẫn ANALYZEđể cập nhật các số liệu thống kê đã giải quyết nó. Nếu bất cứ ai có cái nhìn sâu sắc về điều này cũng sẽ là tuyệt vời.
jonleighton

Câu trả lời:


4

Đây là một câu hỏi hay,
làm việc trong môi trường đám mây đôi khi rất khó khăn.

Bạn có thể sử dụng pg_dumpall -f dump.sqllệnh, sẽ chuyển toàn bộ cơ sở dữ liệu của bạn sang định dạng tệp SQL, theo cách mà bạn có thể xây dựng lại từ đầu chỉ đến điểm cuối khác. Sử dụng psql -h endpoint-host.com.br -f dump.sqlcho ngắn.

Nhưng để làm điều đó, bạn sẽ cần một số thể hiện EC2 với một số không gian hợp lý trong đĩa (để phù hợp với kết xuất cơ sở dữ liệu của bạn). Ngoài ra, bạn sẽ cần phải cài đặt yum install postgresql94.x86_64để có thể chạy lệnh dump và khôi phục.

Xem ví dụ tại PG Dumpall DOC .

Hãy nhớ rằng để giữ tính toàn vẹn của dữ liệu của bạn, một số trường hợp bắt buộc) bạn nên tắt các hệ thống kết nối với cơ sở dữ liệu trong cửa sổ bảo trì này.

Ngoài ra, nếu bạn cần tăng tốc mọi thứ, pg_dumpthay vào đó hãy cân nhắc sử dụng pg_dumpall, bằng cách tận dụng tham số song song ( -j njobs), khi bạn xác định số lượng CPU tham gia vào quá trình, ví dụ -j 8sẽ sử dụng cho đến 8 CPU. Theo mặc định, hành vi của pg_dumpallhoặc chỉ pg_dumpđược sử dụng 1. Ưu điểm duy nhất bằng cách sử dụng pg_dumpthay vào đó pg_dumpalllà bạn sẽ cần chạy lệnh cho từng cơ sở dữ liệu mà bạn có, đồng thời loại bỏ ROLES (nhóm và người dùng).

Xem ví dụ tại PG Dump DOCPG Restore DOC .


Để sử dụng tính năng song song, bạn sẽ cần sử dụng:pg_dump -h host -U user -W pass -Fc -f output_file.dmp -j 8 database_name
Vinnix

... và để khôi phục bằng cách sử dụng song song:pg_restore -h host -d database_name -U user -W pass -C -Fc -j 8 output_file.dmp
Vinnix

Bạn không thể tạo một cá thể rds mới từ một ảnh chụp nhanh env sản xuất của bạn?
Học viên
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.