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

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

在 VM 上手动安装和配置 MongoDB

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

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

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

az group create --name myResourceGroup --location chinaeast

使用 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

默认情况下,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。

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

az group create --name myResourceGroup --location chinaeast

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

az group deployment 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.chinaeast.cloudapp.chinacloudapi.cn

如下所示,通过使用本地 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 路由器服务器(用于对各个分片中的应用程序提供一致性)。

Warning

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

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

az group create --name myResourceGroup --location chinaeast

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

az group deployment create --resource-group myResourceGroup \
  --parameters '{"adminUsername": {"value": "azureuser"},
    "adminPassword": {"value": "P@ssw0rd!"},
    "mongoAdminUsername": {"value": "mongoadmin"},
    "mongoAdminPassword": {"value": "P@ssw0rd!"},
    "dnsNamePrefix": {"value": "mypublicdns"},
    "environment": {"value": "AzureChinaCloud"},
    "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 group deployment show 查看部署状态。 以下示例查看 myResourceGroup 资源组中 myMongoDBCluster 部署的状态:

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

后续步骤

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

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

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

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