Docs 菜单

Atlas 高可用性指导

请参阅此页面,规划适当的集群配置,以优化可用性和性能,同时满足贵公司的成本控制和访问需求。

当您在Atlas中启动新集群时, Atlas会自动配置至少三节点副本集,并将其分发到您部署到的地区。如果主节点 (primary node in the replica set)节点出现中断, MongoDB 数据库会自动检测到此故障并选择一个从节点(secondary node from replica set)作为替代节点,并将该从节点(secondary node from replica set)提升为新的主节点 (primary node in the replica set)。然后, Atlas会恢复或替换出现故障的成员,以确保集群尽快恢复到其目标配置。MongoDB客户端驾驶员还会自动切换所有客户端连接。整个选择和故障转移进程在几秒钟内完成,无需人工干预。MongoDB优化了用于检测故障和选举新主主节点 (primary node in the replica set)的算法,从而缩短了故障转移间隔。

您在单个地区内部署的集群分布在该区地区的各个可用区,因此可以承受部分地区中断的情况,而不会中断读取或写入可用性。

如果始终在首选地区中维持写入操作是高优先级,MongoDB建议在部署集群时,使至少两名可选举成员位于首选地区内的至少两个可用区内。

为了在全球部署中获得最佳数据库性能,用户可以配置Atlas全球集群,该集群使用位置感知的分片来最大限度地减少写入延迟。如果您有地理存储要求,还可以确保Atlas将数据存储在特定的地理区域。

A topology with a single region with 3 nodes: one primary and two secondaries.

如果需要低延迟,但高可用性要求仅限于单个区域,则此拓扑结构是合适的。此拓扑结构可以容忍任何 1 节点故障,并且能够轻松满足区域内从节点的大多数写关注。这将在任何节点发生故障时在首选区域保持主节点,限制成本,并且从应用程序体系结构的角度来看是最简单的。在您首选的区域中,此拓扑中的从节点读取和写入操作会遇到低延迟。

但是,此拓扑结构不能容忍区域服务中断。

使用以下建议来配置Atlas部署和备份,以实现高可用性并加快从灾难中恢复。

要学习;了解有关如何规划和响应灾难的更多信息,请参阅Atlas灾难恢复指南。

创建新集群时,您可以在“专用”、“灵活”或“免费”部署类型下提供的范围集群层之间进行选择。

要确定适合您的应用程序大小的推荐集群层,请参阅Atlas集群大小指南

要选出主节点,您需要大多数有投票权的可用副本集成员。我们建议您创建一个具有奇数个有投票权的副本集成员的副本集。拥有偶数个有投票权的副本集成员没有任何好处。默认情况下,Atlas 满足此要求,因为 Atlas 要求拥有 3、5 或 7 个节点。

容错能力是指在有足够的副本集成员仍可用于主节点选举的情况下,允许多少副本集成员不可用。四节点副本集的容错能力与三节点副本集相同,因为两者都能承受单节点服务中断。

要测试您的应用程序是否可以处理副本集主节点 (primary node in the replica set)的故障,提交测试主节点 (primary node in the replica set)故障转移的请求。当Atlas模拟故障转移事件时, Atlas会关闭当前主节点 (primary node in the replica set)并举行选举以选出新的主节点 (primary node in the replica set)。

要了解有关副本集成员的更多信息,请参阅副本集成员。要了解有关副本集选举和投票权的更多信息,请参阅副本集选举。

MongoDB通过跨副本集存储多个数据副本来提供高可用性。为确保同一副本集的成员不股票相同的资源,并且副本集可以在数据中心不可用时选择主节点 (primary node in the replica set),必须将节点分布在至少三个数据中心。我们建议您至少使用五个数据中心。

您可以将集群部署到支持多个可用区的地区,从而跨多个数据中心分发数据。每个可用区通常包含一个或多个独立的数据中心,每个数据中心都有冗余电源、网络和连接,并且通常位于单独的设施中。当您将专用集群部署到支持可用区的地区时, Atlas会自动将集群的节点拆分到可用区。示例,对于部署到具有三个可用区的地区的三节点副本集集群, Atlas会在每个区域中部署一个节点。这样可以确保同一副本集的成员不会共享资源,这样即使一个区域出现中断,您的数据库仍然可用。

要了解使用少于三个数据中心的相关风险,请考虑下图,其中显示了分布式在两个数据中心的数据:

An image showing two data centers: Data Center 1, with a primary and a secondary node, and Data Center 2, with only a secondary node

在上一图表中,如果数据中心 2 变得不可用,大多数副本集成员仍然可用,Atlas 可以选举一个主节点。然而,如果丢失数据中心 1,则三个副本集成员中只有一个可用,而不是大多数,系统将降级为只读模式。

考虑下图,其中显示了部署到具有三个可用区的地区的五节点副本集集群:

An image showing three data centers: Data Center 1, with a primary and secondary node, Data Center, 2 with two secondary nodes, and Data Center 3, with one secondary node
点击放大

上图中的 2-2-1拓扑结构是我们推荐的拓扑结构,用于平衡多个区域的高可用性、性能和费用。在这种拓扑结构中,如果任何一个数据中心发生故障,大多数副本集节点仍然可用, Atlas可以执行自动故障转移。虽然三节点三区域拓扑结构也可以容忍任何单区域故障,但 1-1-1拓扑结构中的任何故障转移事件都会迫使在不同地区中选举新的主节点 (primary node in the replica set)。 2-2-1拓扑结构可以容忍主节点 (primary node in the replica set)节点故障,同时将新的主节点 (primary node in the replica set)保持在首选地区中。

我们建议您将副本集部署到以下区域,因为它们支持至少三个可用区:

AWS 区域
地点
Atlas 区域

us-east-1

美国北弗吉尼亚州

US_EAST_1

us-west-2

美国俄勒冈州

US_WEST_2

ca-central-1

加拿大魁北克省蒙特利尔

CA_CENTRAL_1

ca-west-1

Calgary, Canada

CA_WEST_1

us-east-2

Ohio, USA

US_EAST_2

sa-east-1

巴西圣保罗

SA_EAST_1

AWS 区域
地点
Atlas 区域

ap-southeast-1

新加坡

AP_SOUTHEAST_1

ap-southeast-2

澳大利亚新南威尔士州悉尼

AP_SOUTHEAST_2

ap-southeast-3

Jakarta, Indonesia

AP_SOUTHEAST_3

ap-south-1

印度孟买

AP_SOUTH_1

ap-east-1

中国香港

AP_EAST_1

ap-northeast-1

Tokyo, Japan

AP_NORTHEAST_1

ap-northeast-2

Seoul, South Korea

AP_NORTHEAST_2

ap-northeast-3

日本大阪

AP_NORTHEAST_3

ap-south-2

Hyderabad, India

AP_SOUTH_2

ap-southeast-4

澳大利亚维多利亚州墨尔本

AP_SOUTHEAST_4

AWS 区域
地点
Atlas 区域

eu-west-1

爱尔兰

EU_WEST_1

eu-central-1

德国法兰克福

EU_CENTRAL_1

eu-north-1

瑞典斯德哥尔摩

EU_NORTH_1

eu-west-2

英国英格兰伦敦

EU_WEST_2

eu-west-3

法国巴黎

EU_WEST_3

eu-south-1

意大利米兰

EU_SOUTH_1

eu-central-2

苏黎世瑞士

EU_CENTRAL_2

eu-south-2

西班牙

EU_SOUTH_2

AWS 区域
地点
Atlas 区域

me-south-1

巴林

ME_SOUTH_1

af-south-1

南非开普敦

AF_SOUTH_1

il-central-1

Tel Aviv, Israel

IL_CENTRAL_1

me-central-1

阿联酋

ME_CENTRAL_1

Azure 区域
地点
Atlas 区域

centralus

Iowa, USA

US_CENTRAL

eastus

弗吉尼亚州(美国东部)

US_EAST

eastus2

Virginia, USA

US_EAST_2

northcentralus

Illinois, USA

US_NORTH_CENTRAL

westus

美国加利福尼亚州

US_WEST

westus2

美国华盛顿州

US_WEST_2

westus3

Arizona, USA

US_WEST_3

southcentralus

Texas, USA

US_SOUTH_CENTRAL

brazilsouth

巴西圣保罗

BRAZIL_SOUTH

brazilsoutheast

Rio de Janeiro, Brazil

BRAZIL_SOUTHEAST

canadacentral

加拿大安大略省多伦多

CANADA_CENTRAL

Azure 区域
地点
Atlas 区域

northeurope

爱尔兰

EUROPE_NORTH

westeurope

荷兰

EUROPE_WEST

uksouth

英国英格兰伦敦

UK_SOUTH

francecentral

法国巴黎

FRANCE_CENTRAL

italynorth

意大利米兰

ITALY_NORTH

germanywestcentral

德国法兰克福

GERMANY_WEST_CENTRAL

polandcentral

波兰华沙

POLAND_CENTRAL

switzerlandnorth

苏黎世瑞士

SWITZERLAND_NORTH

norwayeast

挪威奥斯陆

NORWAY_EAST

swedencentral

瑞典耶夫勒

SWEDEN_CENTRAL

Azure 区域
地点
Atlas 区域

eastasia

中国香港

ASIA_EAST

southeastasia

新加坡

ASIA_SOUTH_EAST

australiaeast

澳大利亚新南威尔士州

AUSTRALIA_EAST

centralindia

浦那(印度中部)

INDIA_CENTRAL

japaneast

Tokyo, Japan

JAPAN_EAST

koreacentral

Seoul, South Korea

KOREA_CENTRAL

Azure 区域
地点
Atlas 区域

southafricanorth

南非约翰内斯堡

SOUTH_AFRICA_NORTH

Azure 区域
地点
Atlas 区域

uaenorth

Dubai, UAE

UAE_NORTH

qatarcentral

Qatar

QATAR_CENTRAL

israelcentral

以色列

ISRAEL_CENTRAL

GCP地区
地点
Atlas 区域

us-central1

Iowa, USA

CENTRAL_US

us-east4

美国北弗吉尼亚州

US_EAST_4

us-east5

美国俄亥俄州哥伦布

US_EAST_5

northamerica-northeast1

加拿大蒙特利尔

NORTH_AMERICA_NORTHEAST_1

northamerica-northeast2

加拿大多伦多

NORTH_AMERICA_NORTHEAST_2

southamerica-east1

巴西圣保罗

SOUTH_AMERICA_EAST_1

southamerica-west1

智利圣地亚哥

SOUTH_AMERICA_WEST_1

us-west1

美国俄勒冈州

WESTERN_US

us-west2

Los Angeles, CA, USA

US_WEST_2

us-west3

美国犹他州盐湖城

US_WEST_3

us-west4

Las Vegas, NV, USA

US_WEST_4

us-south1

Dallas, TX, USA

US_SOUTH_1

GCP地区
地点
Atlas 区域

asia-east1

台湾

EASTERN_ASIA_PACIFIC

asia-east2

中国香港

ASIA_EAST_2

asia-northeast1

Tokyo, Japan

NORTHEASTERN_ASIA_PACIFIC

asia-northeast2

日本大阪

ASIA_NORTHEAST_2

asia-northeast3

Seoul, Korea

ASIA_NORTHEAST_3

asia-southeast1

新加坡

SOUTHEASTERN_ASIA_PACIFIC

asia-south1

印度孟买

ASIA_SOUTH_1

asia-south2

德里,印度

ASIA_SOUTH_2

australia-southeast1

澳大利亚悉尼

AUSTRALIA_SOUTHEAST_1

australia-southeast2

墨尔本,澳大利亚

AUSTRALIA_SOUTHEAST_2

asia-southeast2

Jakarta, Indonesia

ASIA_SOUTHEAST_2

GCP地区
地点
Atlas 区域

europe-west1

比利时

WESTERN_EUROPE

europe-north1

芬兰

EUROPE_NORTH_1

europe-west2

London, UK

EUROPE_WEST_2

europe-west3

德国法兰克福

EUROPE_WEST_3

europe-west4

荷兰

EUROPE_WEST_4

europe-west6

苏黎世瑞士

EUROPE_WEST_6

europe-west10

德国柏林

EUROPE_WEST_10

europe-central2

波兰华沙

EUROPE_CENTRAL_2

europe-west8

意大利米兰

EUROPE_WEST_8

europe-west9

法国巴黎

EUROPE_WEST_9

europe-west12

意大利都灵

EUROPE_WEST_12

europe-southwest1

西班牙马德里

EUROPE_SOUTHWEST_1

GCP地区
地点
Atlas 区域

me-west1

Tel Aviv, Israel

MIDDLE_EAST_WEST_1

me-central1

Doha, Qatar

MIDDLE_EAST_CENTRAL_1

me-central2

达曼,沙特阿拉伯

MIDDLE_EAST_CENTRAL_2

当客户端连接到分片集群时,我们建议在连接 URI 中包含多个 mongos 进程,使用逗号分隔。要了解更多信息,请参阅 MongoDB 连接字符串示例。此设置允许操作路由到不同的 mongos 实例以实现负载均衡,同时对灾难恢复也至关重要。

考虑下图,其中显示了分布在三个数据中心的分片集群。应用程序从远程位置连接到集群。如果数据中心 3 不可用,应用程序仍可连接到其他数据中心的 mongos 进程。

An image showing three data centers: Data Center 1, with a primary shards and two mongos, Data Center 2, with secondary shards and two mongos, and Data Center 3, with secondary shards and two mongos. The application connects to all six mongos instances.
点击放大

您可以使用可重试读取可重试写入来简化 mongos 配置所需的错误处理。

MongoDB允许您使用写关注(write concern)写入操作请求的确认级别。示例,如果您有一个写关注(write concern)为majority 的三节点副本集,则每个写入操作都需要在两个节点上持久化,然后才能将完成确认发送到发出所述写入操作的驾驶员。为了获得最佳保护,防止区域节点中断,我们建议您设立写关注(write concern)为majority

尽管与写关注(write concern)1 相比,使用 majority写关注(write concern)会增加写入延迟,但我们建议您使用 majority写关注(write concern),因为它允许您的数据中心继续执行写入操作,即使副本集丢失主节点 (primary node in the replica set)。

要了解使用 majority写关注(write concern)相对于数字写关注(write concern)的优势,请考虑一个具有 2-2-1拓扑结构副本集,其数字写关注(write concern)为 4。如果其中一个双节点区域不可用,写入操作无法完成,因为它们无法在四个节点上持久保存数据。使用 majority 将允许写入操作在至少两个节点上持久保存数据时继续,从而保持数据冗余和写入连续性。

频繁的数据备份对于业务连续性和灾难恢复至关重要。频繁备份可确保在灾难或网络攻击破坏正常操作时,数据丢失和停机时间被降到最低。

我们建议您:

  • 设置备份频率,以满足所需的业务连续性目标。某些系统可能需要连续备份,而其他系统可能更适合较不频繁的快照备份。

  • 将备份存储在与源数据不同的物理位置。

  • 测试备份恢复进程,确保您可以可重复且及时的方式恢复备份。

  • 请确认您的集群在恢复过程中运行相同的 MongoDB 版本以确保兼容性。

  • 配置备份合规策略以防止删除备份快照、防止缩短快照保留时间等。

有关更多备份建议,请参阅 Atlas 备份指导。

为避免资源容量问题,我们建议您监控资源利用率并定期举行容量规划会议。MongoDB专业服务提供这些课程。

过度使用的集群可能会失败,从而导致灾难。如果利用率定期处于稳定状态(例如系统 CPU 和系统内存的利用率超过 60%+),请将集群扩展到更高的层级。

要查看资源利用率,请参阅监控实时性能。要使用Atlas Administration API查看指标,请参阅 监控和日志。

要了解资源利用警报和监控的最佳实践,请参阅 Atlas 监控和警报指导。

如果您遇到资源容量问题,请参阅资源容量问题

我们建议您运行最新的 MongoDB 版本,因为与以前的版本相比,它允许您利用新功能并提供改进的安全保证。

确保在当前版本生命周期结束之前执行MongoDB主要版本升级。

您无法使用Atlas用户界面降级MongoDB版本。因此,在计划和执行主要版本升级时,我们建议您直接与MongoDB专业或技术服务部门合作,以帮助您避免在升级进程中可能出现的任何问题。

MongoDB允许您为集群配置维护窗口,该窗口设置了Atlas开始对集群进行每周维护的时间。通过设置自定义维护窗口,您可以在业务关键时间之外安排维护,这需要每个副本集至少进行一次副本集选举。

您还可以为项目设立受保护的时间,这定义了每天无法开始标准更新的时间窗口。标准更新不涉及集群重启或重新同步。

以下示例使用Atlas 工具配置单区域 3 节点副本集/分片部署拓扑结构以实现自动化。

这些示例还应用其他推荐的配置,包括:

  • 集群层已为开发/测试环境设置为 M10。使用集群大小指南了解适合应用程序大小的推荐集群层。

  • 单区域,3 节点副本集/分片部署拓扑结构。

我们的示例交替使用Amazon Web ServicesAzure和Google Cloud Platform。您可以使用这三个云提供商中的任何一个,但必须更改地区名称以匹配云提供商。要学习;了解云提供商及其地区,请参阅云提供商。

  • 集群层已设置为 M30,适用于中型应用程序。使用集群大小指南了解适合应用程序大小的推荐集群层。

  • 单区域,3 节点副本集/分片部署拓扑结构。

我们的示例交替使用Amazon Web ServicesAzure和Google Cloud Platform。您可以使用这三个云提供商中的任何一个,但必须更改地区名称以匹配云提供商。要学习;了解云提供商及其地区,请参阅云提供商。

注意

对于您的开发和测试环境,请为每个项目运行以下命令。更改 ID 和名称以使用您的值:

atlas clusters create CustomerPortalDev \
--projectId 56fd11f25f23b33ef4c2a331 \
--region EASTERN_US \
--members 3 \
--tier M10 \
--provider GCP \
--mdbVersion 8.0 \
--diskSizeGB 30 \
--tag bu=ConsumerProducts \
--tag teamName=TeamA \
--tag appName=ProductManagementApp \
--tag env=Production \
--tag version=8.0 \
--tag email=marissa@acme.com \
--watch

对于您的暂存环境和生产环境,请为每个项目创建以下 cluster.json 文件。更改 ID 和名称以使用您自己的值:

{
"clusterType": "REPLICASET",
"links": [],
"name": "CustomerPortalProd",
"mongoDBMajorVersion": "8.0",
"replicationSpecs": [
{
"numShards": 1,
"regionConfigs": [
{
"electableSpecs": {
"instanceSize": "M30",
"nodeCount": 3
},
"priority": 7,
"providerName": "GCP",
"regionName": "EASTERN_US",
"analyticsSpecs": {
"nodeCount": 0,
"instanceSize": "M30"
},
"autoScaling": {
"compute": {
"enabled": false,
"scaleDownEnabled": false
},
"diskGB": {
"enabled": false
}
},
"readOnlySpecs": {
"nodeCount": 0,
"instanceSize": "M30"
}
}
],
"zoneName": "Zone 1"
}
],
"tag" : [{
"bu": "ConsumerProducts",
"teamName": "TeamA",
"appName": "ProductManagementApp",
"env": "Production",
"version": "8.0",
"email": "marissa@acme.com"
}]
}

在您创建 cluster.json 文件后,请为每个项目运行以下命令。该命令使用 cluster.json 文件来创建一个集群。

atlas cluster create --projectId 5e2211c17a3e5a48f5497de3 --file cluster.json

有关此示例的更多配置选项和信息,请参阅 Atlas 集群创建。

注意

在使用 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 和名称以使用您的值:

# Create a Project
resource "mongodbatlas_project" "atlas-project" {
org_id = var.atlas_org_id
name = var.atlas_project_name
}
# Create an Atlas Advanced Cluster
resource "mongodbatlas_advanced_cluster" "atlas-cluster" {
project_id = mongodbatlas_project.atlas-project.id
name = "ClusterPortalDev"
cluster_type = "REPLICASET"
mongo_db_major_version = var.mongodb_version
replication_specs {
region_configs {
electable_specs {
instance_size = var.cluster_instance_size_name
node_count = 3
}
priority = 7
provider_name = var.cloud_provider
region_name = var.atlas_region
}
}
tags {
key = "BU"
value = "ConsumerProducts"
}
tags {
key = "TeamName"
value = "TeamA"
}
tags {
key = "AppName"
value = "ProductManagementApp"
}
tags {
key = "Env"
value = "Test"
}
tags {
key = "Version"
value = "8.0"
}
tags {
key = "Email"
value = "marissa@acme.com"
}
}
# Outputs to Display
output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.0.standard_srv }
output "project_name" { value = mongodbatlas_project.atlas-project.name }
# Atlas Organization ID
variable "atlas_org_id" {
type = string
description = "Atlas Organization ID"
}
# Atlas Project Name
variable "atlas_project_name" {
type = string
description = "Atlas Project Name"
}
# Atlas Project Environment
variable "environment" {
type = string
description = "The environment to be built"
}
# Cluster Instance Size Name
variable "cluster_instance_size_name" {
type = string
description = "Cluster instance size name"
}
# Cloud Provider to Host Atlas Cluster
variable "cloud_provider" {
type = string
description = "AWS or GCP or Azure"
}
# Atlas Region
variable "atlas_region" {
type = string
description = "Atlas region where resources will be created"
}
# MongoDB Version
variable "mongodb_version" {
type = string
description = "MongoDB Version"
}
# Atlas Group Name
variable "atlas_group_name" {
type = string
description = "Atlas Group Name"
}
atlas_org_id = "32b6e34b3d91647abb20e7b8"
atlas_project_name = "Customer Portal - Dev"
environment = "dev"
cluster_instance_size_name = "M10"
cloud_provider = "AWS"
atlas_region = "US_WEST_2"
mongodb_version = "8.0"
# Define the MongoDB Atlas Provider
terraform {
required_providers {
mongodbatlas = {
source = "mongodb/mongodbatlas"
}
}
required_version = ">= 0.13"
}

在您创建文件后,导航到每个应用程序和环境对的目录,并运行以下命令以初始化 Terraform:

terraform init

运行以下命令以查看 Terraform 计划:

terraform plan

运行以下命令,为应用程序和环境对创建一个项目和一个部署。该命令使用文件和 MongoDB & HashiCorp Terraform 来创建项目和集群:

terraform apply

当出现提示时,输入 yes 并按 Enter 以应用配置。

对于您的暂存环境和生产环境,请为每个应用程序和环境对创建以下文件。将每个应用程序和环境对的文件放在各自的目录中。更改 ID 和名称以使用您自己的值:

# Create a Group to Assign to Project
resource "mongodbatlas_team" "project_group" {
org_id = var.atlas_org_id
name = var.atlas_group_name
usernames = [
"user1@example.com",
"user2@example.com"
]
}
# Create a Project
resource "mongodbatlas_project" "atlas-project" {
org_id = var.atlas_org_id
name = var.atlas_project_name
# Assign the Project the Group with Specific Roles
team_id = mongodbatlas_team.project_group.team_id
role_names = ["GROUP_READ_ONLY", "GROUP_CLUSTER_MANAGER"]
}
# Create an Atlas Advanced Cluster
resource "mongodbatlas_advanced_cluster" "atlas-cluster" {
project_id = mongodbatlas_project.atlas-project.id
name = "ClusterPortalProd"
cluster_type = "REPLICASET"
mongo_db_major_version = var.mongodb_version
replication_specs {
region_configs {
electable_specs {
instance_size = var.cluster_instance_size_name
node_count = 3
}
priority = 7
provider_name = var.cloud_provider
region_name = var.atlas_region
}
}
tags {
key = "BU"
value = "ConsumerProducts"
}
tags {
key = "TeamName"
value = "TeamA"
}
tags {
key = "AppName"
value = "ProductManagementApp"
}
tags {
key = "Env"
value = "Production"
}
tags {
key = "Version"
value = "8.0"
}
tags {
key = "Email"
value = "marissa@acme.com"
}
}
# Outputs to Display
output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.0.standard_srv }
output "project_name" { value = mongodbatlas_project.atlas-project.name }
# Atlas Organization ID
variable "atlas_org_id" {
type = string
description = "Atlas Organization ID"
}
# Atlas Project Name
variable "atlas_project_name" {
type = string
description = "Atlas Project Name"
}
# Atlas Project Environment
variable "environment" {
type = string
description = "The environment to be built"
}
# Cluster Instance Size Name
variable "cluster_instance_size_name" {
type = string
description = "Cluster instance size name"
}
# Cloud Provider to Host Atlas Cluster
variable "cloud_provider" {
type = string
description = "AWS or GCP or Azure"
}
# Atlas Region
variable "atlas_region" {
type = string
description = "Atlas region where resources will be created"
}
# MongoDB Version
variable "mongodb_version" {
type = string
description = "MongoDB Version"
}
# Atlas Group Name
variable "atlas_group_name" {
type = string
description = "Atlas Group Name"
}
atlas_org_id = "32b6e34b3d91647abb20e7b8"
atlas_project_name = "Customer Portal - Prod"
environment = "prod"
cluster_instance_size_name = "M30"
cloud_provider = "AWS"
atlas_region = "US_WEST_2"
mongodb_version = "8.0"
atlas_group_name = "Atlas Group"
# Define the MongoDB Atlas Provider
terraform {
required_providers {
mongodbatlas = {
source = "mongodb/mongodbatlas"
}
}
required_version = ">= 0.13"
}

在您创建文件后,导航到每个应用程序和环境对的目录,并运行以下命令以初始化 Terraform:

terraform init

运行以下命令以查看 Terraform 计划:

terraform plan

运行以下命令,为应用程序和环境对创建一个项目和一个部署。该命令使用文件和 MongoDB & HashiCorp Terraform 来创建项目和集群:

terraform apply

当出现提示时,输入 yes 并按 Enter 以应用配置。

有关此示例的更多配置选项和信息,请参阅 MongoDB & HashiCorp TerraformMongoDB Terraform 博客文章