Как развернуть приложение Node.js и MongoDB с помощью Rancher в Ubuntu 16.04

Вступление

Rancher - это открытая, самодостаточная и полная платформа для запуска и простого управления контейнерами в производстве. Будучи самим образом Docker, сервер Rancher будет работать на любом хосте Linux, на котором доступен Docker.

Вот некоторые из ключевых особенностей, которые делают Rancher привлекательным решением:

  • * Межузловая сеть *: все серверы, добавленные в Rancher, связаны между собой, обеспечивая безопасную связь между контейнерами.

  • * Балансировка нагрузки *: Сервис распределения нагрузки включен для распределения рабочих нагрузок между контейнерами или даже между несколькими облаками.

  • * Обнаружение службы *: Rancher включает в себя внутреннюю систему DNS, позволяющую идентифицировать контейнеры и службы по имени, чтобы их можно было использовать в других службах сети.

  • * Управление инфраструктурой *: с помощью Rancher вы можете добавлять, отслеживать и управлять вычислительными ресурсами любого облачного провайдера.

  • * Механизмы оркестровки *: Rancher является единственной платформой управления контейнерами, которая поддерживает наиболее популярные платформы оркестровки контейнеров, включая Cattle, Swarm, Kubernetes и Mesos. Так что, если у вас уже есть инфраструктура, работающая с одной из этих платформ, вы сможете с легкостью использовать Rancher.

  • * Открытый исходный код *: Rancher является бесплатным, открытым и прозрачным. Вы полностью контролируете свою инфраструктуру.

В этом руководстве вы создадите кластер Rancher для развертывания приложения http://nodejs.org [Node.js] с балансировкой нагрузки и поддержкой хранения данных с использованием https://www.mongodb.org [MongoDB].

В конце этого учебного пособия у вас будет четыре экземпляра со сбалансированной нагрузкой простого приложения Node.js и сервер MongoDB с отдельным контейнером данных для постоянного хранения.

Предпосылки

  • Одна капля Ubuntu 16.04 1 Гб с установленным Rancher. Мы будем использовать Rancher для создания шести дополнительных капель, каждая с 1 ГБ оперативной памяти. Выполните шаги 1 и 2 https://www.digitalocean.com/community/tutorials/how-to-manage-multi-node-deployments-with-rancher-and-docker-machine-on-ubuntu-16-04 [ Как управлять вашими многоузловыми развертываниями с помощью Rancher и Docker Machine в Ubuntu 16.04], чтобы настроить начальную каплю с помощью Rancher.

  • Приложение Node.js, которое использует MongoDB для хранения данных. В этом руководстве приведен простой пример использования библиотеки Hapi.js, которую вы можете использовать, если у вас еще нет готового приложения. Вы можете найти этот пример приложения в this репозиторий Github, и мы подробно рассмотрим его на шаге 1.

  • Git установлен на вашем локальном компьютере, так что вы можете клонировать пример приложения. Следуйте official документация по установке Git, если вам нужно выполнить это предварительное условие.

  • Docker установлен на вашем локальном компьютере, поэтому вы можете создать образ приложения, которое мы будем развертывать. Вы можете следовать the официальной документации для этого.

  • Аккаунт на Docker Hub, который является бесплатным и общедоступным реестром образов Docker. Именно здесь мы собираемся разместить код нашего приложения, чтобы мы могли развернуть его на нескольких хостах с помощью Rancher. Вам понадобится ваше имя пользователя Docker Hub для выполнения действий, описанных в этом руководстве.

  • Токен доступа DigitalOcean с доступом для чтения и записи, который можно сгенерировать, посетив страницу Applications & API. Скопируйте этот токен, так как вам нужно будет ввести его в Rancher для создания дополнительных хостов.

Вы также должны иметь базовые знания о понятиях Docker, таких как контейнеры, изображения и файлы Docker. См. Https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04[ Как установить и использовать Docker в Ubuntu 16.04] для получения дополнительной информации об использовании Docker. ,

Шаг 1 - Изучение приложения Node.js

В этом руководстве мы будем использовать простое приложение Node.js на основе инфраструктуры Hapi.js, которая получает сообщение, записывает его и перечисляет все ранее отправленные сообщения. Давайте рассмотрим, как работает приложение и как оно получает значения конфигурации, чтобы мы могли установить эти значения с помощью Docker при создании нашего образа.

Вы подготовите приложение и образ Docker на локальном компьютере для разработки, а не на сервере.

Клонируйте пример приложения на свой локальный компьютер, используя следующую команду:

git clone https://github.com/do-community/hapi-example

Затем перейдите в каталог проекта:

cd hapi-example

Давайте посмотрим на основной файл приложения, + server.js. Он содержит соединение MongoDB и код для инициализации сервера. Откройте этот файл в локальном текстовом редакторе, и вы увидите следующее содержимое:

server.js

const Hapi = require('hapi');
const mongojs = require('mongojs');

// Loads environment variables
// Used only in development
require('dotenv').config({silent: true});

const server = new Hapi.Server();
server.connection({ port: process.env.PORT || 3000 });

// Connect with the database
server.app.db = mongojs(process.env.MONGO_HOST + '/api');

// Add the routes
server.register(require('./routes'), (err) => {

 if (err) {
   console.error('Failed to load plugin:', err);
 }

 // Start the server
 server.start((err) => {
   if (err) {
     throw err;
   }

   console.log('Server running at:', server.info.uri);
 });
});

Код для маршрутов инкапсулирован как плагин Hapi.js, чтобы сэкономить место в этом руководстве, но если вам интересно, вы можете посмотреть в файле + rout.js +.

Важнейшие части файла + server.js:

server.js

require('dotenv').config({silent: true});

Он использует пакет + dotenv + Node.js для загрузки наших переменных окружения из файла + .env +. Вы можете просмотреть документацию по пакету + dotenv + в его Github репозитории, если вы заинтересованы в том, как он работает. Мы сохраняем переменные в этом файле только для процесса разработки; это проще, чем вручную писать переменные в терминале. В процессе производства мы собираемся получить переменные из Docker через Rancher.

Затем мы устанавливаем порт для сервера, используя переменную окружения + PORT +, с запасным значением + 3000 +, в случае, если переменная не определена:

server.js

server.connection({ port: process.env.PORT || 3000 });

Порт + 3000 + является общим соглашением для приложений Node.js. Это значение может быть изменено при необходимости; единственное требование - это должно быть above + 1023 + и ниже `65535 `.

Наконец, перед загрузкой маршрутов и запуском сервера мы подключаемся к серверу MongoDB, используя переменную окружения + MONGO_HOST +:

server.js

server.app.db = mongojs(process.env.MONGO_HOST + '');

Это значение среды будет определено через Rancher с именем хоста сервера MongoDB, как только мы создадим контейнеры MongoDB. Значение ++ - это имя базы данных, к которой мы собираемся подключиться, и оно будет настроено автоматически, если его не существует.

Теперь, когда у вас есть некоторые сведения о том, что ищет приложение, и о том, как мы настраиваем его порт и соединение с базой данных, давайте представим Docker.

Шаг 2 - Создание образа Docker

Rancher использует образы Docker для развертывания приложений на серверах, поэтому давайте создадим образ Docker для нашего приложения. Чтобы построить образ Docker для нашего приложения, нам нужен файл с именем + Dockerfile +, который содержит серию шагов, которые Docker будет выполнять при создании образа. Этот файл уже включен в репозиторий приложений, который вы клонировали. Давайте посмотрим на его содержимое, чтобы понять, как оно работает. Откройте его в текстовом редакторе, и вы увидите следующий код:

Dockerfile

FROM node:6
MAINTAINER James Kolce <[email protected]>

RUN mkdir -p /usr/api
COPY . /usr/api
WORKDIR /usr/api
RUN npm install --production

ENV PORT 3000
EXPOSE  $PORT

CMD ["npm", "start"]

Давайте рассмотрим каждый шаг в деталях. Сначала мы видим эту строку:

Dockerfile

FROM node:6

Эта строка заявляет, что наше изображение построено поверх official Node.js image из Docker Hub, и мы выбираем версию 6 Node.js, так как наше приложение использует некоторые функции ES6, доступные только в этой версии или выше. Рекомендуется выбирать конкретную версию вместо использования * последней * в рабочей среде, чтобы избежать любых изменений, которые могут испортить ваше приложение.

После этой строки мы устанавливаем наш рабочий каталог:

Dockerfile

RUN mkdir -p /usr/api
COPY . /usr/api
WORKDIR /usr/api

Сначала мы запускаем команду + mkdir, чтобы создать новый каталог с именем` + / usr / api _`, в котором будет жить наше приложение. Флаг + -p + означает, что + mkdir + будет создавать промежуточные каталоги по мере необходимости. Затем мы копируем содержимое изображения в этот каталог. Затем мы устанавливаем этот новый каталог в качестве нашего рабочего каталога, поэтому последующие команды будут выполняться из этого каталога.

Следующая строка запускает команду + npm + и устанавливает производственные зависимости для нашего приложения.

Dockerfile

RUN npm install --production

Далее мы видим эти две строки:

Dockerfile

ENV PORT 3000
EXPOSE  $PORT

Первая строка определяет переменную среды с именем + PORT +, которую наше приложение будет использовать для своего порта прослушивания. На случай, если эта переменная не определена, мы устанавливаем + 3000 + в качестве значения по умолчанию. Затем мы открываем этот порт, чтобы иметь доступ к нему снаружи контейнера. Использование переменной среды облегчает ее изменение без необходимости переписывать код нашего приложения. И помните, наше приложение предназначено для использования этих переменных среды.

Последний шаг в нашем Dockerfile запускает наш сервер Node.js с помощью команды + npm start +:

Dockerfile

CMD ["npm", "start"]

Чтобы создать образ Docker нашего приложения из этого файла, убедитесь, что вы находитесь в папке + hapi-example + в своем терминале, и выполните следующую команду:

docker build -t / .

Эта команда создает образ Docker, используя наш + Dockerfile +. Обратите внимание на точку в конце команды. Это указывает путь к + Dockerfile +, который находится в текущей папке. Флаг + -t + устанавливает тег для нашего изображения, и мы будем использовать + / + для тега, который является меткой, которую мы применяем к изображению, чтобы мы могли использовать его для создания экземпляров контейнера из изображения. Мы используем имя пользователя Docker Hub в качестве префикса, так как мы готовимся опубликовать это изображение после того, как протестируем его, и локальный тег образа Docker должен совпадать с именем хранилища в Docker Hub.

Теперь давайте проверим только что созданное изображение, чтобы быть уверенным, что все работает так, как ожидалось. Как вы видели ранее, наше приложение использует MongoDB, поэтому давайте создадим контейнер MongoDB, который наше приложение может использовать для хранения своих данных. Выполните следующую команду, чтобы создать и запустить контейнер MongoDB на основе официального образа MongoDB Docker:

docker run --name  -p 27017:27017 -d mongo:

Мы назначаем временное имя контейнеру с опцией + - name +; мы будем использовать это имя для остановки сервера, когда закончим тестирование приложения. Мы также привязываем порт хоста «+ 27017 » к порту, предоставляемому контейнером, чтобы мы могли проверить, работает ли MongoDB с помощью нашего локального веб-браузера. Наконец, мы указываем изображение, которое мы хотим использовать. Рекомендуется использовать ту же версию MongoDB, с которой было разработано приложение, чтобы гарантировать, что все работает как положено, поэтому в этом случае мы указываем версию ` 3 +`.

После выполнения этой команды зайдите в браузер + http: // localhost: 27017 + и вы увидите сообщение: + Похоже, вы пытаетесь получить доступ к MongoDB через HTTP через порт собственного драйвера +, что означает, что MongoDB работает.

Теперь запустите контейнер приложения и свяжите его с контейнером MongoDB, выполнив следующую команду:

docker run --name  -p 3000:3000 -d -e MONGO_HOST= --link  /

Эта команда похожа на команду, которую мы использовали для запуска контейнера MongoDB, но на этот раз мы используем образ нашего приложения (+ / +) и порт карты + 3000 + нашего хоста с портом, доступным для контейнера. Это тот же порт, который мы использовали при создании + Dockerfile +. Кроме того, мы добавляем переменную среды с именем + MONGO_HOST +, которая задает имя нашего контейнера MongoDB, который будет использоваться нашим приложением для подключения к серверу базы данных. Параметр + - link + позволяет нам использовать имя контейнера базы данных в качестве хоста внутри контейнера нашего приложения.

После запуска команды протестируйте приложение, посетив + http: // localhost: 3000 + в вашем браузере. Он должен показывать пустую страницу * без ошибок *.

Теперь, когда мы доказали, что образ Docker работает локально, давайте остановимся и удалим наши локальные контейнеры. Помните, что удаление контейнера - это не то же самое, что удаление изображения. Наше изображение останется нетронутым, поэтому мы сможем позже воссоздать контейнер или отправить изображение в Rancher, что мы и сделаем после того, как очистим нашу локальную среду.

Сначала остановите контейнер базы данных, используя его имя, которое вы определили ранее:

docker stop

Теперь, когда контейнер остановлен, вы можете удалить его со своего компьютера, поскольку он вам больше не нужен:

docker rm

Повторите те же шаги для вашего контейнера приложения. Сначала остановите это, затем удалите это.

docker stop  && docker rm

Теперь давайте опубликуем рабочее изображение, чтобы мы могли использовать его с Rancher.

Шаг 3 - Загрузка изображения в Docker Hub

Для развертывания контейнеров с использованием Rancher нам нужен доступ к реестру Docker, где мы можем создать хранилище для хранения нашего образа Docker. Мы будем использовать Docker Hub, который является официальным реестром для Docker. Docker Hub можно использовать бесплатно для публичных репозиториев.

Войдите в Docker Hub под своим именем пользователя и паролем. После входа в систему нажмите кнопку * Создать репозиторий * в правой части экрана. Заполните поля следующим образом:

  • * Имя (обязательно) *: имя вашего хранилища, в данном случае это ++.

  • * Описание *: краткое описание для быстрой идентификации вашего изображения в будущем.

  • * Полное описание *: Вы можете добавить здесь документ уценки в качестве ссылки на ваше изображение, но, поскольку наше приложение довольно простое, вы можете оставить это поле пустым.

  • * Видимость *: Вы можете установить свои изображения как частные, где только у вас будет доступ к ним, или как общедоступные, где каждый может использовать ваше изображение. Для этого урока создайте публичный репозиторий.

После того, как все обязательные поля заполнены, нажмите кнопку * Создать *. Когда процесс будет завершен, вы будете перенаправлены на ваш новый сайт хранилища.

Чтобы загрузить образ Docker, вы должны войти в Docker Hub с помощью команды + docker +. Вернувшись в свой терминал, выполните следующую команду:

docker login

Вам будет предложено ввести имя пользователя и пароль. Как и большинство инструментов CLI, вы не увидите пароль при его вводе.

После входа в систему загрузите изображение в Docker Hub с помощью следующей команды, которая загружает все файлы в хранилище:

docker push /

Нажатие на изображение может занять несколько минут в зависимости от вашего локального подключения к Интернету. Как только изображение будет успешно опубликовано, мы можем настроить наших хостов с помощью Rancher.

Шаг 4 - Создание и маркировка хост-серверов в Rancher

Давайте использовать Rancher для создания всех хостов, которые нам понадобятся для развертывания наших сервисов. Нам понадобятся два для приложения Node.js, одно для сервера MongoDB и одно для балансировщика нагрузки. Мы сделаем все это в пользовательском интерфейсе Rancher, используя API DigitalOcean.

Перейдите к интерфейсу Rancher в своем браузере, посетив + http: // +, и выполните следующие шаги, чтобы создать четыре хоста, которые нам понадобятся:

  1. Перейдите в * Инфраструктура> Хосты * и нажмите кнопку * Добавить хост * в верхней части страницы.

  2. Выберите * DigitalOcean * в качестве хост-провайдера.

  3. Вставьте созданный вами токен приложения DigitalOcean в поле * Access Token * и нажмите * Next: Configure Droplet *.

  4. Назначьте имя. Введите ++, который автоматически сгенерирует имена от + host1 + до + host4 +.

  5. Переместите ползунок * Количество * на * 4 * хосты.

  6. Для * Image * используйте значение по умолчанию * Ubuntu 16.04.1 x64 *.

  7. Для * Size * используйте значение по умолчанию * 1 ГБ ОЗУ, 30 ГБ Диска, 1 vCPU *.

  8. Вы можете оставить поле * SSH User * как * root *.

  9. Нажмите кнопку * Создать * и подождите пару минут, пока серверы будут созданы и добавлены в Rancher.

Как только Rancher завершит создание всех хостов, мы добавим к каждому из них ярлык для классификации их типа, чтобы мы могли организовать, куда мы собираемся поместить каждый из наших компонентов. Маркировка хостов также позволяет нам масштабировать наши серверы в зависимости от их типа. Например, если мы получаем слишком большой спрос на наше приложение, мы можем увеличить количество серверов этого типа, и Rancher автоматически развернет для нас соответствующие контейнеры Docker. Метки, которые мы собираемся создать: + loadbalancer,` + application` и + database.

Давайте создадим первый ярлык + loadbalancer +.

  1. Перейдите в * Инфраструктура> Хосты * и выберите первый хост ++.

  2. Нажмите кнопку * Параметры * (значок с тремя вертикальными точками в верхней части страницы) и выберите параметр * Редактировать *.

  3. Нажмите кнопку * + Add Label * и введите * Key * во вводе * Key *, а затем введите «+ балансировщик нагрузки» во ввод * Value *.

  4. Нажмите кнопку * Сохранить *.

Далее пометьте хосты приложения. Повторите предыдущий процесс со следующими двумя хостами, но на этот раз используйте + application + во входных данных * Value *.

Для последнего хоста повторите процесс еще раз, но используйте + database + во входных данных * Value *.

Все четыре хоста теперь должны иметь метки, поэтому давайте настроим сервисы. Начнем с базы данных.

Шаг 5 - Развертывание сервера MongoDB

Мы будем использовать официальный образ MongoDB Docker на Docker Hub для развертывания нашего сервера базы данных. Контейнер MongoDB также будет иметь контейнер sidekick для хранения всех наших данных. Оба контейнера будут развернуты на хосте, помеченном как «+ база данных».

Чтобы сделать это, выполните следующие действия в пользовательском интерфейсе Rancher:

  1. Выберите меню * Stacks *, выберите параметр * User *, а затем нажмите кнопку * Define a Service *.

  2. На странице * Добавить службу * убедитесь, что для ползунка * Масштаб * установлено значение * Выполнить 1 контейнер *.

  3. Для названия службы используйте ++.

  4. Для изображения введите + mongo: 3 +.

  5. Нажмите кнопку * Add Sidekick Container * в верхней части.

  6. Назовите этот новый контейнер ++. Этот контейнер будет использоваться как том для хранения данных MongoDB.

  7. Поскольку мы собираемся использовать этот контейнер только для данных, используйте изображение + busybox +.

  8. На вкладке * Command * ниже переключите параметр * Autorestart * на * Never (Начать один раз) *, потому что мы будем использовать этот контейнер только для хранения.

  9. Перейдите на вкладку * Volumes * и добавьте новый том, нажав кнопку * Add Volume *. Введите + / data / db + в появившееся текстовое поле. Это путь по умолчанию, где MongoDB хранит данные.

  10. Перейдите на вкладку * Scheduling *, нажмите кнопку * Add Schedule Rule * и введите следующие параметры: + Хост должен иметь метку хоста типа = database +. Используйте выпадающие списки, чтобы помочь вам создать это правило.

  11. Перейдите на вкладку службы * MongoDB *, а затем прокрутите вниз до вкладки * Command * и убедитесь, что для параметра * Autorestart * установлено значение * Always *.

  12. Перейдите на вкладку * Тома * и выберите * Данные * в опции * Тома с *.

  13. Перейдите на вкладку * Scheduling * и добавьте новое правило планирования со следующими параметрами: + Хост должен иметь метку хоста типа = база данных +

  14. Наконец, нажмите кнопку * Создать * внизу и подождите пару минут, пока услуга активирована.

Теперь давайте настроим службу приложения.

Шаг 6 - Развертывание приложения Node.js

Мы будем использовать аналогичный подход для развертывания приложения Node.js, которое мы подготовили ранее. Образ, который мы сохранили в Docker Hub, будет развернут на хостах, помеченных + application or, и будет связан со службой MongoDB для хранения и доступа к данным. Итак, выполните следующие действия в пользовательском интерфейсе Rancher:

  1. Выберите меню * Stacks *, выберите параметр * User *, а затем нажмите кнопку * Add Service * в стеке * Default *.

  2. В разделе * Scale * выберите параметр * Всегда запускать один экземпляр этого контейнера на каждом хосте *.

  3. Имя, которое мы собираемся использовать для этого сервиса, - ++.

  4. Для изображения мы будем использовать тот, который мы развернули в Docker Hub. Введите + / +.

  5. Нажмите кнопку * Service Links *, выберите * Destination Service * и выберите * MongoDB *. Затем выберите * As name * и введите + db +, чтобы наша служба + NodeJS + могла иметь доступ к службе MongoDB, используя это имя.

  6. На вкладке * Command * в нижней части страницы нажмите кнопку * Добавить переменную среды * и добавьте переменную с именем + MONGO_HOST + со значением + db +, которая сопоставляется с именем службы назначения, которое мы использовали в предыдущий шаг. Помните, что наше приложение использует эту переменную среды для поиска сервера базы данных.

  7. Перейдите на вкладку * Планирование *, нажмите кнопку * Добавить правило планирования * и используйте раскрывающиеся списки для создания правила, которое говорит: «+ Хост должен иметь метку хоста типа = application +`.

  8. Наконец, нажмите * Создать * и подождите, пока Rancher настроит службу.

Вскоре вы увидите, что новый сервис + NodeJS + запустил два контейнера. Выберите меню * Infrastructure *, нажмите * Hosts *, и вы увидите, что оба хоста с пометкой «+ application +» теперь работают с этой новой службой. Поскольку их несколько, давайте настроим балансировщик нагрузки, чтобы мы могли эффективно использовать оба этих хоста.

Шаг 7 - Развертывание балансировщика нагрузки

Наш балансировщик нагрузки будет связан с нашими службами + NodeJS + для балансировки рабочей нагрузки между всеми контейнерами на хостах приложения.

  1. Чтобы создать балансировщик нагрузки, выберите меню * Stacks * и выберите параметр * User *. На этот раз нажмите стрелку рядом с кнопкой * Добавить службу * и выберите * Добавить балансировщик нагрузки * из раскрывающегося списка.

  2. Для * Name * введите + LoadBalancer +.

  3. В разделе * Port Rules * установите * Request Host Port * (первое поле Port) на + 80 +, а * Target Port * (второй) на + 3000 +, который является портом нашего Контейнеры + NodeJS + предоставляют.

  4. В опции * Target Service * выберите * NodeJS *, которая является службой, которую мы недавно создали.

  5. На вкладке * Планирование * в нижней части страницы нажмите кнопку * Добавить правило планирования * и создайте правило, которое говорит: "+ Хост должен иметь метку хоста типа = loadbalancer +`.

  6. Наконец, нажмите * Создать * и подождите, пока Rancher активирует сервис.

Каждый раз, когда мы создавали службу, мы использовали созданные нами ярлыки, чтобы определить, как служба будет развернута. Это облегчает управление дополнительными хостами в будущем. Теперь давайте убедимся, что все работает.

Шаг 8 - Тестирование приложения

Чтобы протестировать наше приложение, нам нужно получить адрес хоста балансировщика нагрузки. Выберите сервис * LoadBalancer *, и вы увидите IP-адрес на вкладке * Порты *.

Чтобы проверить, работает ли наше приложение, выполните в терминале следующую команду:

curl

Эта команда отправляет запрос GET на сервер. Вы увидите ответ, который содержит пустой массив (+ [] +), потому что наша база данных пуста.

Выполните следующую команду, чтобы добавить сообщение в базу данных и убедиться, что приложение может сохранять данные:

curl -i -X POST -H "Content-Type:application/json"  -d '{"message":""}'

Эта команда отправляет POST-запрос на сервер с объектом JSON, который содержит ключ + message + со значением. После отправки запроса вы должны получить то же сообщение, которое вы отправили в ответ, вместе с + _id + от MongoDB. Это означает, что соединение с сервером MongoDB работает, и приложение сохранило ваши данные.

Теперь, чтобы дважды проверить правильность работы приложения, снова выполните первую команду, и вы должны получить сообщение, добавленное на предыдущем шаге.

curl

Вывод будет выглядеть так:

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
cache-control: no-cache
content-length: 61
Date: Wed, 05 Jan 2017 20:07:02 GMT
Connection: keep-alive

{"message":"This is a test","_id":"e64d85579aee7d1000b075a2"}

Теперь у вас есть два сервера приложений, база данных и балансировщик нагрузки, настроенные и готовые к использованию. Давайте посмотрим, как масштабировать наши услуги, чтобы обрабатывать больше трафика.

Шаг 9 - Масштабирование серверов Node.js

Когда ваше приложение начинает получать большой спрос, а ваши серверы не могут справиться с нагрузкой, вы можете увеличить количество серверов Node.js, и нагрузка будет автоматически распределена между контейнерами по хостам приложения. Выполните следующие шаги для масштабирования вашего приложения:

  1. Перейдите на страницу * Инфраструктура> Хосты * и нажмите кнопку * Добавить хост *.

  2. Добавьте свой DigitalOcean * Access Token * в одноименное поле.

  3. Используйте + host5 + в качестве имени для первого нового хоста, так как последний созданный нами хост был + host4 +. Поскольку мы собираемся создать два новых хоста, Rancher автоматически назовет следующий хост + host6 +.

  4. Выберите количество, которое вы хотите; в этом случае мы добавим * 2 * больше хостов.

  5. Для * Image * используйте значение по умолчанию * Ubuntu 16.04.1 x64 *.

  6. Для * Size * используйте значение по умолчанию * 1 ГБ ОЗУ, 30 ГБ Диска, 1 vCPU *.

  7. Нажмите кнопку * Добавить метку * и введите * Key + во ввод * Key *, а затем введите + application + `во ввод * Value *.

  8. Нажмите кнопку * Создать * и подождите, пока новые хосты будут активированы и добавлены в Rancher.

После того как новые хосты подключены к сети, поскольку они помечены как хосты приложений, новые экземпляры приложения + NodeJS + будут настроены и развернуты автоматически, а балансировщик нагрузки распределяет рабочую нагрузку между четырьмя контейнерами по четырем хостам.

Заключение

Из этого руководства вы узнали, как подготовить, развернуть и масштабировать функциональное приложение Node.js с поддержкой хранения данных с MongoDB. Как вы можете видеть, с Rancher и его графическим интерфейсом процесс довольно интуитивно понятен, и легко масштабировать законченное приложение. А благодаря функциям планирования Rancher, когда ваше приложение достигнет значительных результатов, вы сможете легко справиться с нагрузкой.

Related