Решения для балансировки нагрузки Tomcat - PullRequest
7 голосов
/ 10 марта 2012

Я ищу хороший балансировщик нагрузки для использования с Tomcat.Наше приложение ничего не хранит в контексте сеанса, поэтому не важно перенаправлять на один и тот же сервер для одного и того же пользователя.Я просто хотел бы что-то, что может ставить в очередь запросы в стиле циклического перебора или на основе индивидуальной нагрузки каждого сервера.Я также хотел бы иметь возможность добавлять серверы приложений к тем, которые доступны для обработки запросов, без перезапуска балансировщика нагрузки.Мы запускаем приложение на Linux, если это имеет значение.

1 Ответ

6 голосов
/ 13 марта 2012

Если все, что вам нужно, это программный балансировщик нагрузки в Linux, используйте Apache Webserver2, Mod-Jk и Tomcat Clustering:

На вашем веб-сервере:

1) Установите apache2 и modjk:

sudo apt-get install apache2 libapache2-mod-jk
sudo a2enmod jk

2) Создайте файл «works.properties», доступный для вашего apache2. В некоторых случаях он автоматически создается в вашем каталоге / etc / apache2. Этот файл содержит конфигурацию lb, имена узлов, ips и порты ваших серверов Tomcat, т. Е .:

worker.list=balancer,lbstats

#node1
worker.node1.type=ajp13
worker.node1.host=NODE-IP
worker.node1.port=NODE-AJP-PORT
worker.node1.lbfactor=10

#more nodes here ... (change name in between)

#lb config
worker.balancer.type=lb
#turn off sticky session
worker.balancer.sticky_session=0

#add all defined node names to this list:
worker.balancer.balance_workers=node1

#lb status information (optional)
worker.lbstats.type=status

3) Создайте раздел Mod-Jk в вашем конфигурационном файле apache2, если он не был создан автоматически.

JkWorkersFile   /etc/apache2/workers.properties
JkLogFile       /var/log/apache2/mod_jk.log
JkShmFile       /tmp/jk-runtime-status
JkLogLevel      info

4) Смонтируйте ваше приложение к балансировщику нагрузки (файл конфигурации apache2):

JkMount /MyApp       balancer
JkMount /MyApp/*     balancer

JkMount /modjkstatus lbstats

На ваших серверах Tomcat:

5) Установите tomcat, используя пакет tarball (лучше, чем apt verison). Изменить server.xml:

  1. отключить http-коннекторы.
  2. включить соединитель AJP / 1.3 и установить порт, который вы определили в worker.properties для этого узла.
  3. добавить jvmRoute с правильным именем узла к элементу «Engine»:

    <Engine jvmRoute="node1" ...
    
  4. добавить элемент "Кластер" для простейшей настройки

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
    

6) Разверните ваше приложение на всех кошках и добавьте распространяемый элемент в ваш web.xml.

<distributable/>

7) Убедитесь, что веб-сервер может получить доступ к портам ajp на ваших серверах Tomcat, и никто другой не может.

8) Запускайте веб-сервер и котов один за другим и проверяйте журналы (также /var/log/apache2/mod_jk.log).

9) Доступ к вашему приложению: http://mywebserver.com/MyApp

10) Проверить (и запретить доступ) страницу состояния lb http://mywebserver.com/modjkstatus

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