Docs 菜单
Docs 主页
/
MongoDB Ops Manager
/ /

通过 API 部署集群

在此页面上

  • 先决条件
  • 举例
  • 用于集群创建 API 资源的变量
  • 先决条件
  • 步骤
  • 后续步骤

本教程操作 Ops Manager Administration API 的自动化配置,以部署其他用户拥有的分片集群。本教程首先创建一个新项目,然后创建一个新用户作为该项目的所有者,最后创建一个由新用户拥有的分片集群。您可以创建脚本来自动执行这些过程,以便在日常操作中使用。

要执行这些步骤,您必须有足够的 Ops Manager 访问权限。具有 Global OwnerProject 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 资源之前,将这些变量替换为您所需的值。

名称
类型
说明
PUBLIC-KEY
字符串
您的 API 凭证的公共 API 密钥。
PRIVATE-KEY
字符串
您的 API 档案的私有 API 密钥 。
<OpsManagerHost>:<Port>
字符串
Ops Manager 的URL 实例。
GROUP-ID
字符串
项目设置中项目的唯一标识符。
1

使用 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}"
}'

API返回一份包含项目的agentApiKeyid的文档。

2

记录这些值,以便在此过程和本教程的其他过程中使用。

3

使用/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"
}]
}'
4

用于创建项目的用户会自动添加到项目中。 如果您使用的用户具有Global Owner角色,您可以从项目中删除该用户,而不会失去将来对项目进行更改的能力。 只要您拥有项目的agentApiKeyid ,您在以全局所有者身份登录时就拥有对该项目的完全访问权限。

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状态代码。

1

要了解如何安装 MongoDB Agent,请按照相应平台的步骤进行操作。

2

当 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部署更新的自动化配置:

1
  1. 使用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
  2. 验证下载的自动化配置文件。

    currentAutomationConfig.jsonversion字段与自动化配置备份文件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值匹配,则您正在使用当前版本的自动化配置文件。

2

创建一个包含以下字段的文档。 在构建配置文档时,请参阅自动化配置的描述以获取有关设置的详细说明。 有关示例,请参阅 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}
3

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 字段。

4

通过 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]
5

将两个副本集文档添加到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 "collections": []
18 }
19]
6

使用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状态代码,以指示请求已成功。

7

从 Ops Manager 检索自动化配置并确认其中包含更改。要检索配置,请发出以下命令,用集群创建 API 资源的变量替换占位符。

curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
--request GET "https://<OpsManagerHost>:<Port>/api/public/v1.0/groups/{PROJECT-ID}/automationConfig?pretty=true"
8

使用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 版本。

后退

Ops Manager 管理 API 教程