Настройка Apache перед Jboss в качестве балансировщика нагрузки

У меня развернуто веб-приложение в JBoss AS 7.1. После написания промежуточного кода на Java, когда я начал писать пользовательский интерфейс. Я думал об использовании Apache httpd для доступа к статическим ресурсам, таким как css, js и html. Поэтому я установил httpd 2.4.23 и внес изменения в конфигурацию для доступа к каталогу, в котором у меня есть мои статические ресурсы. Затем я хотел использовать httpd в качестве балансировщика нагрузки. Для этого я установил mod_jk 1.2.41. Я создал work.property со следующими деталями:

# for mapping requests 
# The configuration directives are valid 
# for the mod_jk version 1.2.18 and later 
worker.list=loadbalancer,status 
# Define node 
# modify the host as your host IP or DNS name. 
worker.node.port=8009
worker.node.host=127.0.0.1 
#(IP or DNS name of the server on which Jboss is running) 
worker.node.type=ajp13 
worker.node.lbfactor=1 
# Load-balancing behaviour 
worker.loadbalancer.type=lb 
worker.loadbalancer.balance_workers=node 
worker.loadbalancer.sticky_session=1 
worker.status.type=status

Вот мой мод-jk.conf

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkShmFile logs/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMount /sb/* loadbalancer
JkMount /sb.web/* loadbalancer

Я добавил этот файл конфигурации в конец httpd.conf:

Include C:/Apache24/conf/mod-jk.conf

Я проверил свою конфигурацию JBoss, ссылаясь на следующее:

https://docs.jboss.org/author/display/AS71/Using+mod_jk+with+JBoss+AS7#Usingmod_jkwithJBossAS7-Compile%26InstallApacheHttpd

Я не могу получить доступ к моему приложению JBoss, используя URL-адрес httpd. Он дает следующий журнал ошибок:

::1 - - [01/Aug/2016:01:26:58 +0530] "GET /sb/v1/sc/m/2/ HTTP/1.1" 503 299

журналы мод-jk:

 [7132:1928] [info] jk_open_socket::jk_connect.c (817): connect to 127.0.0.1:8009 failed (errno=61)
 [7132:1928] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1068): (node) Failed opening socket to (127.0.0.1:8009) (errno=61)
 [7132:1928] [error] ajp_send_request::jk_ajp_common.c (1728): (node) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=61)
 [7132:1928] [info] ajp_service::jk_ajp_common.c (2773): (node) sending request to tomcat failed (recoverable), because of error during request sending (attempt=2)
 [7132:1928] [error] ajp_service::jk_ajp_common.c (2794): (node) connecting to tomcat failed (rc=-3, errors=4, client_errors=0).
 [7132:1928] [info] service::jk_lb_worker.c (1595): service failed, worker node is in error state
 [7132:1928] [info] service::jk_lb_worker.c (1675): All tomcat instances are busy or in error state
 [7132:1928] [error] service::jk_lb_worker.c (1680): All tomcat instances failed, no more workers left
 [7132:1928] [info] jk_handler::mod_jk.c (2991): Service error=0 for worker=loadbalancer

Я могу получить доступ к приложению JBoss по его собственному URL-адресу и могу получить доступ к статическому контенту с помощью URL-адреса httpd, что означает, что оба этих сервера работают отлично. Пожалуйста помоги.


person Prashant Bhardwaj    schedule 31.07.2016    source источник
comment
Пожалуйста, покажите нам свои файлы журналов, например, mod_jk.log и erro_log.   -  person Ghayel    schedule 01.08.2016
comment
вопрос отредактирован и добавлены журналы. Спасибо   -  person Prashant Bhardwaj    schedule 01.08.2016


Ответы (3)


Убедитесь, что Tomcat запущен и подключается к порту 8009. Убедитесь, что порт 8009 открыт и прослушивает

Извините, что вы работаете с JBoss, но у меня была такая же проблема с Tomcat, поэтому я написал Tomcat вместо JBoss.

person Ghayel    schedule 02.08.2016
comment
Но почему кот. У меня стоит JBoss за Apache https. Почему Tomcat здесь на картинке? - person Prashant Bhardwaj; 03.08.2016

JBoss использует только контейнер tomcat, а журнал mod_jk показывает следующую ошибку:

[7132:1928] [info] service::jk_lb_worker.c (1595): service failed, worker node is in error state
 [7132:1928] [info] service::jk_lb_worker.c (1675): All tomcat instances are busy or in error state
 [7132:1928] [error] service::jk_lb_worker.c (1680): All tomcat instances failed, no more workers left

Таким образом, это просто означает, что либо ваш серверный узел jboss не работает, либо недоступен из apache. Итак, посмотрите, можете ли вы «соединиться по telnet с портом jboss ajp» с компьютера apache. Если ваш экземпляр apache и jboss работает на одном и том же тогда не должно быть проблем с n/w. Поэтому в таком случае ищите в server.log ту же метку времени, то есть метку времени, когда вы получаете сообщение об ошибке «Все экземпляры tomcat заняты или находятся в состоянии ошибки».

person Pnkj    schedule 22.08.2016
comment
Спасибо Pankaj за вашу помощь. На данный момент я начал развертывать свое приложение в самом tomcat и забыл Jboss на несколько дней. Я вернусь и проверю, что вы предлагаете, и отвечу, если не смогу решить проблему. Следует отметить, что оба этих сервера работают на одной машине. - person Prashant Bhardwaj; 23.08.2016

Но почему кот. У меня стоит JBoss за Apache https. Почему Tomcat здесь на картинке?

  • Вы можете использовать любой сервер в качестве внутреннего сервера. Таким образом, не имеет значения, используете ли вы JBoss или tomcat в качестве внутреннего сервера. Как я уже говорил ранее; журнал содержит слово «tomcat» только потому, что Jboss использует контейнер tomcat внутри. Итак, в вашем случае вам просто нужно беспокоиться о том, прослушивает ли порт AJP 8009 или нет, потому что mod_jk использует только протокол AJP. Итак, убедитесь, что вы может подключиться по telnet от вашего Apache к серверному экземпляру Jboss. КАК вы сказали, ваши JBoss и apache работают на одном компьютере, поэтому убедитесь, что вы использовали правильный порт и IP-адрес. Кроме того, посмотрите, используете ли вы какое-либо смещение порта. Если да, измените значение соответственно.

    [7132:1928] [ошибка] service::jk_lb_worker.c (1680): сбой всех экземпляров tomcat, больше не осталось рабочих

person Pnkj    schedule 30.08.2016