Статьи

Настройка балансировщика нагрузки WSO2 для автоматического масштабирования


В этом посте предполагается, что читатель знаком с настройкой балансировщика нагрузки WSO2 без автоматического масштабирования и уже настроил систему с балансировщиком нагрузки.
Поэтому этот пост посвящен настройке балансировщика нагрузки с автоматическим масштабированием. Если вы новичок в настройке серверов WSO2, проксируемых с помощью балансировщика нагрузки WSO2, прочитайте статью в блоге «
Как настроить эластичный балансировщик нагрузки WSO2 для настройки балансировщика нагрузки
WSO2
без автомасштабирования».

autoscaler.xml

Конфигурации автомасштабирования определяются из CARBON_HOME / repository / deploy / server / synapse-configs / tasks / autoscaler.xml

1) Определение задачи


В WSO2 Load Balancer используемый алгоритм автоматического масштабирования определяется как Задача.
ServiceRequestsInFlightEC2Autoscaler — это класс по умолчанию, который используется для задачи автоматического масштабирования.

<task xmlns="http://ws.apache.org/ns/synapse"  
     class="org.wso2.carbon.mediator.autoscale.ec2autoscale.ServiceRequestsInFlightEC2Autoscaler"  
      name="autoscaler">  
2) loadbalancer.xml указывает из autoscaler.xml

Это свойство указывает на файл loadbalancer.xml для дальнейшей настройки автоматического масштабирования.

<property name="configuration" value="$system:loadbalancer.xml"/>
3) Интервал

запуска Задача автоматического масштабирования запускается на основе интервала запуска, определенного в autoscaler.xml. Это дается в секундах.

<trigger interval="5"/>

Автомасштаб медиаторов


Посредники autoscaleIn и autoscaleOut являются посредниками, участвующими в автомасштабировании, как мы уже обсуждали выше.
Как и в случае с другими посредниками синапсов, посредники автоматического масштабирования должны быть определены в основной последовательности конфигурации синапсов, если вы собираетесь использовать автоматическое масштабирование. Load Balancer-1.0.x поставляется с этими посредниками, определенными в основной последовательности, которую можно найти в $ CARBON_HOME / repository / deploy / server / synapse-configs / sequence / main.xml. Следовательно, вам нужно будет изменить main.xml,
только если вы настраиваете балансировщик нагрузки
без автомасштабирования.

autoscaleIn посредник определяется как
инпосредник. Он получает конфигурации из loadbalancer.xml, который является единственным файлом, который должен быть настроен для автоматического масштабирования, когда у вас уже есть система, настроенная для балансировки нагрузки.

<autoscaleIn configuration="$system:loadbalancer.xml"/>

Точно так же медиатор autoscaleOut определяется как
медиатор
out .
<autoscaleOut/>

loadbalancer.xml


loadbalancer.xml содержит конфигурации кластера сервисов для соответствующих сервисов для балансировки нагрузки и сам балансировщик нагрузки.
Здесь сервис-осведомленность о балансировщике нагрузки позволяет управлять нагрузкой в ​​нескольких сервисных кластерах. Свойства, указанные в loadbalancer.xml, используются для предоставления необходимых конфигураций и настроек для автоматического масштабирования и балансировки нагрузки. Эти конфигурации также могут быть взяты из системных свойств, как показано ниже.

1) Свойства, общие для всех экземпляров

1.1) ec2AccessKey

Свойство ec2AccessKey используется для предоставления ключа доступа EC2 экземпляра.

<property name="ec2AccessKey" value="${AWS_ACCESS_KEY}"/>

1.2) ec2PrivateKey


Сертификат определяется свойствами ‘ec2PrivateKey’.
<property name="ec2PrivateKey" value="${AWS_PRIVATE_KEY}"/> 

1.3) sshKey


Пара ключей ssh ​​определяется как sshKey.
<property name="sshKey" value="stratos-1.0.0-keypair"/>

1.3) sshKey


Пара ключей ssh ​​определяется как sshKey.
<property name="sshKey" value="stratos-1.0.0-keypair"/>

1.4) instanceMgtEPR


«instanceMgtEPR» — это ссылка на конечную точку веб-службы, которая вызывается для управления экземплярами.
<property name="instanceMgtEPR" value="https://ec2.amazonaws.com/"/>

1.5) disableApiTermination


Свойство disableApiTermination по умолчанию имеет значение true, и рекомендуется оставить его как есть.
Это предотвращает завершение экземпляров с помощью вызовов API AWS.
<property name="disableApiTermination" value="true"/>

1.6) включить мониторинг


Свойство enableMonitoring можно включить, если предпочтительнее отслеживать экземпляры.
<property name="enableMonitoring" value="false"/>

2) Конфигурации для сервисной группы балансировщика нагрузки


Они определены в
<loadBalancer> .. </loadBalancer>

2.1) securityGroups


Сервисная группа, к которой принадлежит балансировщик нагрузки, определяется свойством securityGroups.
Группа безопасности будет отличаться для каждой службы, которая сбалансирована нагрузкой, а также для балансировщиков нагрузки. Autoscaler использует это свойство для идентификации членов одного кластера.
<property name="securityGroups" value="stratos-appserver-lb"/>
2.2) instanceType
«instanceType» определяет
тип экземпляра EC2 экземпляра — будь то m1.small, m1.large или m1.xlarge (очень большой).
<property name="instanceType" value="m1.large"/>

2.3) случаи


Свойство ‘instances’ определяет количество экземпляров балансировщика нагрузки.
Несколько балансировщиков нагрузки используются для предотвращения единой точки отказа — путем предоставления основного и дополнительного балансировщика нагрузки.
<property name="instances" value="1"/>

2.4 )asticIP


Эластичный IP-адрес для балансировщика нагрузки определяется свойством «asticIP ».
Мы сможем получить доступ к услуге, получив доступ к эластичному IP-адресу балансировщика нагрузки. Балансировщик нагрузки выбирает значение эластичного IP из системного свойства ELASTIC_IP.
<property name="elasticIP" value="${ELASTIC_IP}"/>

В публичном облаке эластичные IP-адреса представляют собой общедоступные (IPV4) интернет-адреса, что является дефицитным ресурсом. Следовательно, рекомендуется использовать эластичные IP-адреса только для тех экземпляров балансировщика нагрузки, которые должны быть доступны общественности, и все службы, которые передаются частным образом, должны быть связаны с частными IP-адресами для эффективного использования этого ресурса. Amazon EC2 предоставляет 5 IP-адресов по умолчанию для каждого клиента, что, конечно, можно увеличить, если
завершить запрос на увеличение эластичного предела IP-адресов .

2.5) доступность зоны


Это определяет ,
в котором
наличии зоны
в порождали экземпляры должны быть.
<property name="availabilityZone" value="us-east-1c"/>

2.6) полезная нагрузка


Файл, который определяется «полезной нагрузкой», загружается в порожденные экземпляры. Это часто zip-архив, который извлекает себя в порожденные экземпляры.
<property name="payload" value="/mnt/payload.zip"/>

payload.zip содержит необходимые файлы, такие как открытый и закрытый ключи, сертификаты и параметры запуска (файл с параметрами запуска), чтобы загрузить и запустить экземпляр балансировщика нагрузки в порожденных экземплярах.


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

Пример запуска параметров


Ниже приведен пример параметров запуска, который используется в StratosLive балансировщиком нагрузки службы сервера приложений.
AWS_ACCESS_KEY_ID=XXXXXXXXXXXX,AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
AMI_ID=ami-xxxxxxxxx,ELASTIC_IP=xxx.xx.xxx.xxx,
PRODUCT_MODIFICATIONS_PATH_S3=s3://wso2-stratos-conf-1.5.2/appserver/,
COMMON_MODIFICATIONS_PATH_S3=s3://wso2-stratos-conf-1.5.2/stratos/,
PRODUCT_PATH_S3=s3://wso2-stratos-products-1.5.2,PRODUCT_NAME=wso2stratos-as-1.5.2,
SERVER_NAME=appserver.stratoslive.wso2.com,
HTTP_PORT=9763,HTTPS_PORT=9443,STARTUP_DELAY=0;60

Сейчас мы подробнее рассмотрим эти параметры запуска.

полномочия


Учетные данные — идентификатор ключа доступа и секретный ключ доступа предоставляются для доступа к учетной записи aws.

S3 Расположение


Сервисный почтовый индекс и общие модификации или исправления хранятся в
корзине S3 . Местоположения задаются несколькими свойствами в параметрах запуска, показанных выше.

  • PRODUCT_MODIFICATIONS_PATH_S3 — указывает на конкретные изменения продукта, файлы или исправления загружаются в определенное место.
  • COMMON_MODIFICATIONS_PATH_S3 — указывает на исправления и изменения, общие для всех серверов.
  • PRODUCT_PATH_S3 — указывает место, где доступны соответствующие почтовые индексы Stratos.
  • STARTUP_DELAY — указывается в секундах. Предоставляет некоторое время для запуска службы, которая загружается в новый порожденный экземпляр, так что она присоединяется к кластеру служб и становится доступной в качестве нового экземпляра службы.

Помимо этого, для приложения также указаны PRODUCT_NAME, SERVER_NAME, HTTP_PORT и HTTPS_PORT.

3) Конфигурации для групп приложений


Они определены в
<services> .. </services>

Они также должны быть настроены так, как мы настроили свойства для балансировщиков нагрузки выше.

Мы определяем значения по умолчанию свойств для всех служб в
<defaults> .. </defaults>

Некоторые из этих свойств, такие как
полезная нагрузка, хост и
домен, будут характерны для конкретной группы услуг и должны быть определены отдельно для каждой из служб в
<service> .. </service>

Свойства, применимые ко всем экземплярам

payload, AvailabilityZone, securityGroups и
instanceType — это несколько свойств, которые не относятся к экземплярам приложения. Мы уже обсуждали эти свойства при установке свойств балансировщика нагрузки выше.

Свойства, характерные для экземпляров приложения


Эти свойства относятся к кластерам приложений и не применяются к экземплярам балансировщика нагрузки.
Мы поговорим об этих свойствах сейчас.

3.1) minAppInstances


Свойство minAppInstances показывает минимум экземпляров приложения, которые всегда должны быть запущены в системе.
По умолчанию минимум всех экземпляров приложения установлен равным 1, где мы можем выбрать более высокое значение для сервисов, которые все время пользуются высоким спросом, так что у нас будет несколько экземпляров, все время обслуживающих более высокую нагрузку.
<property name="minAppInstances" value="1"/>

3.2) maxAppInstances


«maxAppInstances» определяет верхний предел экземпляров приложения.
Соответствующий сервис может масштабироваться до тех пор, пока не достигнет количества экземпляров, определенных здесь.
<property name="maxAppInstances" value="5"/>

3.3) queueLengthPerNode


Свойство queueLengthPerNode обеспечивает максимальную длину очереди сообщений на узел.
<property name="queueLengthPerNode" value="400"/>

3.4) roundsToAverage


Свойство roundsToAverage указывает количество попыток, которые необходимо выполнить до масштабирования системы вверх или вниз.
Когда дело доходит до уменьшения, алгоритм гарантирует, что он не завершает экземпляр, который только что был создан. Это потому, что порожденным экземплярам выставляется счет в течение часа. Следовательно, даже если у нас нет большой нагрузки, имеет смысл подождать значительное количество времени (скажем, 58 минут), прежде чем завершать экземпляры.
<property name="roundsToAverage" value="10"/>

3.5) instancesPerScaleUp


Это определяет, сколько экземпляров должно быть увеличено за каждый раз.
По умолчанию для этого параметра установлено значение «1», поэтому каждый раз, когда система масштабируется, создается один экземпляр. Однако это также может быть изменено так, что каждый раз, когда система масштабируется, будет появляться несколько экземпляров. Однако может быть неэффективно устанавливать это значение на более высокое.
<property name="instancesPerScaleUp" value="1"/>

3.6) messageExpiryTime


messageExpiryTime определяет, как долго сообщение может оставаться без истечения срока действия.
<property name="messageExpiryTime" value="60000"/>

Свойства, специфичные для конкретной сервисной группы


Такие свойства, как хосты и домен, являются уникальными для конкретной группы услуг, среди всех групп услуг, для которых балансировка нагрузки выполняется данным балансировщиком нагрузки.
Следует отметить, что мы можем использовать единый балансировщик нагрузки, настроенный на несколько сервисных групп, таких как Сервер приложений, Enterprise Service Bus, Сервер бизнес-процессов и т. Д.

Здесь мы также определяем такие свойства, как payload и AvailabilityZone, если они отличаются от значений по умолчанию, указанных в разделе
<defaults> .. </defaults>

Следовательно, эти свойства должны быть определены в
<service>.. </service>

для каждой из услуг.

3.7) хосты


«hosts» определяет хосты службы, которые должны быть сбалансированы по нагрузке.
Они будут использоваться в качестве точки доступа или URL-адреса для доступа к соответствующей услуге.

Несколько хостов могут быть определены в
<hosts> .. </hosts>

Ниже приведен пример конфигурации хостов для службы сервера приложений.
<hosts>  
   <host>appserver.cloud-test.wso2.com</host>  
   <host>as.cloud-test.wso2.com</host>  
</hosts>

3.8) домен


Подобно тому, как автоскалер EC2 использует группы безопасности для идентификации групп услуг, балансировщик нагрузки (ServiceDynamicLoadBalanceEndpoint) использует «домен» для правильной идентификации кластеров служб с балансировкой нагрузки.
<domain>wso2.manager.domain</domain>

Как только вы настроите балансировщик нагрузки, как описано выше, с экземплярами продукта / услуги, вы получите систему, которая динамически масштабируется.