リードレプリカインスタンスを作成したPostgres RDSインスタンスがあります。私たちが直面している問題は、リードレプリカで長時間実行されているクエリ(約30〜40分)があると、競合エラーが発生して完了しないことです。この競合の理由は、ストリーミングレプリケーションアプローチに従っているため、メインRDSに更新があり、それがリードレプリカに反映されていたためです。このため、また新しい要件のため、このレプリケーションプロセスを毎日行う必要があります。つまり、継続的な更新ではなく、トリガーベースのアプローチ(毎日のバックアップアプローチなど)が必要です。
AWSのコンソールで確認したところ、設定できるさまざまなパラメーターがあります。要件を満たすために設定できるパラメーターはありますか?または、私にとって唯一の方法は、リードレプリカインスタンスを削除し、Bucardoのようなトリガーベースのレプリケーションツールを使用して、EC2インスタンスを使用することです。
リードレプリカインスタンスを削除せずに、いくつかのパラメーターを調整して目的を達成できる方法を私は本当に望んでいます。
私たちが直面している問題は、リードレプリカで長時間実行されているクエリ(約30〜40分)があると、競合エラーが発生して完了しないことです。
この動作は、パラメーター max_standby_streaming_delay / max_standby_archive_delay によって制御されます。リードレプリカインスタンスで使用されるRDSパラメーターグループのこれらのパラメーターをいじることで、リードレプリカに対するクエリが完了するまでの時間を増やすことができます。
このため、また新しい要件のため、このレプリケーションプロセスを毎日行う必要があります。つまり、継続的な更新ではなく、トリガーベースのアプローチ(毎日のバックアップアプローチなど)が必要です。
プライマリデータベースのスナップショットを毎晩更新する場合は、cronジョブを使用して毎晩RDSスナップショットを復元できます。 RDSにこれを自動的に実行するボタンはないと思いますが、毎晩スクリプトを作成するのはそれほど難しくありません create-db-snapshot + restore-db- instance-from-db-snapshot AWS CLI、boto、またはAWSへの任意のインターフェースを使用します。常に最新のインスタンスを指すRoute53エントリを維持し、既存のインスタンスに対して一晩実行されているセッションが中断されないように、強制終了されるまで1日ほど古いインスタンスを残しておくこともできます。
AWSのコンソールで確認したところ、設定できるさまざまなパラメーターがあります。要件を満たすために設定できるパラメーターはありますか?または、私にとって唯一の方法は、リードレプリカインスタンスを削除し、Bucardoのようなトリガーベースのレプリケーションツールを使用して、EC2インスタンスを使用することです。
おそらく それは可能です RDS Postgresがセッションレプリケーションの役割をサポートするようになったため、BucardoをRDSに接続しますが、夜間のスナップショットが必要な場合は、RDSインスタンスのスナップショットを使用する方がはるかに良いと思います。