プロジェクトの移行
デプロイ済みのプロジェクトを、データとともに同じチームの別のサーバーへ移します。より大きなサーバーへ、別のリージョンへ、または古いマシンを引退させるためにです。プロジェクトの ID、設定、ドメイン、履歴はそのままです。
新しいサーバーでプロジェクトが動くことを確認するまで、古いサーバーからは何も削除されません。
始める前に
- チームで admin か owner のロールが必要で、確認のためにプロジェクト名を入力します。
- プロジェクトはデプロイ済みである必要があります。デプロイしていないプロジェクトにはコピーするデータがないので、代わりに別のサーバーへ複製してください。
- 新しいサーバーは ready(準備完了)で、古いサーバーにも到達できる必要があります。データは古いサーバーからコピーするからです。
- 移行中、プロジェクトは使えません。 コピーの一貫性を保つためにサービスを停止します。利用の少ない時間に計画してください。所要時間は、すべてのデータをバックアップして復元するのとほぼ同じです。
移行を始める
- プロジェクトの Settings → General → Move to another server を開きます。
- 新しいサーバーを選びます。Zenavo が確認して次を表示します。
- サーバーの準備ができているか、チームがプランの範囲内か、サーバーに十分な空きメモリがあるか(各サービスのメモリ上限か最近の使用量から計算)
- そのサーバー上の他のプロジェクトとのドメインや公開 TCP/UDP ポートの衝突
- コピーされるデータ
- 自動で切り替わる生成ドメインと、カスタムドメインのために変更が必要な DNS レコード
- プロジェクト名を入力し、Move をクリックします。
移行はジョブとして実行され、そのページに各ステップとログが表示されます。
何が起きるか
| ステップ | Zenavo が行うこと |
|---|---|
| 新しいサーバーの確認 | 準備ができていて余裕があることを確認します。まだ何も変わっていません。 |
| 書き込みの停止 | 古いサーバーのアプリケーションサービスを停止します。 |
| バックアップ | ボリュームのない PostgreSQL と MySQL のデータベースをダンプしてから停止し、すべてのボリュームを .tar アーカイブとしてコピーします。各ファイルの SHA-256 を記録します。 |
| デプロイ | 新しいサーバーに同じイメージと設定を、すべてのサービスを停止した状態でデプロイします。データは古いサーバーから来るので、初期化コマンドは実行しません。TLS 証明書もコピーするので、トラフィックが届いた時点から HTTPS が使えます。 |
| 復元 | 各ボリュームを新しい空のボリュームに復元し、ダンプが必要なデータベースを起動してダンプを復元します。 |
| 起動 | 依存関係の順に、元と同じインスタンス数でサービスを起動し、ヘルスチェックを待ちます。 |
| 切り替え | 各生成ドメインを新しいサーバーのアドレスに向け、それをプロジェクトのサーバーにします。 |
移行前に一時停止または停止していたサービスは、新しいサーバーでも停止したままです。
失敗したら
切り替えより前のステップが失敗すると、Zenavo は移行を取り消します。サービスは古いサーバーで元どおりに再び起動し、新しいサーバーのコピーは削除され、ジョブは理由とともに失敗します。移行によって古いサーバーのデータが変わることはありません。
取り消しも失敗した場合(古いサーバーに到達できなくなったなど)、移行は開いたままになり、理由が表示されます。問題を直してから Roll back をクリックして再試行してください。新しいサーバーのコピーは、古いサーバーが再び動いてから削除されます。
切り替えのあと
プロジェクトは新しいサーバーで動いています。停止したコピーとそのデータはすべて古いサーバーに残っています。移行があなたの確認を待っている間に:
- カスタムドメイン:DNS レコードを新しいサーバーのアドレスに変えてください。移行ページに、ドメインごとの正確なレコード(
AかAAAAとアドレス)が表示されます。変えるまで、それらのドメインは停止した古いサーバーに向いたままです。 - 新しいサーバーでアプリを確認してください:サインイン、バックグラウンドのワーカー、メール、Webhook など、アプリが依存するものすべて。
- 移行を正確に取り消せるよう、デプロイなどのプロジェクトの操作は一時的に止まっています。
それから、どちらかを選びます。
- Finish move は、停止したコピーとそのボリュームを古いサーバーから削除し、移行用の転送ファイルを Zenavo から削除します。その後は古いサーバーにロールバックできません。
- Roll back は、新しいサーバーのコピーを停止し、生成ドメインを元に戻し、移行開始時のデータで古いサーバーのサービスを起動し、新しいコピーを削除します。切り替え後に新しいサーバーで行われた変更はコピーされて戻りません。 カスタムドメインを変えていたら、それも元に戻してください。
知っておくと良いこと
- 生成ドメインのレコードは、新しいレコードを先に追加してから古いものを削除するので、名前は常に解決できます。リゾルバーが古いアドレスを最大 5 分保持することがあります。
- サービスがボリューム以外(コンテナ内)に置いているデータはコピーされません。どのみち再起動で失われるものです。必要なデータにはボリュームを追加してください。
- 転送ファイルはバックアップと同じ種類のもので、移行を完了するかロールバックするまでプロジェクトのバックアップに表示されます。
- 別のチームのサーバーへの移行はできません。代わりにプロジェクトを別のチームに複製し、そこでバックアップを復元してください。
- 移行、完了、ロールバックはすべてチームの監査ログに記録されます。
API
| メソッド | パス | |
|---|---|---|
GET | /api/projects/{pid}/move | 最新の移行:状態、サーバー、データ、ドメイン、can_finish、can_roll_back |
GET | /api/projects/{pid}/move/preflight?server_id= | 何も変えずに移行を確認(管理者) |
POST | /api/projects/{pid}/move | 開始:{server_id, confirmation: "<project name>"}(ジョブを返します) |
POST | /api/projects/{pid}/move/finish | 古いサーバーから停止したコピーを削除(ジョブを返します) |
POST | /api/projects/{pid}/move/rollback | 古いサーバーに戻す(ジョブを返します) |