Каков рекомендуемый способ обновления базы данных производства Heroku Postgres до 9.2 с минимальным временем простоя? Можно ли использовать последователя, или мы должны взять маршрут pgbackups/snapshots?
Обновление до постгрэса на острове Героку
Ответ 1
До логических последователей в 9.4 вам придется сбрасывать и восстанавливать (по причинам, описанным Крейгом). Вы можете упростить это с помощью pgbackups: transfer. Прямая передача быстрее, чем дамп и восстановление, но знайте, что у вас не будет моментального снимка.
script ниже в основном Heroku Использование резервных копий PG для обновления баз данных Heroku Postgres с изменениями для pgbackups: передача. (Если у вас несколько экземпляров, скажем, промежуточного сервера, добавьте "-a" или "-remote" в каждую строку Heroku, чтобы указать, какой сервер.)
# 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
Обратите внимание, что если вы сравните свой размер данных между ними, новый может быть намного меньше из-за эффективности в 9.2. (Мой 9,2 был около 70% от 9.1.)
Ответ 2
Сторонники Heroku - AFAIK, только потоковые серверы репликации PostgreSQL. Это означает, что вы не можете использовать их в разных версиях, у вас должны быть базы данных, совместимые с двоичными файлами.
Те же методы должны применяться как обычные PostgreSQL, за исключением того, что вы не сможете использовать pg_upgrade
на Heroku. Для этого требуется доступ к оболочке (ssh и т.д.) В качестве пользователя postgres
в системе, в которой размещается база данных, поэтому я сомневаюсь, что это возможно на Heroku, если они не предоставили инструмент для запуска pg_upgrade
для вас. Я не могу найти много информации об этом.
Вам, вероятно, придется взглянуть на использование Slony-I, Bucardo или другого решения для репликации на основе триггеров, чтобы выполнить обновление, если вы не найдете способ запустить pg_upgrade
в экземпляре базы данных Heroku. Основная идея заключается в том, что вы создали новый экземпляр 9.2, используя Slony для клонирования данных из экземпляра 9.1 в него, а затем, когда они полностью синхронизированы, вы остановите экземпляр 9.1, удалите триггеры Slony и переключите клиентов на 9.2.
Найдите дополнительную информацию о "postgresql low downtime upgrade slony" и т.д., см., как вы идете.