通过 API 部署集群
本教程操作 MongoDB Ops Manager Administration API的自动化配置,以部署其他用户拥有的 分片集群。 本教程首先创建一个新项目,然后创建一个新用户作为该项目的所有者,最后创建一个由新用户拥有的分分片集群。 您可以创建脚本来自动执行这些过程,以便在日常操作中使用。
要执行这些步骤,您必须有足够的 Ops Manager 访问权限。具有 Global Owner
或Project Owner
角色的用户具有足够的访问权限。
这些过程将安装一个具有两个分片的集群。 每个分片都包含一个三成员副本集。 本教程将安装一个mongos
和三个配置服务器。 集群的每个组件都驻留在自己的服务器上,总共需要10主机。
本教程将在每台主机上安装MongoDB Agent。
先决条件
Ops Manager 必须有一个现有用户。如果在全新安装 Ops Manager 上部署分片集群,则必须注册第一个用户。
您必须具有 Ops Manager 主机的 URL ,如 MongoDB 代理配置文件的mmsbaseurl设置中所设置。
预配 10 台主机,为分片集群的组件提供服务。 有关主机要求,请参阅 MongoDB 手册中的生产说明。
每台主机必须为其MongoDB Agent提供对所有其他主机上 MongoDB Agent的主机名和端口的完全网络访问权限。每个代理运行命令hostname -f
以自行识别其主机名和端口,并将其报告给 Ops Manager。
提示
为确保代理可以相互访问,请使用自动化预配主机。 这将安装具有正确网络访问权限的 MongoDB 代理。使用本教程在这些计算机上重新安装自动化。
示例
在使用API 时,您可以在Github 示例页面上查看示例。
用于集群创建 API 资源的变量
API 资源使用其中的一个或多个变量。 在调用这些 API 资源之前,将这些变量替换为您所需的值。
先决条件
配置 API 访问权限以允许使用 API。
步骤
通过 API 创建群组和用户
使用 API 创建项目。
使用 Ops Manager Administration API 发送项目文档以创建新项目。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Content-Type: application/json" \ --request POST "https://<OpsManagerHost>:<Port>/api/public/v1.0/groups?pretty=true" \ --data ' { "name": "{GROUP-NAME}", "orgId": "{ORG-ID}" }'
API返回一份包含项目的agentApiKey
和id
的文档。
在返回的文档中记录 和agentApiKey
id
的值。
记录这些值,以便在此过程和本教程的其他过程中使用。
使用 API 在新项目中创建用户。
使用/users
端点将用户添加到新项目。
请求正文应包含包含用户信息的用户JSON文档。
将用户的roles.roleName
设置为GROUP_OWNER
,并将用户的roles.groupId
设置为新群组的id
。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Content-Type: application/json" \ --request POST "https://<OpsManagerHost>:<Port>/api/public/v1.0/users?pretty=true" \ --data ' { "username": "<new_user@example.com>", "emailAddress": "<new_user@example.com>", "firstName": "<First>", "lastName": "<Last>", "password": "<password>", "roles": [{ "groupId": "{PROJECT-ID}", "roleName": "GROUP_OWNER" }] }'
(可选)如果使用全局所有者用户创建项目,则可以从项目中删除该用户。
用于创建项目的用户会自动添加到项目中。 如果您使用的用户具有Global Owner
角色,您可以从项目中删除该用户,而不会失去将来对项目进行更改的能力。 只要您拥有项目的agentApiKey
和id
,您在以全局所有者身份登录时就拥有对该项目的完全访问权限。
GET
全局所有者的 ID。 发出以下命令以请求项目的用户:
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --request GET "https://<OpsManagerHost>:<Port>/api/public/v1.0/groups/{PROJECT-ID}/users?pretty=true"
API返回一个JSON文档,其中列出了所有的项目用户。找到将roles.roleName
设置为GLOBAL_OWNER
的用户。 复制用户的id
值,并发出以下命令以从项目中删除用户,并将{USER-ID}
替换为用户的id
值:
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --request GET "https://<OpsManagerHost>:<Port>/api/public/v1.0/groups/{PROJECT-ID}/users/{USER-ID}?pretty=true"
如果 Ops Manager 成功删除用户,该API将返回HTTP 200 OK
状态代码。
在每个预配主机上安装 MongoDB Agent
在每台主机上完成 MongoDB Agent 安装过程。
要了解如何安装 MongoDB Agent,请按照相应平台的步骤进行操作。
确认自动化配置的初始状态。
当 MongoDB Agent 首次运行时,它会下载mms-cluster-config-backup.json
文件,该文件描述了自动化配置的所需状态。
在其中一台主机上,导航到/var/lib/mongodb-mms-automation/
并打开mms-cluster-config-backup.json
。 确认文件的version
字段设置为1
。 发生更改时,Ops Manager 会自动递增此字段。
部署新集群
要添加或更新部署,请检索配置,根据需要进行更改,然后通过API将更新的配置发送到 Ops Manager。
以下过程通过API部署更新的自动化配置:
从 Ops Manager 检索自动化配置。
使用AutomationConfig资源检索配置。 发出以下命令,用集群创建 API 资源的变量替换占位符。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --request GET "https://<OpsManagerHost>:<Port>/api/public/v1.0/groups/{PROJECT-ID}/automationConfig?pretty=true" \ --output currentAutomationConfig.json 验证下载的自动化配置文件。
将
currentAutomationConfig.json
的version
字段与自动化配置备份文件mms-cluster-config-backup.json
进行比较。version
值是两个JSON文档中的最后一个元素。 您可以在任何运行 MongoDB Agent 的主机上找到此文件,网址为:Linux 和 macOS:
/var/lib/mongodb-mms-automation/mms-cluster-config-backup.json
Windows:
%SystemDrive%\MMSAutomation\versions\mms-cluster-config-backup.json
如果
version
值匹配,则您正在使用当前版本的自动化配置文件。
创建新自动化配置的顶层。
创建一个包含以下字段的文档。 在构建配置文档时,请参阅自动化配置的描述以获取有关设置的详细说明。 有关示例,请参阅 MongoDB 实验室页面。
1 { 2 "options": { 3 "downloadBase": "/var/lib/mongodb-mms-automation", 4 }, 5 "mongoDbVersions": [], 6 "monitoringVersions": [], 7 "backupVersions": [], 8 "processes": [], 9 "replicaSets": [], 10 "sharding": [] 11 }
将监控添加到自动化配置中。
在monitoringVersions.hostname
字段中,输入 Ops Manager 应安装监控的服务器的主机名。使用在服务器上运行hostname -f
会返回的完全限定域名,如下所示:
1 "monitoringVersions": [ 2 { 3 "hostname": "<server_x.example.com>", 4 "logPath": "/var/log/mongodb-mms-automation/monitoring-agent.log", 5 "logRotate": { 6 "sizeThresholdMB": 1000, 7 "timeThresholdHrs": 24 8 } 9 } 10 ]
此配置示例还包括指定日志位置的logPath
字段和指定日志阈值的logRotate
字段。
将服务器添加到自动化配置中。
如通过 API 部署集群中所述,此分片集群有10个 MongoDB 实例,每个实例都在自己的服务器上运行。 因此,自动化配置的processes
数组将包含10文档,每个 MongoDB 实例一个文档。
以下示例将第一个文档添加到processes
数组中。 将<process_name_1>
替换为您选择的任何名称,并将<server1.example.com>
替换为主机的FQDN 。
添加 9 个文档:分片集群中的每个 MongoDB 实例一个文档。
为processes.<args>
字段指定args2_6
语法。 processes.args2_6
对象接受 MongoDB 2.6 及更高版本的大多数 MongoDB 设置和参数。 要了解更多信息,请参阅MongoDB 设置和自动化支持。
1 "processes": [ 2 { 3 "version": "4.0.6", 4 "name": "<process_name_1>", 5 "hostname": "<server1.example.com>", 6 "logRotate": { 7 "sizeThresholdMB": 1000, 8 "timeThresholdHrs": 24 9 }, 10 "authSchemaVersion": 5, 11 "featureCompatibilityVersion": "4.0", 12 "processType": "mongod", 13 "args2_6": { 14 "net": { 15 "port": 27017 16 }, 17 "storage": { 18 "dbPath": "/data/" 19 }, 20 "systemLog": { 21 "path": "/data/mongodb.log", 22 "destination": "file" 23 }, 24 "replication": { 25 "replSetName": "rs1" 26 } 27 } 28 }, 29 ]
将分片集群拓扑结构添加到自动化配置中。
将两个副本集文档添加到replicaSets
数组。 向每个文档添加三个成员。
例子
本节将一个副本集成员添加到第一个副本集文档中:
重要
您必须在每个副本集的根文档中包含"protocolVersion": 1
。
1 "replicaSets": [ 2 { 3 "_id": "rs1", 4 "members": [ 5 { 6 "_id": 0, 7 "host": "<process_name_1>", 8 "priority": 1, 9 "votes": 1, 10 "secondaryDelaySecs": 0, 11 "hidden": false, 12 "arbiterOnly": false 13 } 14 ], 15 "protocolVersion": 1 16 } 17 ]
在sharding
数组中,将副本集添加到分片,并添加配置服务器设置名称,如下所示:
1 "sharding": [ 2 { 3 "shards": [ 4 { 5 "tags": [], 6 "_id": "shard1", 7 "rs": "rs1" 8 }, 9 { 10 "tags": [], 11 "_id": "shard2", 12 "rs": "rs2" 13 } 14 ], 15 "name": "sharded_cluster_via_api", 16 "configServerReplica": "rs-config" 17 } 18 ]
发送更新的自动化配置。
使用AutomationConfig资源发送更新的自动化配置。
使用更新后的配置文档的路径发出以下命令,并将占位符替换为集群创建 API 资源的变量。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Content-Type: application/json" \ --request PUT "https://<OpsManagerHost>:<Port>/api/public/v1.0/groups/{PROJECT-ID}/automationConfig?pretty=true" \ --data @currentAutomationConfig.json
成功更新配置后,API 会返回 HTTP 200 OK
状态代码,以指示请求已成功。
验证是否已部署配置更新。
使用AutomationStatus资源验证配置更新是否已完全部署。 发出以下命令:
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --request GET "https://<OpsManagerHost>:<Port>/api/public/v1.0/groups/{PROJECT-ID}/automationStatus?pretty=true"
curl
命令返回一个JSON对象,其中包含processes
数组以及goalVersion
键和值。 processes
数组包含托管 MongoDB 实例的每个服务器的文档。 当processes
数组中的所有lastGoalVersionAchieved
字段等于为goalVersion
指定的值时,即成功部署新配置。
例子
在此响应中, processes[2].lastGoalVersionAchieved
落后于goalVersion
。 这表示位于server3.example.com
的 MongoDB 实例运行的版本比goalVersion
慢一个版本。 等待几秒钟,然后再次发出curl
命令。
1 { 2 "goalVersion": 2, 3 "processes": [{ 4 "hostname": "server1.example.com", 5 "lastGoalVersionAchieved": 2, 6 "name": "ReplSet_0", 7 "plan": [] 8 }, { 9 "hostname": "server2.example.com", 10 "lastGoalVersionAchieved": 2, 11 "name": "ReplSet_1", 12 "plan": [] 13 }, { 14 "hostname": "server3.example.com", 15 "lastGoalVersionAchieved": 1, 16 "name": "ReplSet_2", 17 "plan":[] 18 }] 19 }
要在 Ops Manager 控制台中查看新配置,请单击 Deployment 。
后续步骤
要在集群中提供其他版本的 MongoDB,请参阅更新部署的 MongoDB 版本。