Jetty On Yarn
В условиях, когда крупные компании повсеместно практикуют эластичное развёртывание, автор, изучив некоторые функции Mesos и Yarn, вдохновился принципами работы Yarn и создал этот проект. Его цель — запустить WebServer на Hadoop Yarn для динамического развёртывания: одна команда позволяет массово развернуть или массово закрыть развёртывание, обеспечивая динамическое управление веб-средой выполнения.
Сценарий использования: в некоторых веб-проектах с недостаточным пониманием системной нагрузки или в бизнес-среде с эффектом толпы посетителей. Например, при небольшом количестве времени наблюдается большой объём посещений, которые имеют всплесковый характер. Конечно, если рассматривать Hadoop Yarn как облачную операционную систему, можно развернуть любое веб-приложение, что позволит сократить вложения в оборудование.
Используйте jetty-on-yarn help
, чтобы просмотреть список поддерживаемых команд.
Если в командной строке возникает ошибка, добавьте «-s» для вывода полного стека исключений.
Запустите или остановите Jetty-Yarn.
usage: yarn
jetty on yarn, start/shutdown app master
-appid,--appid <arg> App Id, JettyOnYarn ApplicationMaster ID
-m,--memory ApplicationMaster Memory, default 512M // данная память WebInstance, по умолчанию 512
-n,--appname App Name, JettyOnYarn // Jetty-On-Yarn регистрирует имя приложения в Yarn, по умолчанию
-q,--queue Hadoop Yarn Queue, default // очередь задач Jetty-On-Yarn в Yarn, по умолчанию default
-s print exception
-shutdown,--shutdown App Name, shutdown JettyOnYarn // используется вместе с appid для остановки JettyAppMaster, остановка AppMaster останавливает все запущенные им Jetty Instance.
-z,--zip Jetty Zip Location, default /lib/jetty/jetty-{version}.zip
Для запуска Jetty-On-Yarn введите «Y», когда будет предложено ввести «./jetty-on-yarn yarn».
Эластичное развёртывание для увеличения количества экземпляров веб-выполнения.
usage: yarn-add
jetty on yarn, add jetty instance
-appid,--appid <arg> App Id, JettyOnYarn ApplicationMaster ID. // обязательный параметр
-c,--core Jetty Instance Cores, default 1
-m,--memory Jetty Instance Memory, default 512M
-s print exception
-wars,--wars <arg> JavaEE War Location, HDFS direction. // обязательный параметр
-x,--xml Jetty XML, default conf/jetty.xml
-z,--zip Jetty Zip Location, default /lib/jetty/jetty-{version}.zip
Перечислите информацию о запущенных веб-серверах на указанном приложении yarn.
usage: yarn-list
jetty on yarn, list jetty instance
-appid,--appid <arg> App Id, JettyOnYarn ApplicationMaster ID
-s print exception
Остановите запущенный экземпляр Jetty-Instance (экземпляр Jetty-Instance — это работающий экземпляр Jetty WebServer, чем больше экземпляров запущено, тем выше теоретическая параллельная обработка).
usage: yarn-stop
jetty on yarn, stop jetty instance
-a,--all Stop All Jetty Instance, --all
-appid,--appid <arg> App Id, JettyOnYarn ApplicationMaster ID
-c,--containerid <arg> Jetty Container Id, JettyOnYarn yarn-list
-n,--nodeid <arg> Jetty Instance NodeId, JettyOnYarn yarn-stop
-s print exception
Конфигурация:
jetty.yarn.properties
yarn.appmaster.avro.port=40880 # порт, открытый JettyAppMaster для выполнения команд клиентом
master.heartbeat.interval.millis=10000 # частота, с которой JettyAppMaster сообщает Yarn о прогрессе, сердцебиение
# уровень приоритета контейнера по умолчанию для мастера
yarn.master.container.priority=0
# видимость zip-файла Jetty
jetty.zip.visibility=PUBLIC
jetty.yarn.app.master.opts=-server # параметры оптимизации запуска AppMaster
jetty.yarn.instance.jvm.opts=-server # параметры оптимизации запуска экземпляра Jetty
# издатель по умолчанию — LoggerJettyPublisher, вы можете зарегистрировать информацию о запуске в ZooKeeper, Socket, базе данных и других способах
jetty.yarn.publisher.class=com.ivyft.jetty.yarn.ZookeeperJettyPublisher
jetty.yarn.zookeeper.root=/jetty
jetty.yarn.publisher.zookeeper.server=192.168.102.10:2181
jetty.yarn.publisher.zookeeper.connectionTimeout=60000
jetty.yarn.publisher.zookeeper.sessionTimeout=6000 ### О проблеме с Context Path веб-сервера
Для развёртывания одного экземпляра Web, нужен только один war-пакет. Можно развернуть большинство стандартных war-пакетов JavaEE. Например, для развёртывания одной копии достаточно выполнить команду:
./jetty-on-yarn yarn-add -appid application_1449726747657_0010 -wars /lib/jetty/hellp.war
Если нет XML-файла описания контекста Jetty, то ContextPath этого веб-сервера будет автоматически сопоставлен с адресом: http://host:port/hellp.war. Это происходит потому, что Jetty автоматически разворачивает war-пакеты без XML-описания. Конечно, Jetty также поддерживает XML-описание.
JettyOnYarn в нерабочее время автоматически сканирует каталог /lib/jetty/hellp.war
на наличие одноимённого XML-файла /lib/jetty/hellp.xml
. Если такой файл существует, то используется его описание для развёртывания.
Например, конфигурация <SystemProperty name="hostContext" default="/solr"/>
позволяет указать любой путь или "/". Также обратите внимание на /conf/webdefault.xml
.
public void init(JettyConfiguration jettyConf);
public void publish(String host, int port);
}```
#### ZookeeperJettyPublisher
```@Override
public void init(JettyConfiguration jettyConf) {
String zookeeperServer = jettyConf.getString("jetty.yarn.publisher.zookeeper.server");
LOG.info("connect to " + zookeeperServer);
zkClient = new ZkClient(zookeeperServer,
jettyConf.getInt("jetty.yarn.publisher.zookeeper.sessionTimeout", 6000),
jettyConf.getInt("jetty.yarn.publisher.zookeeper.connectionTimeout", 60000));
rootPath = jettyConf.getProperty("jetty.yarn.zookeeper.root", "/jetty");
LOG.info("register to zookeeper path " + rootPath);
if(!zkClient.exists(rootPath)) {
zkClient.createPersistent(rootPath);
}
}
@Override
public void publish(String host, int port) {
String path = rootPath + "/" + host + ":" + port;
LOG.info("jetty server published zookeeper at: " + path);
zkClient.createEphemeral(path); //создание временного узла ZooKeeper, который исчезает после завершения сеанса.
}```
Каждый веб-экземпляр, запущенный на YARN, регистрирует свой серверный хост и порт в определённом месте. Существует несколько способов регистрации. Один из них — регистрация в ZooKeeper.
Чтобы запустить несколько серверов Jetty подряд, можно использовать следующую команду:
```./jetty-on-yarn yarn-add -appid application_1449726747657_0010 -wars /lib/jetty/hellp.war```
Информация о регистрации в ZooKeeper выглядит следующим образом:
```[zk: localhost:2181(CONNECTED) 2] ls /jetty
[nowledge data-n9:8080, nowledge data-n9:8082]```
Это приводит к идее создания прокси-серверов, таких как Nginx и Apache, которые поддерживают ZooKeeper. Например, Nginx:
```upstream 192.168.1.105 {
#weight 参数表示权值,权值越高被分配到的几率越大
server 192.168.1.105:8090 max_fails=2 fail_timeout=60s weight=2;
server 192.168.1.105:8080 max_fails=2 fail_timeout=60s weight=1;
}```
Nginx в настоящее время поддерживает только статические прокси, которые записываются в конфигурационный файл. Если бы он мог поддерживать динамические прокси, это значительно улучшило бы гибкость развёртывания веб-серверов.
На GitHub уже есть примеры реализации поддержки Nignx ZooKeeper, но неизвестно, насколько они полезны.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )