How to install and configure MongoDB on a Linux VM
MongoDB is a popular open-source, high-performance NoSQL database. This article shows you how to install and configure MongoDB on a Linux VM with the Azure CLI. Examples are shown that detail how to:
- Manually install and configure a basic MongoDB instance
- Create a basic MongoDB instance using a Resource Manager template
- Create a complex MongoDB sharded cluster with replica sets using a Resource Manager template
Manually install and configure MongoDB on a VM
MongoDB provide installation instructions for Linux distros including Red Hat / CentOS, SUSE, Ubuntu, and Debian. The following example creates a CentOS VM. To create this environment, you need the latest Azure CLI installed and logged in to an Azure account using az login.
Create a resource group with az group create. The following example creates a resource group named myResourceGroup in the eastus location:
az group create --name myResourceGroup --location eastus
Create a VM with az vm create. The following example creates a VM named myVM with a user named azureuser using SSH public key authentication
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image CentOS \
--admin-username azureuser \
--generate-ssh-keys
SSH to the VM using your own username and the publicIpAddress
listed in the output from the previous step:
ssh azureuser@<publicIpAddress>
To add the installation sources for MongoDB, create a yum repository file as follows:
sudo touch /etc/yum.repos.d/mongodb-org-3.6.repo
Open the MongoDB repo file for editing, such as with vi
or nano
. Add the following lines:
[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
Install MongoDB using yum as follows:
sudo yum install -y mongodb-org
By default, SELinux is enforced on CentOS images that prevents you from accessing MongoDB. Install policy management tools and configure SELinux to allow MongoDB to operate on its default TCP port 27017 as follows:
sudo yum install -y policycoreutils-python
sudo semanage port -a -t mongod_port_t -p tcp 27017
Start the MongoDB service as follows:
sudo service mongod start
Verify the MongoDB installation by connecting using the local mongo
client:
mongo
Now test the MongoDB instance by adding some data and then searching:
> db
test
> db.foo.insert( { a : 1 } )
> db.foo.find()
{ "_id" : ObjectId("57ec477cd639891710b90727"), "a" : 1 }
> exit
If desired, configure MongoDB to start automatically during a system reboot:
sudo chkconfig mongod on
Create basic MongoDB instance on CentOS using a template
You can create a basic MongoDB instance on a single CentOS VM using the following Azure quickstart template from GitHub. This template uses the Custom Script extension for Linux to add a yum repository to your newly created CentOS VM and then install MongoDB.
- Basic MongoDB instance on CentOS - https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-centos/azuredeploy.json
To create this environment, you need the latest Azure CLI installed and logged in to an Azure account using az login. First, create a resource group with az group create. The following example creates a resource group named myResourceGroup in the eastus location:
az group create --name myResourceGroup --location eastus
Next, deploy the MongoDB template with az deployment group create. When prompted, enter your own unique values for newStorageAccountName, dnsNameForPublicIP, and admin username and password:
az deployment group create --resource-group myResourceGroup \
--template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-centos/azuredeploy.json
Log on to the VM using the public DNS address of your VM. You can view the public DNS address with az vm show:
az vm show -g myResourceGroup -n myLinuxVM -d --query [fqdns] -o tsv
SSH to your VM using your own username and public DNS address:
ssh azureuser@mypublicdns.eastus.cloudapp.azure.com
Verify the MongoDB installation by connecting using the local mongo
client as follows:
mongo
Now test the instance by adding some data and searching as follows:
> db
test
> db.foo.insert( { a : 1 } )
> db.foo.find()
{ "_id" : ObjectId("57ec477cd639891710b90727"), "a" : 1 }
> exit
Create a complex MongoDB Sharded Cluster on CentOS using a template
You can create a complex MongoDB sharded cluster using the following Azure quickstart template from GitHub. This template follows the MongoDB sharded cluster best practices to provide redundancy and high availability. The template creates two shards, with three nodes in each replica set. One config server replica set with three nodes is also created, plus two mongos router servers to provide consistency to applications from across the shards.
- MongoDB Sharding Cluster on CentOS - https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-sharding-centos/azuredeploy.json
Warning
Deploying this complex MongoDB sharded cluster requires more than 20 cores, which is typically the default core count per region for a subscription. Open an Azure support request to increase your core count.
To create this environment, you need the latest Azure CLI installed and logged in to an Azure account using az login. First, create a resource group with az group create. The following example creates a resource group named myResourceGroup in the eastus location:
az group create --name myResourceGroup --location eastus
Next, deploy the MongoDB template with az deployment group create. Define your own resource names and sizes where needed such as for mongoAdminUsername, sizeOfDataDiskInGB, and 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
This deployment can take over an hour to deploy and configure all the VM instances. The --no-wait
flag is used at the end of the preceding command to return control to the command prompt once the template deployment has been accepted by the Azure platform. You can then view the deployment status with az deployment group show. The following example views the status for the myMongoDBCluster deployment in the myResourceGroup resource group:
az deployment group show \
--resource-group myResourceGroup \
--name myMongoDBCluster \
--query [properties.provisioningState] \
--output tsv
Next steps
In these examples, you connect to the MongoDB instance locally from the VM. If you want to connect to the MongoDB instance from another VM or network, ensure the appropriate Network Security Group rules are created.
These examples deploy the core MongoDB environment for development purposes. Apply the required security configuration options for your environment. For more information, see the MongoDB security docs.
For more information about creating using templates, see the Azure Resource Manager overview.
The Azure Resource Manager templates use the Custom Script Extension to download and execute scripts on your VMs. For more information, see Using the Azure Custom Script Extension with Linux Virtual Machines.