如何在 Linux VM 上安装和配置 MongoDB

MongoDB 是一个流行的开源、高性能 NoSQL 数据库。 本文介绍如何使用 Azure CLI 在 Linux VM 上安装和配置 MongoDB。 文中提供了一些示例,详细说明如何执行以下操作:

在 VM 上手动安装和配置 MongoDB

MongoDB 为 Red Hat/CentOS、SUSE、Ubuntu 和 Debian 等 Linux 分发版提供了安装说明。 以下示例创建 CentOS VM。 若要创建此环境,需要安装最新的 Azure CLI,并使用 az login 登录到 Azure 帐户。

使用 az group create 创建资源组。 以下示例在 eastus 位置创建名为 myResourceGroup 的资源组:

az group create --name myResourceGroup --location eastus

使用 az vm create 创建 VM。 以下示例通过名为 azureuser 的用户使用 SSH 公钥身份验证创建名为 myVM 的 VM

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image CentOS \
    --admin-username azureuser \
    --generate-ssh-keys

使用你自己的用户名和上一步骤中的输出中列出的 publicIpAddress 以 SSH 方式登录到 VM:

ssh azureuser@<publicIpAddress>

若要为 MongoDB 添加安装源,请按如下所示创建一个 yum 存储库文件:

sudo touch /etc/yum.repos.d/mongodb-org-3.6.repo

打开该 MongoDB 存储库文件进行编辑,例如使用 vinano。 添加以下行:

[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

按如下所示使用 yum 安装 MongoDB:

sudo yum install -y mongodb-org

默认情况下,在阻止访问 MongoDB 的 CentOS 映像中强制实施 SELinux。 安装策略管理工具并配置 SELinux,让 MongoDB 在其默认的 TCP 端口 27017 上运行,如下所示:

sudo yum install -y policycoreutils-python
sudo semanage port -a -t mongod_port_t -p tcp 27017

按如下所示启动 MongoDB 服务:

sudo service mongod start

通过使用本地 mongo 客户端进行连接来验证 MongoDB 安装:

mongo

现在,通过添加一些数据并执行搜索来测试 MongoDB 实例:

> db
test
> db.foo.insert( { a : 1 } )  
> db.foo.find()  
{ "_id" : ObjectId("57ec477cd639891710b90727"), "a" : 1 }
> exit

如果需要,可将 MongoDB 配置为在系统重新引导期间自动启动:

sudo chkconfig mongod on

使用模板在 CentOS 上创建基本 MongoDB 实例

可以使用 GitHub 中的以下 Azure 快速入门模板,在单个 CentOS VM 上创建基本的 MongoDB 实例。 此模板使用适用于 Linux 的自定义脚本扩展将 yum 存储库添加到新建的 CentOS VM,然后安装 MongoDB。

若要创建此环境,需要安装最新的 Azure CLI,并使用 az login 登录到 Azure 帐户。 首先,使用 az group create 创建资源组。 以下示例在 eastus 位置创建名为 myResourceGroup 的资源组:

az group create --name myResourceGroup --location eastus

接下来,使用 az deployment group create 部署 MongoDB 模板。 出现提示时,为 newStorageAccountName、dnsNameForPublicIP 以及管理员用户名和密码提供自己的唯一值:

az deployment group create --resource-group myResourceGroup \
  --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-centos/azuredeploy.json

使用 VM 的公共 DNS 地址登录到 VM。 可以使用 az vm show 查看公共 DNS 地址:

az vm show -g myResourceGroup -n myLinuxVM -d --query [fqdns] -o tsv

使用自己的用户名和公共 DNS 地址 SSH 连接到 VM:

ssh azureuser@mypublicdns.eastus.cloudapp.azure.com

如下所示,通过使用本地 mongo 客户端进行连接来验证 MongoDB 安装:

mongo

现在,按如下所示,通过添加一些数据并执行搜索来测试实例:

> db
test
> db.foo.insert( { a : 1 } )  
> db.foo.find()  
{ "_id" : ObjectId("57ec477cd639891710b90727"), "a" : 1 }
> exit

使用模板在 CentOS 上创建复杂的 MongoDB 分片群集

可以使用 Github 中的以下 Azure 快速入门模板创建复杂的 MongoDB 分片群集。 此模板遵循 MongoDB 分片群集最佳实践来提供冗余和高可用性。 该模板将创建两个分片,其中每个副本集包含三个节点。 另外,它还会创建一个配置服务器副本集和两个 mongos 路由器服务器,前者包含 3 个节点的,后者用于确保各分片中的应用程序保持一致。

警告

部署这种复杂 MongoDB 分片群集需要 20 个以上的核心(每个区域中一个订阅的默认核心计数通常为 20 个)。 请提出 Azure 支持请求,以增加核心计数。

若要创建此环境,需要安装最新的 Azure CLI,并使用 az login 登录到 Azure 帐户。 首先,使用 az group create 创建资源组。 以下示例在 eastus 位置创建名为 myResourceGroup 的资源组:

az group create --name myResourceGroup --location eastus

接下来,使用 az deployment group create 部署 MongoDB 模板。 根据需要定义自己的资源名称和大小,例如针对 mongoAdminUsername、sizeOfDataDiskInGB 和 configNodeVmSize:

az deployment group create --resource-group myResourceGroup \
  --parameters '{"adminUsername": {"value": "azureuser"},
    "adminPassword": {"value": "P@ssw0rd!"},
    "mongoAdminUsername": {"value": "mongoadmin"},
    "mongoAdminPassword": {"value": "P@ssw0rd!"},
    "dnsNamePrefix": {"value": "mypublicdns"},
    "environment": {"value": "AzureCloud"},
    "numDataDisks": {"value": "4"},
    "sizeOfDataDiskInGB": {"value": 20},
    "centOsVersion": {"value": "7.0"},
    "routerNodeVmSize": {"value": "Standard_DS3_v2"},
    "configNodeVmSize": {"value": "Standard_DS3_v2"},
    "replicaNodeVmSize": {"value": "Standard_DS3_v2"},
    "zabbixServerIPAddress": {"value": "Null"}}' \
  --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-sharding-centos/azuredeploy.json \
  --name myMongoDBCluster \
  --no-wait

此部署可能需要一个多小时来部署和配置所有 VM 实例。 上述命令末尾使用了 --no-wait 标志,在 Azure 平台接受模板部署后将控制权返回给命令提示符。 然后,可以使用 az deployment group show 查看部署状态。 以下示例查看 myResourceGroup 资源组中 myMongoDBCluster 部署的状态:

az deployment group show \
    --resource-group myResourceGroup \
    --name myMongoDBCluster \
    --query [properties.provisioningState] \
    --output tsv

后续步骤

在上述示例中,已在本地从 VM 连接到 MongoDB 实例。 如果想要从另一个 VM 或网络连接到 MongoDB 实例,请确保创建相应的网络安全组规则

这些示例部署用于开发的核心 MongoDB 环境。 请为你的环境应用必需的安全配置选项。 有关详细信息,请参阅 MongoDB 安全文档

有关使用模板创建这些规则的详细信息,请参阅 Azure 资源管理器概述

Azure 资源管理器模板使用自定义脚本扩展在 VM 上下载并执行脚本。 有关详细信息,请参阅在 Linux 虚拟机上使用 Azure 自定义脚本扩展