2012-12-28 38 views
12

Cách được khuyến nghị để nâng cấp cơ sở dữ liệu sản xuất Heroku Postgres lên 9,2 với thời gian ngừng hoạt động tối thiểu là gì? Có thể sử dụng một người theo dõi hay chúng ta nên sử dụng tuyến đường pgbackups/snapshots?nâng cấp lên postgres trên Heroku

+0

Vì giải pháp (được bình chọn cao nhất) được áp dụng cho 9.2 và 9.3, bạn có thể cân nhắc xóa số phiên bản khỏi tiêu đề câu hỏi của mình. –

Trả lời

18

Cho đến logical followers in 9.4, bạn sẽ phải đổ và khôi phục (vì lý do Craig mô tả). Bạn có thể đơn giản hóa điều này với pgbackups: chuyển. Chuyển trực tiếp nhanh hơn đổ và khôi phục, nhưng biết rằng bạn sẽ không có ảnh chụp nhanh.

Tập lệnh bên dưới về cơ bản là số Using PG Backups to Upgrade Heroku Postgres Databases của Heroku với sửa đổi cho pgbackups:transfer. (Nếu bạn có nhiều trường hợp, nói một dàn máy chủ, thêm "-a" hoặc "--remote" với từng ngành nghề Heroku để xác định các máy chủ.)

# get the pgbackups plugin 
heroku plugins:install git://github.com/heroku/heroku-pg-extras.git 

# provision new db 
heroku addons:add heroku-postgresql:crane --version=9.2 

# wait for it to come online, make note of new color 
heroku pg:wait 

# prevent new data from arriving during dump 
heroku ps:scale worker=0 web=0 
heroku maintenance:on 

# copy over the DB. could take a while. 
heroku pgbackups:transfer OLDCOLOR NEWCOLOR 

# promote new database as default for DATABASE_URL 
heroku pg:promote NEWCOLOR 

# start everything back up and test 
heroku ps:scale worker=N web=N 
heroku maintenance:off 
heroku open 

# remove old database 
heroku addons:remove HEROKU_POSTGRESQL_OLDCOLOR 

Lưu ý rằng nếu bạn so sánh kích thước dữ liệu của bạn giữa chúng , cái mới có thể nhỏ hơn nhiều vì hiệu quả trong 9.2. (9.2 của tôi là khoảng 70% của 9.1.)

1

Người theo dõi Heroku là, AFAIK, chỉ các máy chủ sao chép trực tuyến của PostgreSQL. Điều này có nghĩa là bạn không thể sử dụng chúng trên các phiên bản, bạn phải có cơ sở dữ liệu tương thích nhị phân.

Các kỹ thuật tương tự sẽ áp dụng như PostgreSQL thông thường, ngoại trừ việc bạn có thể không sử dụng được pg_upgrade trên Heroku. Điều này yêu cầu truy cập shell (ssh, etc) là người dùng postgres trên hệ thống lưu trữ cơ sở dữ liệu, vì vậy tôi nghi ngờ có thể có trên Heroku trừ khi họ cung cấp công cụ để chạy pg_upgrade cho bạn. Tôi không thể tìm thấy nhiều thông tin về điều này. Bạn có thể sẽ phải xem xét bằng cách sử dụng Slony-I, Bucardo, hoặc một giải pháp nhân bản dựa trên trình kích hoạt khác để thực hiện nâng cấp trừ khi bạn có thể tìm cách chạy pg_upgrade trên một cá thể cơ sở dữ liệu Heroku. Ví dụ:. Ý tưởng chung là bạn thiết lập một phiên bản 9.2 mới, sử dụng Slony để sao chép dữ liệu từ thể hiện 9.1 vào nó, sau đó khi chúng hoàn toàn đồng bộ, bạn dừng phiên bản 9.1, loại bỏ trình kích hoạt Slony và chuyển đổi máy khách sang 9.2.

Tìm kiếm thêm thông tin về "thời gian ngừng nâng cấp thời gian ngừng hoạt động thấp", hãy xem cách bạn thực hiện.

+0

Craig là chính xác, họ đang streaming bản sao: bạn không thể sử dụng tuyến đường này để nâng cấp. Hiện tại, cách tiếp cận tốt nhất là sử dụng pgbackups: lệnh chuyển có sẵn trong plugin pg-extras (https://github.com/heroku/heroku-pg-extras#pgbackupstransfer) để chuyển dữ liệu nhanh chóng (trong khi bạn ứng dụng đang ở chế độ bảo trì). Trong tương lai, chúng tôi có kế hoạch hỗ trợ các tùy chọn nâng cấp dễ dàng hơn. – hgmnz

+0

@hgmnz Tại sao không sử dụng [heroku-pgupgrade] (https://github.com/hgmnz/heroku-pgupgrade)? – thejaz

+0

@thejaz aha! Vâng, bởi vì nó hiện đang trong phiên bản beta, và nó sẽ xảy ra để bị hỏng (phía máy chủ) cho đến khi có thông báo mới. Khi nó đã sẵn sàng cho thời gian chính, tôi chắc chắn sẽ lưu ý nó trên repo đó. – hgmnz

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