Docs Menu

Atlas バックアップのガイダンス

MongoDB Atlas は、データの保持と復元を確保するために、完全管理型でカスタマイズ可能なバックアップを提供します。

  • クラウドバックアップ:クラウドプロバイダーのネイティブスナップショット機能を使用して取得され、フルコピーのスナップショットとローカライズされたスナップショットストレージをサポートします。これらのスナップショットは常に増分であり、クラウドプロバイダーの基礎のバックアップスナップショットメカニズムを活用して、低コストで迅速な復元を実現します。特定の数の毎日、毎週、毎月のスナップショットを指定するバックアップポリシーを選択されます。

  • 継続的クラウドバックアップ:これはクラウドバックアップに追加される機能で、ポイント・イン・タイム (PIT) リカバリを提供します。この機能を使用すると、oplogをバックアップし、スナップショット間のデータ変更をキャプチャすることで、復元プロセス中に特定の分に復元できます。この機能を使用すると、障害やイベントの直前の正確な時点(点)でデータを回復でき、リカバリポイント目標(RPO)を1分まで低く設定できます。

開発環境およびテスト環境では、バックアップを有効にすることはお勧めしません。ステージング環境および本番環境においては、このページで説明されている推奨事項を含む自動デプロイメントテンプレートを作成することをお勧めいたします。

Atlas は、ポイントインタイムデータリカバリとシャーディングされたクラスターを含むすべてのクラスターの一貫したクラスター全体のスナップショットを含む、データのフルマネージドバックアップを提供します。Atlas では、時間ごと、毎日、毎週、毎月の 4 つのスナップショット頻度から選択でき、それぞれの保持期間は独自です。

クラウドバックアップ

この機能は、クラスターのクラウドサービスプロバイダーのネイティブスナップショット機能を使用して、ローカライズされたバックアップストレージを提供します。メリットには、12か月の強力なデフォルトバックアップ保持予定、スナップショットと保持予定をカスタマイズする完全な柔軟性、そして業界規制を満たすために、リカバリ用には毎時、長期保持用には毎週または毎月といったさまざまなスナップショット頻度を設定できる能力が含まれます。バックアップデータに即座にアクセスできるので、監査、コンプライアンス、データ復旧に役立ちます。また、バックアップデータに対してクエリを実行することで、時間とリソースを節約できます。

継続的なクラウドバックアップ

この機能はポイントインタイム(PIT)リカバリを提供し、任意のタイムスタンプに回復できます。これにより、 サーバー攻撃 などの障害やイベントの直前の正確な時点(点インタイム)にデータを回復することができます。また、カスタマイズされた復元ウィンドウを設定して、特定の点まで復元できる日数を指定することもできます。

マルチリージョン スナップショットの分散

この機能により、バックアップスナップショットとoplogをプライマリリージョンに保存するだけでなく、地理的リージョン全体に自動的に分散することで、回復力を向上させることができます。地域的な停止時が発生した場合の障害復旧を確実にするために、バックアップを異なるエアギャップされた地理的ロケーションに保存するというコンプライアンス要件を満たすことができます。

詳細については、「 スナップショット分散 」を参照してください。

バックアップ コンプライアンス ポリシー

この機能により、貴社が指定した事前定義された保持期間中、Atlas に保存されているすべてのスナップショットと oplog が変更または削除されるのを防ぐことで、ビジネスにとって重要なデータをさらに保護でき、バックアップが完全に WORM(書き込み (write) Once Read Many)に準拠していることが保証されます。MongoDBサポートによる検証プロセスが完了した後に、この保護をオフにすることができます。この機能は、攻撃者がバックアップポリシーを変更してデータをエクスポートできないように、必須の手動遅延とクールダウン期間を追加します。詳細については、「バックアップ コンプライアンス ポリシーの構成」を参照してください。

特に、ほぼ瞬時のRPOと迅速なリカバリが重要な重要なアプリケーションでは、事業継続要件を満たすために、特定のリカバリポイント目標(RPO)とリカバリ時間目標(RTO)にバックアップ戦略を合わせる必要があります。RPO はインシデント中に許容されるデータ損失量を定義し、RTO はアプリケーションが回復する必要がある時間を定義します。データの重要性はさまざまであるため、各アプリケーションの RPO と RTO を個別に評価しなければなりません。たとえば、ミッションクリティカルなデータには、クリックストリーム分析とは異なる要件があるでしょう。RTO、RPO、およびバックアップ保持期間の要件は、バックアップを維持するためのコストとパフォーマンスに関する考慮事項に影響を与えます。開発環境およびテスト環境では、コストを節約するためにバックアップを無効にすることをお勧めいたします。ステージング環境と本番環境では、デプロイメントテンプレートでバックアップが有効になっていること、またバックアップと復元の手順とプロセスが正常にテストされていることを確認してください。

大規模なレプリカセット(およびシャード)は、バックアップからの復元に時間がかかります。ステージングおよび本番環境において、テスト手法を用いて、レプリカセットサイズまたはシャードサイズの制限を特定し、サイズがRTO要件に適合していることを確認することをお勧めいたします。スナップショットのスケジュールと保持ポリシーが RPO 要件を満たしていることを確認してください。

本番環境では、Atlasクラウドバックアップに加えて、復元ウィンドウが7日間の継続的なクラウドバックアップをデフォルトとして開始することをお勧めします。ワークロードの重要度に基づいて、この時間範囲をより長い設定で調整してください。これにより、oplogを再生して特定の時点からクラスターを復元し、RTOを満たすことができます。

以下も参照してください。

Atlasは、スナップショットの頻度と保持期間を含む、事前定義されたバックアップスナップショットの予定を提供します。バックアップのスナップショットを長期間保持すると、コストがかかることがあります。データと環境(開発、テスト、ステージング、運用)のサイズと重要度に基づいて、貴社の要件を満たす自動展開テンプレートを構築することをお勧めいたします。スナップショットの頻度と保持については、次の内容をお勧めします。

階層
RTO
RPO
推奨される頻度と保持期間
スナップショットの合計数

階層 1

30 分

ほぼゼロ(7日以内)

Hourly: Every 12 hours, retain for 7 days = 14 snapshots
Daily: Once a day, retain for 7 days = 7 snapshots
Weekly: Saturday, retain for 4 weeks = 4 snapshots
Monthly: Last day of month, retain for 3 months = 6 snapshots

31

階層 2

12時間

ほぼゼロ(7日以内)

Daily: Once a day, retain for 7 days = 7 snapshots
Weekly: Saturday, retain for 4 weeks = 4 snapshots
Monthly: Last day of month, retain for 3 months = 3 snapshots

14

階層 3

3日間

ほぼゼロ(2日以内)

Daily: Once a day, retain for 7 days = 7 snapshots
Weekly: Saturday, retain for 4 weeks = 4 snapshots
Monthly: Last day of month, retain for 3 months = 3 snapshots

14

Atlasはバックアップロケーションのオプションを提供しています。回復力をさらに強化するために、バックアップをローカル地域と外部の障害復旧地域に配布し、地域の停止時でもデータを確実に回復できるようにすることをお勧めします。3 つのリージョンにある Atlas クラスターでは、マルチリージョン スナップショット分散が 2 つのセカンダリリージョンにバックアップをコピーし、バックアップ コピーを使用して復元を可能にします。また、Atlas のクラウドプロバイダーから利用可能な任意のセカンダリリージョンに、ポイントインタイムデータを含むクリティカルバックアップをコピーすることもできます。

スナップショットの頻度、保持、分散を設定する際は、可用性とコストのバランスを取ることをお勧めします。しかし、重要なワークロードでは、さまざまなロケーションにスナップショットのコピーが複数必要になることがあります。

バックアップの不正な変更や削除を防ぎ、データの整合性を維持し、堅牢な障害復旧をサポートするために、Atlas のバックアップコンプライアンスポリシーを施行することをお勧めします。

継続的なクラウドバックアップにより、正確なポイントインタイム(PIT)リカバリが可能となり、障害時のデータ損失を最小限に抑えることができます。Atlas は障害イベントが発生する前の正確なタイムスタンプに迅速に復旧できるため、プライマリリージョンの停止時でも、最適化されたリストアを利用することで、少なくとも1分のRPORTOが15分未満で得られます。これは、Atlasが希望する時点より前の最新のスナップショットを復元し、その特定の時点に復元するためにoplogの変更を再生するためです。リカバリ時間は、クラウドプロバイダーのディスクウォーミングと、復元中に再生する必要があるoplogの量によって異なる場合があります。復元後にクラウドプロバイダーのディスクウォーミングが完了するまで、クラスターのパフォーマンスが低下する可能性があります。リカバリーの要件に柔軟性がある場合は、合理的なリカバリーオプションとコストの最適な妥協点を特定するテンプレートを設計することをお勧めいたします。

Atlas のバックアップコストを最適化するには、バックアップ頻度と保持ポリシーをデータの重要性に合わせて調整し、不要なストレージコストを削減する必要があります。例、下位環境ではバックアップを無効にし、高可用性要件を持つ上位環境では、Atlas クラスターが配置されている各リージョンにバックアップを分散する必要があります。また、増分変更のみを取得するスナップショットと組み込み圧縮を使用して、保存されるデータの量を最小限に抑えることもできます。バックアップのリージョンを戦略的に選択する ことで、リージョン間でのデータ転送料金を回避し、ワークロードに基づいて適切なクラスター ディスク サイズを選択し、スパースを防ぐことができます。これらの戦略を実行することで、安全で信頼できるバックアップを維持しつつコストを効果的に管理できます。

次の例では、Atlas のオートメーションツールを使用してバックアップと復元操作を有効にします。

これらの例は、バックアップが有効なクラスターのステージングおよび本番環境にのみ適用されます。

次のコマンドを実行して、myDemo という名前のクラスターのバックアップスナップショットを取得し、7 日間保持してください。

atlas backups snapshots create myDemo --desc "my backup snapshot" --retention 7

指定された承認済みユーザー(governance@example.org)を用いてプロジェクトのバックアップコンプライアンスポリシーを有効にします。このユーザーのみが、MongoDBサポートとの検証プロセスを完了した後に、この保護を解除することができます。

atlas backups compliancePolicy enable \
--projectId 67212db237c5766221eb6ad9 \
--authorizedEmail governance@example.org \
--authorizedUserFirstName john \
--authorizedUserLastName doe

次のコマンドを実行して、スケジュールされたバックアップショットのコンプライアンスポリシーを作成し、スナップショットを取得する必要がある回数(6 時間ごととスナップショットを保持する期間(1 月に設定)を強制します。

atlas backups compliancePolicy policies scheduled create \
--projectId 67212db237c5766221eb6ad9 \
--frequencyInterval 6 \
--frequencyType hourly \
--retentionValue 1 \
--retentionUnit months

次の例は、デプロイメント中にバックアップを設定する方法を示しています。Terraform でリソースを作成する前に、次の手順を実行する必要があります。

  • 支払い組織を作成し、組織のAPIキーを作成します。ターミナルで次のコマンドを実行し、APIキーを環境変数として保存してください。

    export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>"
    export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
  • Terraform をインストールします。

の例ごとに次のファイルを作成する必要があります。各例のファイルを 独自のディレクトリに配置します。ID と名前を変更して、 値を使用します。次に、コマンドを実行して Terraform を初期化し、Terraform プランを表示して変更を適用します。

variable "org_id" {
description = "Atlas organization ID"
type = string
}
variable "project_name" {
description = "Atlas project name"
type = string
}
variable "cluster_name" {
description = "Atlas Cluster Name"
type = string
}
variable "point_in_time_utc_seconds" {
description = "PIT in UTC"
default = 0
type = number
}

次のTier 1を使用して、クラスターの階層バックアップスケジュールを構成します。

locals {
atlas_clusters = {
"cluster_1" = { name = "m10-aws-1e", region = "US_EAST_1" },
"cluster_2" = { name = "m10-aws-2e", region = "US_EAST_2" },
}
}
resource "mongodbatlas_project" "atlas-project" {
org_id = var.org_id
name = var.project_name
}
resource "mongodbatlas_advanced_cluster" "automated_backup_test_cluster" {
for_each = local.atlas_clusters
project_id = mongodbatlas_project.atlas-project.id
name = each.value.name
cluster_type = "REPLICASET"
replication_specs {
region_configs {
electable_specs {
instance_size = "M10"
node_count = 3
}
analytics_specs {
instance_size = "M10"
node_count = 1
}
provider_name = "AWS"
region_name = each.value.region
priority = 7
}
}
backup_enabled = true # enable cloud backup snapshots
pit_enabled = true
}
resource "mongodbatlas_cloud_backup_schedule" "test" {
for_each = local.atlas_clusters
project_id = mongodbatlas_project.atlas-project.id
cluster_name = mongodbatlas_advanced_cluster.automated_backup_test_cluster[each.key].name
reference_hour_of_day = 3 # backup start hour in UTC
reference_minute_of_hour = 45 # backup start minute in UTC
restore_window_days = 7 # Restore window for near-zero RPO
copy_settings {
cloud_provider = "AWS"
frequencies = ["HOURLY",
"DAILY",
"WEEKLY",
"MONTHLY",
"YEARLY",
"ON_DEMAND"]
region_name = "US_WEST_1"
zone_id = mongodbatlas_advanced_cluster.automated_backup_test_cluster[each.key].replication_specs.*.zone_id[0]
should_copy_oplogs = true
}
policy_item_hourly {
frequency_interval = 12 # backup every 12 hours, accepted values = 1, 2, 4, 6, 8, 12 -> every n hours
retention_unit = "days"
retention_value = 7 # retain for 7 days
}
policy_item_daily {
frequency_interval = 1 # backup every day, accepted values = 1 -> every 1 day
retention_unit = "days"
retention_value = 7 # retain for 7 days
}
policy_item_weekly {
frequency_interval = 7 # every Sunday, accepted values = 1 to 7 -> every 1=Monday,2=Tuesday,3=Wednesday,4=Thursday,5=Friday,6=Saturday,7=Sunday day of the week
retention_unit = "weeks"
retention_value = 4 # retain for 4 weeks
}
policy_item_monthly {
frequency_interval = 28 # accepted values = 1 to 28 -> 1 to 28 every nth day of the month
retention_unit = "months"
retention_value = 3 # retain for 3 months
}
depends_on = [
mongodbatlas_advanced_cluster.automated_backup_test_cluster
]
}

次のTier 2を使用して、クラスターの階層バックアップスケジュールを構成します。

locals {
atlas_clusters = {
"cluster_1" = { name = "m10-aws-1e", region = "US_EAST_1" },
"cluster_2" = { name = "m10-aws-2e", region = "US_EAST_2" },
}
}
resource "mongodbatlas_project" "atlas-project" {
org_id = var.org_id
name = var.project_name
}
resource "mongodbatlas_advanced_cluster" "automated_backup_test_cluster" {
for_each = local.atlas_clusters
project_id = mongodbatlas_project.atlas-project.id
name = each.value.name
cluster_type = "REPLICASET"
replication_specs {
region_configs {
electable_specs {
instance_size = "M10"
node_count = 3
}
analytics_specs {
instance_size = "M10"
node_count = 1
}
provider_name = "AWS"
region_name = each.value.region
priority = 7
}
}
backup_enabled = true # enable cloud backup snapshots
pit_enabled = true
}
resource "mongodbatlas_cloud_backup_schedule" "test" {
for_each = local.atlas_clusters
project_id = mongodbatlas_project.atlas-project.id
cluster_name = mongodbatlas_advanced_cluster.automated_backup_test_cluster[each.key].name
reference_hour_of_day = 3 # backup start hour in UTC
reference_minute_of_hour = 45 # backup start minute in UTC
restore_window_days = 7 # Restore window for near-zero RPO
copy_settings {
cloud_provider = "AWS"
frequencies = ["HOURLY",
"DAILY",
"WEEKLY",
"MONTHLY",
"YEARLY",
"ON_DEMAND"]
region_name = "US_WEST_1"
zone_id = mongodbatlas_advanced_cluster.automated_backup_test_cluster[each.key].replication_specs.*.zone_id[0]
should_copy_oplogs = true
}
policy_item_daily {
frequency_interval = 1 # backup every day, accepted values = 1 -> every 1 day
retention_unit = "days"
retention_value = 7 # retain for 7 days
}
policy_item_weekly {
frequency_interval = 7 # every Sunday, accepted values = 1 to 7 -> every 1=Monday,2=Tuesday,3=Wednesday,4=Thursday,5=Friday,6=Saturday,7=Sunday day of the week
retention_unit = "weeks"
retention_value = 4 # retain for 4 weeks
}
policy_item_monthly {
frequency_interval = 28 # accepted values = 1 to 28 -> 1 to 28 every nth day of the month
# accepted values = 40 -> every last day of the month
retention_unit = "months"
retention_value = 3 # retain for 3 months
}
depends_on = [
mongodbatlas_advanced_cluster.automated_backup_test_cluster
]
}

次のTier 3を使用して、クラスターの階層バックアップスケジュールを構成します。

locals {
atlas_clusters = {
"cluster_1" = { name = "m10-aws-1e", region = "US_EAST_1" },
"cluster_2" = { name = "m10-aws-2e", region = "US_EAST_2" },
}
}
resource "mongodbatlas_project" "atlas-project" {
org_id = var.org_id
name = var.project_name
}
resource "mongodbatlas_advanced_cluster" "automated_backup_test_cluster" {
for_each = local.atlas_clusters
project_id = mongodbatlas_project.atlas-project.id
name = each.value.name
cluster_type = "REPLICASET"
replication_specs {
region_configs {
electable_specs {
instance_size = "M10"
node_count = 3
}
analytics_specs {
instance_size = "M10"
node_count = 1
}
provider_name = "AWS"
region_name = each.value.region
priority = 7
}
}
backup_enabled = true # enable cloud backup snapshots
pit_enabled = true
}
resource "mongodbatlas_cloud_backup_schedule" "test" {
for_each = local.atlas_clusters
project_id = mongodbatlas_project.atlas-project.id
cluster_name = mongodbatlas_advanced_cluster.automated_backup_test_cluster[each.key].name
reference_hour_of_day = 3 # backup start hour in UTC
reference_minute_of_hour = 45 # backup start minute in UTC
restore_window_days = 7 # Restore window for near-zero RPO
copy_settings {
cloud_provider = "AWS"
frequencies = ["HOURLY",
"DAILY",
"WEEKLY",
"MONTHLY",
"YEARLY",
"ON_DEMAND"]
region_name = "US_WEST_1"
zone_id = mongodbatlas_advanced_cluster.automated_backup_test_cluster[each.key].replication_specs.*.zone_id[0]
should_copy_oplogs = true
}
policy_item_daily {
frequency_interval = 1 # backup every day, accepted values = 1 -> every 1 day
retention_unit = "days"
retention_value = 7 # retain for 7 days
}
policy_item_weekly {
frequency_interval = 7 # every Sunday, accepted values = 1 to 7 -> every 1=Monday,2=Tuesday,3=Wednesday,4=Thursday,5=Friday,6=Saturday,7=Sunday day of the week
retention_unit = "weeks"
retention_value = 4 # retain for 4 weeks
}
policy_item_monthly {
frequency_interval = 28 # accepted values = 1 to 28 -> 1 to 28 every nth day of the month
# accepted values = 40 -> every last day of the month
retention_unit = "months"
retention_value = 3 # retain for 3 months
}
depends_on = [
mongodbatlas_advanced_cluster.automated_backup_test_cluster
]
}

次の手順を使用して、クラウドバックアップスナップショットとPIT復元ジョブを構成してください。

# Create a project
resource "mongodbatlas_project" "project_test" {
name = var.project_name
org_id = var.org_id
}
# Create a cluster with 3 nodes
resource "mongodbatlas_advanced_cluster" "cluster_test" {
project_id = mongodbatlas_project.project_test.id
name = var.cluster_name
cluster_type = "REPLICASET"
backup_enabled = true # enable cloud provider snapshots
pit_enabled = true
retain_backups_enabled = true # keep the backup snapshopts once the cluster is deleted
replication_specs {
region_configs {
priority = 7
provider_name = "AWS"
region_name = "US_EAST_1"
electable_specs {
instance_size = "M10"
node_count = 3
}
}
}
}
# Specify number of days to retain backup snapshots
resource "mongodbatlas_cloud_backup_snapshot" "test" {
project_id = mongodbatlas_advanced_cluster.cluster_test.project_id
cluster_name = mongodbatlas_advanced_cluster.cluster_test.name
description = "My description"
retention_in_days = "1"
}
# Specify the snapshot ID to use to restore
resource "mongodbatlas_cloud_backup_snapshot_restore_job" "test" {
count = (var.point_in_time_utc_seconds == 0 ? 0 : 1)
project_id = mongodbatlas_cloud_backup_snapshot.test.project_id
cluster_name = mongodbatlas_cloud_backup_snapshot.test.cluster_name
snapshot_id = mongodbatlas_cloud_backup_snapshot.test.id
delivery_type_config {
point_in_time = true
target_cluster_name = mongodbatlas_advanced_cluster.cluster_test.name
target_project_id = mongodbatlas_advanced_cluster.cluster_test.project_id
point_in_time_utc_seconds = var.point_in_time_utc_seconds
}
}