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 を使用して、リソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

az group create --name myResourceGroup --location eastus

az vm create を使用して VM を作成します。 次の例では、SSH 公開キー認証を使用して myVM という名前の VM に azureuser という名前のユーザーを作成します。

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

自分のユーザー名と前の手順からの出力に表示された publicIpAddress を使用して VM に対して SSH を実行します。

ssh azureuser@<publicIpAddress>

MongoDB のインストール ソースを追加するには、次のように yum リポジトリ ファイルを作成します。

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

vinano などを使用して、編集のために MongoDB リポジトリ ファイルを開きます。 次の行を追加します。

[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 にアクセスできない SELinux が CentOS イメージに適用されます。 ポリシー管理ツールをインストールし、既定の TCP ポート 27017 での MongoDB の動作を許可するように SELinux を構成します。

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 用のカスタム スクリプト拡張機能を使って、新しく作成した CentOS VM に yum リポジトリを追加してから、MongoDB をインストールします。

この環境を作成するには、最新の Azure CLI をインストールし、az login を使用して Azure アカウントにログインする必要があります。 最初に、az group create を使用して、リソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

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 にログオンします。 パブリック DNS アドレスを確認するには、az vm show を実行します。

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

独自のユーザー名とパブリック DNS アドレスを使用して、VM に SSH でアクセスします。

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 シャード化クラスターのベスト プラクティスに従って、冗長性と高可用性を提供します。 このテンプレートは、2 つのシャードと、各レプリカ セット内に 3 つのノードを作成します。 3 つのノードを含む 1 つの構成サーバー レプリカ セットも作成され、さらに 2 つの mongos ルーター サーバーが作成されてシャード全体のアプリケーションの一貫性が提供されます。

警告

この複雑な MongoDB シャード化クラスターをデプロイするには、20 個より多くのコアが必要です。サブスクリプションに対するリージョンごとの既定のコア数は、通常 20 個です。 コア数を増やすには、Azure サポート要求を提出してください。

この環境を作成するには、最新の Azure CLI をインストールし、az login を使用して Azure アカウントにログインする必要があります。 最初に、az group create を使用して、リソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

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 インスタンスのデプロイと構成には 1 時間以上かかることがあります。 前のコマンドの最後で --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 Resource Manager テンプレートは、カスタム スクリプト拡張機能を使って、スクリプトをダウンロードして VM で実行します。 詳しくは、「Azure カスタム スクリプト拡張機能と Linux 仮想マシンの使用」をご覧ください。