Come installare e configurare MongoDB in una macchina virtuale Linux

MongoDB è un diffuso database NoSQL open source a prestazioni elevate. Questo articolo illustra come installare e configurare MongoDB in una VM Linux usando l'interfaccia della riga di comando di Azure 2.0. È possibile anche eseguire questi passaggi tramite l'interfaccia della riga di comando di Azure 1.0. Alcuni esempi illustrano in dettaglio come fare a:

Installare e configurare manualmente MongoDB su una VM

MongoDB fornisce le istruzioni di installazione per i sistemi operativi Linux Red Hat/CentOS, SUSE, Ubuntu e Debian. L'esempio seguente crea una macchina virtuale CentOS. Per creare questo ambiente, è necessario aver installato la versione più recente dell'interfaccia della riga di comando di Azure 2.0 e aver eseguito l'accesso a un account Azure tramite az login.

Come prima cosa creare un gruppo di risorse con az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella posizione eastus:

az group create --name myResourceGroup --location eastus

Creare una macchina virtuale con il comando az vm create. L'esempio seguente crea una macchina virtuale denominata myVM con un utente chiamato azureuser usando l'autenticazione con chiave pubblica SSH

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

Eseguire SSH sulla macchina virtuale usando il proprio nome utente e l'indirizzo publicIpAddress elencato nell'output ottenuto nel passaggio precedente:

ssh azureuser@<publicIpAddress>

Per aggiungere le origini di installazione di MongoDB, creare un file di archivio yum come illustrato di seguito:

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

Aprire il file di archivio di MongoDB da modificare. Aggiungere le righe seguenti:

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

Installare MongoDB usando yum come illustrato di seguito:

sudo yum install -y mongodb-org

Per impostazione predefinita, alle immagini CentOS è applicato SELinux, che impedisce di accedere a MongoDB. Installare gli strumenti per la gestione dei criteri e configurare SELinux in modo tale da consentire a MongoDB di operare sulla porta TCP 27017 predefinita, come illustrato di seguito:

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

Avviare il servizio MongoDB come di seguito:

sudo service mongod start

Verificare l'installazione di MongoDB connettendosi tramite il client mongo locale:

mongo

A questo punto, testare l'istanza di MongoDB aggiungendo alcuni dati ed eseguendo la ricerca:

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

Se lo si desidera, configurare MongoDB per l'avvio automatico durante il riavvio del sistema:

sudo chkconfig mongod on

Creare un'istanza di MongoDB di base su CentOS usando un modello

Per creare un'istanza di MongoDB di base in una singola VM CentOS, è possibile usare il seguente modello di avvio rapido di Azure in GitHub. Usando l'estensione dello script personalizzata, questo modello consente a Linux di aggiungere un archivio yum alla macchina virtuale CentOS appena creata, per poi installare MongoDB.

Per creare questo ambiente, è necessario aver installato la versione più recente dell'interfaccia della riga di comando di Azure 2.0 e aver eseguito l'accesso a un account Azure tramite az login. Creare prima un gruppo di risorse con az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella posizione eastus:

az group create --name myResourceGroup --location eastus

Quindi distribuire il modello MongoDB con az group deployment create. Definire i nomi e le dimensioni delle risorse desiderati dove necessario per newStorageAccountName, virtualNetworkName e vmSize:

az group deployment create --resource-group myResourceGroup \
  --parameters '{"newStorageAccountName": {"value": "mystorageaccount"},
    "adminUsername": {"value": "azureuser"},
    "adminPassword": {"value": "P@ssw0rd!"},
    "dnsNameForPublicIP": {"value": "mypublicdns"},
    "virtualNetworkName": {"value": "myVnet"},
    "vmSize": {"value": "Standard_DS2_v2"},
    "vmName": {"value": "myVM"},
    "publicIPAddressName": {"value": "myPublicIP"},
    "nicName": {"value": "myNic"}}' \
  --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-centos/azuredeploy.json

Eseguire l'accesso alla VM usando l'indirizzo DNS pubblico della VM. È possibile visualizzare l'indirizzo DNS pubblico con az vm show:

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

Eseguire SSH sulla VM usando il proprio nome utente e l'indirizzo DNS pubblico:

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

Verificare l'installazione di MongoDB connettendosi tramite il client mongo locale, come di seguito:

mongo

A questo punto, testare l'istanza aggiungendo alcuni dati ed eseguendo la ricerca seguente:

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

Creare un cluster complesso di MongoDB partizionato in CentOS usando un modello

Per creare un cluster complesso di MongoDB partizionato, è possibile usare il seguente modello di avvio rapido in GitHub. Questo modello segue le procedure consigliate per cluster MongoDB partizionati per garantire ridondanza e disponibilità elevata. Il modello crea due partizioni, con tre nodi in ogni set di repliche. Inoltre, nel server di configurazione viene creato un set di repliche con tre nodi, più due server router mongos per garantire coerenza tra le applicazioni delle varie partizioni.

Avviso

La distribuzione di questo cluster complesso di MongoDB partizionato richiede più di 20 core, che in genere è il numero di core predefinito per ogni area di una sottoscrizione. Per aumentare il numero di core, aprire una richiesta di supporto tecnico di Azure.

Per creare questo ambiente, è necessario aver installato la versione più recente dell'interfaccia della riga di comando di Azure 2.0 e aver eseguito l'accesso a un account Azure tramite az login. Creare prima un gruppo di risorse con az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella posizione eastus:

az group create --name myResourceGroup --location eastus

Quindi distribuire il modello MongoDB con az group deployment create. Definire i nomi e le dimensioni delle risorse desiderati dove necessario per mongoAdminUsername, sizeOfDataDiskInGB e 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": "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

Questa distribuzione può impiegare più di un'ora per distribuire e configurare tutte le istanze di VM. Il flag --no-wait viene usato alla fine del comando precedente per restituire il controllo al prompt dei comandi dopo che la distribuzione del modello è stata accettata dalla piattaforma Azure. È quindi possibile visualizzare lo stato della distribuzione con az group deployment show. L'esempio seguente visualizza lo stato per la distribuzione myMongoDBCluster nel gruppo di risorse myResourceGroup:

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

Passaggi successivi

In questi esempi si effettua la connessione all'istanza di MongoDB locale dalla VM. Se si desidera connettersi all'istanza di MongoDB da un'altra VM o un'altra rete, accertarsi di creare le regole del gruppo di sicurezza di rete appropriate.

Questi esempi consentono di distribuire l'ambiente MongoDB di base per scopi di sviluppo. Applicare le opzioni di configurazione della sicurezza necessarie per l'ambiente in uso. Per altre informazioni, vedere i documenti sulla sicurezza di MongoDB.

Per altre informazioni sulla creazione tramite modelli, vedere Panoramica di Azure Resource Manager.

I modelli di Azure Resource Manager usano l'estensione dello script personalizzata per scaricare ed eseguire script nelle VM. Per altre informazioni, vedere Using the Azure Custom Script Extension with Linux Virtual Machines (Usare l'estensione dello script personalizzata di Azure con macchine virtuali Linux).