В этом посте объясняется, как использовать наборы реплик MongoDB из приложения node.js, все они размещены в Windows Azure. Для этого мы будем использовать новые инструменты Windows Azure для MongoDB и Node.js , которые содержат несколько полезных PowerShell CmdLets, которые сэкономят драгоценное время.
Мы также объясним, как работает интеграция между mongo-node-azure.
Содержание этой статьи первоначально было размещено в блоге Node on Azure.
Как это работает
Вот как работает mongo db в Azure и node.js:
- MongoDb запустит собственные двоичные файлы для рабочей роли и сохранит данные в хранилище Windows Azure, используя диск Windows Azure (в основном жесткий диск, смонтированный на больших двоичных объектах Azure).
- Преимущество использования хранилища Azure заключается в том, что данные геореплицируются . Это также облегчит резервное копирование благодаря функции моментальных снимков хранилища больших двоичных объектов (которое является не копией, а разницей).
- Он будет использовать локальный жесткий диск в виртуальной машине (локальные ресурсы на жаргоне Azure) для хранения файлов журнала и локального кэша.
- Вы можете масштабировать до нескольких наборов реплик Mongo, увеличив количество экземпляров роли Mongo Db
- Так как приложение, которое будет подключаться к набору реплик Mongo, будет знать IP-адрес каждого набора реплик. Как это работает, есть задача запускакоторый запускает небольшой исполняемый файл каждый раз, когда в вашем приложении запускается новый экземпляр. Этот исполняемый файл будет собирать IP-адрес каждого экземпляра, на котором выполняется набор реплик, с использованием RoleEnviroment.Roles [«ReplicaSetRole»]. Instances [i] .InstanceEndpoints.IPEndpoint и записывать его в файл json в корневой папке роли. Затем в файле node.js будет модуль, который будет прослушивать изменения в этом файле. Этот модуль предоставит метод для получения адресов набора реплик для использования с драйвером Монго. С другой стороны, если количество экземпляров увеличилось или уменьшилось, исполняемый файл будет использовать событие RoleEnvironment.Changed и перезапишет файл json с новой информацией. Они должны были сделать все это, потому что пока невозможно получить доступ к API RoleEnvironment из узла.
- И последнее, но не менее важное: все работает в эмуляторе.
Если вы хотите узнать больше об этом, перейдите к Руководству по началу работы — Node.js с хранилищем в MongoDB и документации от 10gen .
Как настроить Mongo с Windows Azure
Откройте Windows PowerShell для MongoDB Node.js. Прежде всего, необходимо загрузить двоичные файлы MongoDB в виде отдельного пакета, в дополнение к установке Windows Azure Tools для MongoDB и Node.js. Это необходимо, поскольку MSI-инструменты mongo не содержат двоичные файлы mongodb (из-за различий в лицензировании). Поэтому эту команду необходимо выполнить один раз, чтобы загрузить двоичные файлы MongoDB в папку «C: \ Program Files (x86) \ MongoDB \ Windows Azure \ Nodejs \ Scaffolding \ MongoDB \ WorkerRole \ MongoDBBinaries».
Когда вы выполните команду Add-AzureMongoWorkerRole, она скопирует двоичные файлы mongodb из указанной выше папки в созданную рабочую роль.
Get-AzureMongoDBBinaries
Теперь давайте добавим рабочую роль Монго, которая будет запускать набор реплик.
Add-AzureMongoWorkerRole ReplicaSetRole 3
Это создаст рабочую роль с именем ReplicaSetRole с 3 экземплярами. Вы можете использовать желаемую сумму, но в производственной среде рекомендуется использовать как минимум 3 для восстановления после отказа, 1 экземпляр эквивалентен автономному серверу.
Далее мы свяжем как приложение узла (в данном случае sample-web), так и роли mongo, используя следующую команду:
Join-AzureNodeRoleToMongoRole sample-web ReplicaSetRole
Вот что будет делать CmdLet:
- Добавьте два параметра конфигурации с именами RoleName и EndpointName.
- Добавьте задачу запуска, которая запускает AzureEndpointsAgent.exe, которая выполняет всю работу, описанную в первом разделе.
- Установите модуль azureEndpoints (он будет читать файл json и предоставлять информацию о наборе replcia).
Теперь, когда у нас есть обе роли, давайте добавим немного кода для подключения к набору реплик.
// Create mongodb azure endpoint // TODO: Replace 'ReplicaSetRole' with your MongoDB role name (ReplicaSetRole is the default) var mongoEndpoints = new AzureEndpoint('ReplicaSetRole', 'MongodPort'); // Watch the endpoint for topologyChange events mongoEndpoints.on('topologyChange', function() { if (self.db) { self.db.close(); self.db = null; } var mongoDbServerConfig = mongoEndpoints.getMongoDBServerConfig(); self.db = new mongoDb('test', mongoDbServerConfig, {native_parser:false}); self.db.open(function(){}}); }); mongoEndpoints.on('error', function(error) { throw error; });
MongoEndpoints будут прослушивать работающие узлы набора реплик MongoDB и будут автоматически обновляться, если один из узлов будет включен или отключен (либо из-за того, что количество экземпляров роли набора реплик было увеличено / уменьшено, либо из-за исправления виртуальной машины)
Вот и все! Вы можете опубликовать это приложение в Windows Azure и дождаться запуска экземпляров.
Вы можете просмотреть пример приложения узла здесь (запустите npm install после извлечения кода для загрузки необходимых модулей).
ПРИМЕЧАНИЕ. Узлам MongoDB требуется некоторое время для инициализации. Если вы тестируете приложение в локальном эмуляторе, используя опцию -launch, вероятно, вы получите ошибку не найден основной сервер . Если это произойдет, подождите несколько секунд и попробуйте снова.
Источник: http://nodeblog.cloudapp.net/running-mongodb-on-azure-and-connect-from-a-nodejs-web-app