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

MongoDB 是一种常用的开源高性能 NoSQL 数据库。 本文介绍如何使用 Azure CLI 在 Linux VM 上安装和配置 MongoDB。 示例显示,其中详细介绍了如何:

在 VM 上手动安装和配置 MongoDB

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

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

az group create --name myResourceGroup --___location eastus

使用 az vm create 创建 VM。 以下示例使用 SSH 公钥身份验证通过名为 azureuser 的用户创建名为 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

默认情况下,CentOS 映像上启用了 SELinux,这限制了对 MongoDB 的访问。 安装策略管理工具并配置 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。

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

az group create --name myResourceGroup --___location eastus

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

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 分片群集最佳做法 ,以提供冗余和高可用性。 该模板创建两个分片,每个副本集(replica set)中有三个节点。 还创建了一个具有三个节点的配置服务器副本集,以及两个 mongos 路由器服务器,以便从各个分片向应用程序提供一致性。

警告

部署此复杂的 MongoDB 分片群集需要 20 多个核心,这通常是订阅的每个区域的默认核心计数。 打开 Azure 支持请求以增加核心数量。

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

az group create --name myResourceGroup --___location eastus

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

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 上下载和执行脚本。 有关详细信息,请参阅 将 Azure 自定义脚本扩展与 Linux 虚拟机配合使用