MongoDB Atlas は、データの保持と復元を確保するために、フルマネージドでカスタマイズ可能なバックアップを提供します。
クラウドバックアップ:クラウドプロバイダーのネイティブスナップショット機能を使用して取得され、フルコピーのスナップショットとローカライズされたスナップショット ストレージをサポートします。これらのスナップショットは常に増分であり、クラウド プロバイダーの基礎のバックアップ スナップショット メカニズムを活用して、低コストで迅速な復元を実現します。特定の数の日次、週次、月次のスナップショットを指定するバックアップ ポリシーを選択します。
継続的クラウド バックアップ:これはクラウド バックアップに追加される機能で、ポイント イン タイム(PIT)リカバリを提供します。この機能を使用すると、oplog をバックアップし、スナップショット間のデータ変更をキャプチャすることで、復元プロセス中に特定の分数時点に復元できます。この機能を使用すると、障害やイベントの直前の正確な時点までデータを回復できるため、目標復旧時点(RPO)を 1 分ほどまで短くできます。
開発環境およびテスト環境では、バックアップを有効にすることは推奨されません。ステージング環境および本番環境においては、このページで説明されている推奨事項を含む自動デプロイメント テンプレートを作成することを推奨します。
Atlas バックアップの特徴
Atlas は、ポイントインタイムデータリカバリとシャーディングされたクラスターを含むすべてのクラスターの一貫したクラスター全体のスナップショットを含む、データのフルマネージドバックアップを提供します。Atlas では、時間ごと、毎日、毎週、毎月の 4 つのスナップショット頻度から選択でき、それぞれの保持期間は独自です。
クラウドバックアップ | この機能は、クラスターのクラウド サービス プロバイダーのネイティブ スナップショット機能を使用して、ローカライズされたバックアップ ストレージを提供します。メリットには、12 か月という強力なデフォルト バックアップ保持スケジュール、スナップショットと保持スケジュールをカスタマイズする全面的な柔軟性、そして業界規制を遵守するために、リカバリ用には毎時、長期保持用には毎週または毎月といった、さまざまなスナップショット頻度を設定できる能力が含まれます。バックアップデータに即座にアクセスできるので、監査、コンプライアンス、データ復旧に役立ちます。また、バックアップデータに対して直接クエリを実行することで、時間とリソースを節約できます。 |
継続的なクラウドバックアップ | この機能は、任意のタイムスタンプに復元できるポイント イン タイム(PIT)リカバリを提供します。これにより、サイバー攻撃などの障害やイベントの直前の正確な時点にデータを復元できます。また、カスタマイズされた復元ウィンドウを設定し、特定の時点まで復元可能な日数を指定することもできます。 |
マルチリージョン スナップショットの分散 | この機能により、バックアップ スナップショットと oplog をプライマリ リージョンに保存するだけでなく、地理的リージョン全体に自動的に分散することで、回復力を向上させることができます。地域的な停止が発生した場合の障害復旧を確保するために、バックアップを異なるエアギャップされた地理的ロケーションに保存するという、コンプライアンス要件を満たすことができます。 詳細については、「スナップショットの分散」をご覧ください。 |
バックアップ コンプライアンス ポリシー | この機能により、お客様が指定した事前定義された保持期間中、Atlas に保存されているすべてのスナップショットと oplog が変更または削除されるのを防ぐことで、ビジネスにとって重要なデータに対する保護をさらに強化し、それによってバックアップが全面的に WORM(Write Once Read Many)に準拠していることが保証されます。指定・認証されたユーザーのみが、MongoDB サポートによる検証プロセスが完了した後に、この保護をオフにできます。この機能は、攻撃者がバックアップ ポリシーを変更してデータをエクスポートできないように、必須の手動遅延とクールダウン期間を追加します。詳細については、「バックアップ コンプライアンス ポリシーの構成」を参照してください。 |
Atlas バックアップの推奨事項
バックアップ戦略に関する推奨事項
特に、ほぼ瞬時の 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 リカバリに関する推奨事項
継続的なクラウドバックアップにより、正確なポイントインタイム(PIT)リカバリが可能となり、障害時のデータ損失を最小限に抑えることができます。Atlas は障害イベントが発生する前の正確なタイムスタンプに迅速に復旧できるため、プライマリリージョンの停止時でも、最適化されたリストアを利用することで、最短で 1 分前までの RPO と 15 分未満の RTO で復旧できます。これは、Atlas が希望する時点より前の最新のスナップショットを復元し、その特定の時点に復元するために oplog の変更を再生するためです。リカバリ時間は、クラウド プロバイダーのディスク ウォーミングと、復旧中に再生する必要がある oplog のサイズによって異なる場合があります。復元後にクラウド プロバイダーのディスク ウォーミングが完了するまで、クラスターのパフォーマンスが低下する可能性があります。リカバリーの要件に柔軟性がある場合は、合理的なリカバリー オプションとコストの最適な妥協点を特定するテンプレートを設計することを推奨します。
バックアップコストに関する推奨事項
Atlas のバックアップコストを最適化するには、バックアップ頻度と保持ポリシーをデータの重要性に合わせて調整し、不要なストレージコストを削減する必要があります。例、下位環境ではバックアップを無効にし、高可用性要件を持つ上位環境では、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>"
共通のファイル
の例ごとに次のファイルを作成する必要があります。各例のファイルを 独自のディレクトリに配置します。ID と名前を変更して、 値を使用します。次に、コマンドを実行して Terraform を初期化し、Terraform プランを表示して変更を適用します。
variables.tf
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 バックアップ スケジュールを構成します。
main.tf
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 バックアップ スケジュールを構成します。
main.tf
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 バックアップ スケジュールを構成します。
main.tf
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 復元の設定
次の手順を使用して、クラウド バックアップ スナップショットと PIT 復元ジョブを構成します。
main.tf
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 } }