Балансировка нагрузки Apache mod_jk не работает, но работает аварийное переключение

Я пытаюсь настроить решение для балансировки нагрузки Apache с помощью mod_jk. Кластеризация работает, но не балансировка нагрузки.

У меня на ноутбуке работает сервер Apache httpd 2.2. У меня две гостевые операционные системы виртуальной машины VMWare. Все три окна. На машинах VMware размещен сервер Apache Tomcat, обслуживающий веб-приложение. Я настроил файл httpd.conf с mod_jk и файл свойств рабочих с информацией о работниках. Я могу получить доступ к своему веб-приложению, используя URL-адрес: http://localhost/Web-application. Если я остановлю один сервер, приложение будет обслуживаться с другого. Однако не одновременно. Некоторые выдержки приведены ниже:

файл httpd.conf:

LoadModule jk_module modules/mod_jk.so 
JkWorkersFile conf/workers.properties
JkLogFile "logs/mod_jk.log" 
JkLogLevel info
JkMount /MovieBooking loadbalancer
JkMount /MovieBooking/* loadbalancer

Файл worker.properties

workers.tomcat_home=/worker1
workers.java_home=$JAVA_HOME
worker.list=loadbalancer,jkstatus,worker1,worker2

 #Declare Tomcat server workers 1 through n

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker2
worker.loadbalancer.sticky_session=1

worker.worker1.type=ajp13
worker.worker1.host=192.168.200.244
worker.worker1.port=8109
worker.worker1.lbfactor=1

worker.worker2.type=ajp13
worker.worker2.port=8109
worker.worker2.host=192.168.200.243
worker.worker2.lbfactor=1

worker.jkstatus.type=status

Я также установил jvmroute в файлах server.xml на этих серверах:

Server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">         
     <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

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


person mumshad    schedule 30.08.2012    source источник


Ответы (2)


То, как вы настроили балансировку нагрузки (для меня это нормально) с закрепленными сеансами, означает, что после создания сеанса последующие запросы будут направлены на тот же экземпляр Tomcat. Вы можете узнать это, посмотрев на значения файлов cookie сеанса, к которым следует добавить .worker1 или .worker2. Этот постфикс используется Apache HTTPD, чтобы решить, какому экземпляру Tomcat отправлять входящий запрос.

Если файл cookie сеанса отсутствует, запросы должны распределяться между доступными Tomcats циклически. Таким образом, чтобы протестировать балансировку нагрузки, вам обычно потребуется несколько экземпляров браузера, содержащих разные файлы cookie сеанса. Или попробуйте настроить sticky_session=false для просмотра всех запросов, пересылаемых в циклическом стиле.

person f_puras    schedule 30.08.2012

из apache:

  • Все ваши атрибуты сеанса должны реализовывать java.io.Serializable
  • Раскомментируйте элемент Cluster в server.xml
  • Если вы определили настраиваемые клапаны кластера, убедитесь, что у вас есть ReplicationValve - также оштрафованный под элементом Cluster в server.xml.
  • Если ваши экземпляры Tomcat работают на одном компьютере, убедитесь, что атрибут tcpListenPort уникален для каждого экземпляра, в большинстве случаев Tomcat достаточно умен, чтобы решить эту проблему самостоятельно, автоматически определяя доступные порты в диапазоне 4000-4100 Убедитесь, что ваш web. xml имеет элемент
  • Если вы используете mod_jk, убедитесь, что на вашем движке установлен атрибут jvmRoute и что значение атрибута jvmRoute соответствует вашему имени воркера в worker.properties
  • Убедитесь, что все узлы имеют одинаковое время и синхронизируются со службой NTP! Убедитесь, что ваш балансировщик нагрузки настроен для режима закрепленного сеанса.

сначала я попробую убедиться, что jvmRoute в порядке

Session stickyness is not implemented using a tracking table for sessions. Instead each Tomcat instance gets an individual name and adds its name at the end of the session id. When the load balancer sees a session id, it finds the name of the Tomcat instance and sends the request via the correct member worker. For this to work you must set the name of the Tomcat instances as the value of the jvmRoute attribute in the Engine element of each Tomcat's server.xml. The name of the Tomcat needs to be equal to the name of the corresponding load balancer member. In the above example, Tomcat on host "myhost1" needs jvmRoute="worker1", Tomcat on host "myhost2" needs jvmRoute="worker2".

ваш Tomcat 2 jvmRoute должен быть "worker2"

person oak    schedule 20.01.2014