自動スケーリングされたグループでデータベースの移行を実行する方法


8

モノリシックアーキテクチャから自動スケーリンググループに移行しようとしていますが、データベースの移行をどのように実行すればよいかわかりません(Laravel)。

新しいボックスがオンラインになったときにスクリプトが実行されると思います。これにより、最新のコードがgit pullされます。このスクリプトでデータベースの移行も実行する必要がありますか?1つのボックスだけで実行する方法がわかりませんか?


モノリシックから自動スケーリングに移行することで、データベースを具体的に参照していると思います。AWS RDSを使用していますか?そうでない場合は、調べましたか?aws.amazon.com/blogs/database/…– PrestonM '26
09/26

1
はい、RDSを使用しています。いいえ、アプリケーションが実行されるEC2インスタンスのスケーリングと負荷分散を行っています。
Mick

1
1つの解決策は、DBでべき等更新を実行できるflywayやliquibaseなどを使用することです。これにより、開始された各ノードがDBを更新しようとしても、移行がすでに発生している場合は何もできません。
Tensibai

公正な警告、Flywayは移行が実行された後にのみ、移行を完了としてマークします。複数のノードからFlywayを同時に起動した場合、同じ移行を同時に実行しようとする可能性が高く、問題が発生する可能性があります。
メープルバード2017

回答:


1

デプロイはどのように行っていますか?Nuke + ASGを再構築します(一度に1つのノード、またはグループ全体を一度に置き換えることによって)、またはすべてのアクティブなノードを再展開するスクリプトがありますか?

また、デプロイをどのようにトリガーしていますか?

理想的には、BambooやJenkinsのようなある種のCIサーバーからデプロイを実行/トリガーする必要があります。これを実行している場合は、ビルドサーバー(またはそのコンポーネントビルドエージェントインスタンス)からDB移行を実行できます。

これにより、たとえば、デプロイメントが失敗した場合にスナップショットからDBを復元できるため、環境をより詳細に制御できます。


現時点では、プロダクションボックスにSSHで接続し、コードをプルします。実際には、ほとんどの場合、ノードは1つしかないと思います。Code Deployを使用することを考えていました。AWS / Devopsの経験はまだありません。ロードバランスとASGを開始する簡単な方法を見つけようとしています。
Mick

AWS CodeDeployは優れており、規模が大きくなってより多くのサーバーの使用を開始すると、長期的にスケーリングします。今のところ、手動​​でSSHでデプロイしている場合は、DBの移行を実行する別のスクリプトをいつでも使用できます。つまり、CodeDeployを介して通常のデプロイメントスクリプトを実行し、データベースの移行を1つのノードから手動で実行します。あなたはいつでもすぐにLiquiBaseを実行することができCIサーバを構築していない場合、あなたはまたDaticalのような他のソフトウェアに見ることができます:aws.amazon.com/blogs/devops/...
maplebird

1

多くのオームのストア移行状態はDB自体にありますが、「手動」で行う場合、自分で構築することも難しくありません。実行されたすべての移行が格納される「migrationstate」テーブルがあるだけです。こうすることで、ノードがオンラインになったときに、ローカルの「migrations」フォルダに対してそのテーブルをチェックし、不足しているものを実行できます。これにより、バージョンバンプ後の最初のノードのみが移行を実行します。

補足:CloudFoundryは、スケールセット内の各インスタンス(ノード)がその識別子にアクセスできるようにすることでこれを解決します。最初のものは0を取得し、次は1を取得します。そのようにして、ノードは最初のものかどうかを認識し、移行を実行できます。ASGも同じだとは思いません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.