Назад | Перейти на главную страницу

Подход к автоматическому масштабированию с Amazon AWS

Я хочу знать о возможных вариантах автоматического масштабирования архитектуры моего веб-приложения. Что у меня в архитекторе, так это веб-приложение (Tomcat), промежуточное ПО (RabbitMQ), база данных (MongoDB), worker (отдельное приложение Java). Прямо сейчас я пытаюсь масштабировать в зависимости от загрузки процессора. Я могу автоматически масштабировать свое веб-приложение и рабочий процесс, как и ожидалось, но у меня возникают проблемы с масштабированием rabbitmq, потому что я не знаю, как передать нагрузку на только что созданный мгновенный сервер rabbtimq.

Например, у меня работает 2 сервера Tomcat. Когда загрузка ЦП моего экземпляра RabbitMQ превышает 80%, AWS добавит новый сервер RabbitMQ. Но мои серверы Tomcat не знают, что добавлен новый экземпляр RabbitMQ, поэтому они продолжают ссылаться только на исходный сервер RabbitMQ, а не на вновь созданный.

Что я мог сделать? Должен ли я автоматически масштабировать всю архитектуру, когда загрузка ЦП Rabbit возрастает? Или мне следует полностью отказаться от идеи автоматического масштабирования RabbitMQ и создать необходимые экземпляры на начальном этапе развертывания? Есть ли другие варианты?

Проблема в том, что ваши серверы Tomcat (и, скорее всего, ваши рабочие) не знают о сервере RabbitMQ. В этом сценарии вам нужно сделать 1 из 2 вещей: (а) Расскажите им о новом сервере или (б) Сделайте так, чтобы им было все равно

Для (а) выше вы можете уведомить каждый сервер Tomcat и каждого рабочего, когда запускается ваш новый сервер RabbitMQ, или поместить информацию в некоторый список, на который ссылаются другие ваши компоненты.

Однако в этом сценарии, если у вас есть очередь на RabbitMQ # 1, что произойдет с этой очередью, если вы запустите RabbitMQ # 2? В этом случае у вас фактически будет 2 очереди, а не одна очередь, охватывающая 2 сервера. Ваше приложение справляется с этим?

Для пункта (b) выше вы можете взглянуть на Кластеризация RabbitMQ . Насколько я понимаю, с кластеризацией RabbitMQ узлы могут приходить и уходить, а клиентам все равно.

RMQ разработал новый бэкэнд для AWS, который можно использовать для кластеризации узлов при автомасштабировании. Tyr использует бэкэнд, просто определив его в конфигурации Rabbitmq, и при перезапуске службы он выберет все узлы в одной группе автоматического масштабирования с помощью тегов и сгруппирует их. Нам нужно убедиться, что мы запускаем экземпляры, используя следующую роль, которая позволяет им описывать экземпляры ec2 и группы автомасштабирования.

{"Версия": "2012-10-17", "Заявление": [{"Эффект": "Разрешить", "Действие": ["автомасштабирование: DescribeAutoScalingInstances", "ec2: DescribeInstances"], "Ресурс": [ "*"]}]} Теперь мы войдем в один экземпляр и настроим два репозитория: один для установки Erlang, а второй - для установки Rabbitmq.

cd /etc/yum.repos.d/ vi rabbit_erlang.repo [rabbitmq_erlang]

name=Repo to install erlang for centos7
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=1

gpgkey = https: //packagecloud.io/rabbitmq/erlang/gpgkey metadata_expire = 300

sslcacert = / etc / pki / tls / certs / ca-bundle.crt

sslverify = 1 vi rabbitmq.repo [rabbitmq_erlang]

name = Repo для установки rabbitmq для centos7 baseurl = https: //dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/ enabled = 1 gpgcheck = 0

Теперь репозиторий настроен, но мы в целом заметили, что установка пакета может конфликтовать с существующими репозиториями epel в Centos. Поэтому рекомендуется отключить существующие репозитории и включить новые.

yum -q makecache -y --disablerepo = 'epel *' --enablerepo = 'rabbitmq *' Как только он будет завершен, мы продолжим и установим пакеты rabbitmq-server, perl-JSON и erlang с помощью команды yum. Убедитесь, что установлена ​​последняя версия

yum install erlang perl-JSON rabbitmq-server -y rpm -qa | grep rabbitmq Теперь у нас есть последний пакет сервера rabbitmq, установленный на экземплярах AWS. Мы продолжим поддерживать файл hosts для каждого узла. Чтобы каждый новый узел в существующей группе автомасштабирования успешно присоединялся к кластеру, нам необходимо найти способ автоматического обнаружения на узлах AWS в группе автомасштабирования.