Google Cloud Compute Engineを作成し、毎晩バックアップ(スナップショット)しました。同じプロジェクトに2番目のVMがあります。これは、最初のプロジェクトのクローンです。2番目のVMインスタンスを毎回更新することは可能ですか?最初のスナップショットを作成したばかりですか?それで、最悪の場合24時間経過したフェイルバックサーバーがありますか?
スナップショットから新しいインスタンスを作成し、新しいインスタンスが正常であることを確認して、2番目のVMインスタンスを削除する必要があります。gcloudsdkにはそのためのフラグがあります-
gcloud compute instances create
with --source-snapshot=SNAPSHOT
国旗。
あなたのケースについてはよくわかりませんが、新しくリリースされた GCPマシンイメージ が検討に適した代替手段になる可能性があります。複数のディスクのバックアップ、インスタンスのクローン作成、レプリケーションなど、ディスクスナップショットでは利用できない機能を提供します。 マシンからインスタンスを作成する すべてのインスタンスのプロパティ、構成、データをそのまま使用したイメージ。
誰かが同じ問題に直面した場合、私はクラウド関数を作成し、それを毎日スケジュールしました。手順は次のとおりです。
これはそのためのコードです:
const Compute = require("@google-cloud/compute");
const axios = require("axios");
const compute = new Compute({
projectId: "myProjectID",
keyFilename: "./gcloud_key.json"
});
exports.updateFailOverVM = async (pubSubEvent, context) => {
try {
const snapshots = await compute.getSnapshots({
orderBy: "creationTimestamp desc"
});
const snapshot = snapshots[0][0];
console.log(`Going to use Snapshot: ${snapshot.name}`);
const sourceSnapshot = `https://www.googleapis.com/compute/v1/projects/myProjectID/global/snapshots/${snapshot.name}`;
const zone = compute.zone("MySelectedZone");
const vm = zone.vm("MyVMName");
// Delete old FailOver
console.log("start deleting old VM");
const [deleteOperation] = await vm.delete();
deleteOperation.on("complete", async function(metadata) {
console.log("finished deleting old VM");
// Create new VM
console.log("start creating new VM");
const [newVM, createOperation] = await vm.create({
http: false,
https: true,
machineType: "n1-standard-1",
disks: [
{
initializeParams: {
sourceSnapshot
},
sizeGb: 50,
type:
"projects/MyProjectID/zones/mySelectedZone/diskTypes/pd-standard",
boot: true
}
]
});
createOperation.on("complete", async function(metadata) {
const [newVMMeta] = await vm.getMetadata();
const newIP = newVMMeta.networkInterfaces[0].accessConfigs[0].natIP;
console.log("finished creating new VM");
// Route Cloudflare to new IP
console.log("Put new IP to Cloudflare");
await axios({
method: "patch",
url:
"https://api.cloudflare.com/client/v4/user/load_balancers/pools/MyPoolID",
data: {
origins: [
{
name: "MyPoolName",
address: newIP,
enabled: true,
weight: 1
}
]
},
headers: {
"X-Auth-Email": "MyCloudflareEmail",
"X-Auth-Key": "MyCloudflareAuthKey"
}
});
console.log("Finished putting IP to Cloudflare");
});
});
} catch (err) {
console.error(err);
}
};