AWS RDS postgresデータベースのメジャーバージョンをシームレスにアップグレードするにはどうすればよいですか?


13

今朝、私はAWS RDS上のPostgreSQLデータベースのアップグレードに関与しました。バージョン9.3.3からバージョン9.4.4に移行したかったのです。ステージングデータベースでアップグレードを「テスト」しましたが、ステージングデータベースははるかに小さく、マルチAZを使用しません。このテストはかなり不十分であることが判明しました。

運用データベースではマルチAZを使用しています。過去にマイナーバージョンアップグレードを行ったことがあります。その場合、RDSは最初にスタンバイをアップグレードしてからマスターに昇格します。したがって、フェイルオーバー中に発生するダウンタイムは最大60秒です。

メジャーバージョンのアップグレードでも同じことが起こると想定していましたが、それは間違いです。

セットアップに関する詳細:

  • db.m3.large
  • プロビジョンドIOPS(SSD)
  • 300 GBのストレージ、そのうち139 GBが使用されます
  • RDS OSのアップグレードは未解決であり、ダウンタイムを最小限に抑えるためにこのアップグレードをバッチ処理したかった

アップグレードの実行中に記録されたRDSイベントは次のとおりです。

ここに画像の説明を入力してください

データベースCPUは08:44から10:27の間に最大になりました。この時間の多くは、アップグレード前およびアップグレード後のスナップショットを取るRDSによって占有されているように見えました。

AWSのドキュメントには、それらを読んでから、我々のアプローチの明らかな欠陥は、我々はのコピーを作成しなかったことであることは明らかであるものの、そのような影響を警告していない生産マルチAZセットアップでデータベースをし、としてそれをアップグレードしよう試運転

一般に、RDSが何をしていて、どれくらいの時間がかかる可能性があるかについて、RDSがほとんど情報を提供しなかったため、非常にイライラしていました。(繰り返しになりますが、試用版を実行すると助かります...)

それとは別に、この事件から学びたいので、ここに質問があります:

  • RDSでメジャーバージョンアップグレードを行う場合、この種のことは正常ですか?
  • 将来、最小のダウンタイムでメジャーバージョンアップグレードを行いたい場合、どうすればよいでしょうか?レプリケーションを使用してシームレスにするための賢い方法はありますか?

アップグレード後、postgresは数百万のレコードを持つテーブルでシーケンシャルスキャンを実行しようとしていることに気付きました。代わりにインデックスを使用する必要がありました(クエリタイムアウトに達しました)。ANALYZE統計を更新するマニュアルがそれを解決しました。誰かがこれについての洞察を持っているなら、それも素晴らしいでしょう。
ジョンレイトン

回答:


4

これは良い質問
です。クラウド環境での作業は時々難しいです。

pg_dumpall -f dump.sqlコマンドを使用して、データベース全体をSQLファイル形式にダンプすることができます。他のエンドポイントを指すゼロから再構築することができます。psql -h endpoint-host.com.br -f dump.sql短く使用します。

ただし、それを行うには、ディスクにある程度のスペースがあるEC2インスタンスが必要になります(データベースダンプに合わせるため)。また、yum install postgresql94.x86_64ダンプおよび復元コマンドを実行できるようにするためにインストールする必要があります。

PG Dumpall DOCの例を参照してください。

データの整合性を保つために、このメンテナンス期間中にデータベースに接続するシステムをシャットダウンすることをお勧めします(場合によっては必須になる)。

また、高速化が必要な場合は、プロセスに関与するCPUの数を決定するときに、並列処理()パラメーターを利用して、pg_dump代わりpg_dumpallにを使用することを検討して-j njobsください-j 8。たとえば、8 CPUまで使用します。デフォルトでは、pg_dumpallやはpg_dump使用してのみ1.唯一の利点を使用することであるpg_dump代わりにpg_dumpall、あなたが持っていることを各データベースに対してコマンドを実行する必要があり、また、ロール(グループとユーザーを)ダンプすることである分離しました。

PG Dump DOCおよびPG Restore DOCの例を参照してください。


並列機能を使用するには、次を使用する必要がありますpg_dump -h host -U user -W pass -Fc -f output_file.dmp -j 8 database_name
。– Vinnix

...および並列処理を使用して復元するには:pg_restore -h host -d database_name -U user -W pass -C -Fc -j 8 output_file.dmp
Vinnix

本番環境のスナップショットから新しいrdsインスタンスを作成することはできませんか?
学習者
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.