|
|
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Привет всем. Собственно интересует такой вопрос - как организовать кластеризацию томкатов в связке с nginx , который будет заниматься балансировкой нагрузки? тоесть конфигурация такая: Host1: Tomcat (A) Host2: Tomcat (B) Host3: nginx Кто уже занимался этой проблемой? Поделитесь пожалуйста опытом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 14:46 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Видимо это ответ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 15:26 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
KachalovВидимо это ответ :) Интересная информация. Спасибо! Что оттуда удалось почерпнуть: 1) говорится что mod_jk 2 не является удачным и поэтому объявлен deprecated, модуль mod_jk 1.2 является по прежнему удачным 2) для работы с кластером и балансировкой рекомендуется собрать томкат с apr и проксировать по http 2) связка nginx+apr+tomcat является более удачной чем apache+mod_jk+tomcat собственно говоря теперь вопросы по этим пунктам (выжимке из вышеприведенной ссылке): 1) что такое apr 2) почему всё таки автор говорит что связка nginx+apr+tomcat является более удачной чем apache+mod_jk+tomcat? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 15:47 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
tomcat user1) говорится что mod_jk 2 не является удачным и поэтому объявлен deprecated, модуль mod_jk 1.2 является по прежнему удачным mod_jk 2 начали писать, да забросили. Лично я сталкивался с багами в нем, которые никто фиксить не собирается. Потратил в свое время много часов, прежде чем понял, что ошибка не в моем приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:15 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
tomcat user1) говорится что mod_jk 2 не является удачным и поэтому объявлен deprecated, модуль mod_jk 1.2 является по прежнему удачным - дальше по топику автор отказался от своих слов :) tomcat user2) для работы с кластером и балансировкой рекомендуется собрать томкат с apr и проксировать по http - кластер можно собрать используя собственные возможности Tomcat tomcat user 2) связка nginx+apr+tomcat является более удачной чем apache+mod_jk+tomcat - бездоказательное утверждение :) tomcat user1) что такое apr APR tomcat user 2) почему всё таки автор говорит что связка nginx+apr+tomcat является более удачной чем apache+mod_jk+tomcat? - видимо тестил, но точно не известно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:17 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Вобщем получилось настроить балансировку nginx на два томката на локальном хосте... :) Теперь встал вопрос о репликации сессий между томкатами. Поэтому дополнительные вопросы: 1) какие варианты существуют для хранения разделяемых сессий (БД, общая память, файл, т .п.) 2) какой вариант репликации предпочтительнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:40 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
tomcat userВобщем получилось настроить балансировку nginx на два томката на локальном хосте... :) Теперь встал вопрос о репликации сессий между томкатами. Поэтому дополнительные вопросы: 1) какие варианты существуют для хранения разделяемых сессий (БД, общая память, файл, т .п.) 2) какой вариант репликации предпочтительнее - зря Вы этим занялись не почитав предварительно это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:52 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Kachalov tomcat userВобщем получилось настроить балансировку nginx на два томката на локальном хосте... :) Теперь встал вопрос о репликации сессий между томкатами. Поэтому дополнительные вопросы: 1) какие варианты существуют для хранения разделяемых сессий (БД, общая память, файл, т .п.) 2) какой вариант репликации предпочтительнее - зря Вы этим занялись не почитав предварительно это Вы правы. Спасибо, уже читаю. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:54 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Kachalov - кластер можно собрать используя собственные возможности Tomcat Выполнил примеры из руководства, пока что не получилось. Да оно и понятно - информации много и она новая. Вот и запутался. Поэтому вопросы: 1) При настройке кластера, в файле server.xml есть тег по-умолчанию: Код: plaintext 1. 2. 3. А также есть закомментированный тег: Код: plaintext 1. 2. 3. В примерах сказано - что нужно использовать в теге engine атрибут jvmRoute="xxxxx" Вопросы: 1) Этот атрибут нужно вписывать в тег, который используется по-умолчанию - <Engine name="Catalina" либо раскомментировать тег <Engine name="Standalone" ? 2) Что значит значение аттрибута jvmRoute="jvm1" ? На что это значение влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 18:03 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Вот еще дополнительный вопрос - если я использую для балансировки nginx, то соответственно может и не надо тогда использовать атрибут jvmRoute? если судить по комментарию: You should set jvmRoute to support load-balancing via AJP ie ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 18:11 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
tomcat user В примерах сказано - что нужно использовать в теге engine атрибут jvmRoute="xxxxx" Вопросы: 1) Этот атрибут нужно вписывать в тег, который используется по-умолчанию - <Engine name="Catalina" либо раскомментировать тег <Engine name="Standalone" ? - значение name - произвольное уникальное имя, т. е. можно Catalina или Standalone tomcat user 2) Что значит значение аттрибута jvmRoute="jvm1" ? На что это значение влияет? - произвольное уникальное имя необходимое для кластеризации сессий (разное для разных экземпляров Tomcat) тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 18:25 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
tomcat userВот еще дополнительный вопрос - если я использую для балансировки nginx, то - то опять встает вопрос о кластеризации сессии :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 18:27 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
OFF: хех... наткнулся в гугле случайно, ища инфу по сабжу: http://bash.org.ru/quote/275840 :) PS: а кому нибудь вообще удавалось настроить эту репликацию? Почему то я делаю всё как сказано в руководстве - но происходит следующее: заходим на нод1. он создает сессию... при следующем запросе если попадаем на нод2, то сессия затирается новой. Вот еще ресурс, которым я пользовался: http://voituk.kiev.ua/2007/06/25/tomcat-cluster/ но примеры также не работают.. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 23:48 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Вобщем подведу итог моих мучений по организации кластера с разделяемой сессией. Что имеем: 1. Узлы кластера путьописание имя узла/opt/java/cluster/t1Tomcat 5.5node01/opt/java/cluster/t2Tomcat 5.5node02 2. Общая конфигурация узла кластера $TOMCAT_HOME/config/server.xml Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 3. Аттрибуты тегов в файле $TOMCAT_HOME/config/server.xml для каждого из узлов аттрибут Node01Node02server port80059005HTTP connector port80809080AJP connector port80099009mcastAddr228.0.0.4228.0.0.4mcastPort4556445564tcpListenAddr127.0.0.1127.0.0.1tcpListenPort40004001jvmRoutenode01node02 4. Проверка Теперь самое главное - проверяю работу кластера: 4.1. Запускаю оба узла (catalina.sh run) 4.2. Из браузера набираю адрес http://localhost:8080/test/test.jsp при этом создается HTTP-сессия 4.3. Из браузера набираю адрес http://localhost:9080/test/test.jsp при этом сессия создается для этого узла, а по идее она должна браться из узла 1? Вопрос - почему не работает репликация сессий? Может что нибудь я пропустил? Все вроде делал как сказано в руководстве: Clustering and Load Balancing in Tomcat 5, Part 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 18:20 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Не увидел в Вашей конфигурации настроек: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 19:00 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
KachalovНе увидел в Вашей конфигурации настроек: Код: plaintext 1. 2. Добавил. Все равно не помогло. В консоли при запуске томката написано: Using CATALINA_BASE: /opt/java/cluster/t2 Using CATALINA_HOME: /opt/java/cluster/t2 Using CATALINA_TMPDIR: /opt/java/cluster/t2/temp Using JRE_HOME: /opt/java/jdk1.6.0_02 Jan 12, 2008 7:00:02 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /opt/java/jdk1.6.0_02/jre/lib/i386/client:/opt/java/jdk1.6.0_02/jre/lib/i386:/opt/java/jdk1.6.0_02/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib Jan 12, 2008 7:00:02 PM org.apache.coyote.http11.Http11BaseProtocol init INFO: Initializing Coyote HTTP/1.1 on http-9080 Jan 12, 2008 7:00:02 PM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 968 ms Jan 12, 2008 7:00:03 PM org.apache.catalina.core.StandardService start INFO: Starting service Catalina Jan 12, 2008 7:00:03 PM org.apache.catalina.core.StandardEngine start INFO: Starting Servlet Engine: Apache Tomcat/5.5.17 Jan 12, 2008 7:00:03 PM org.apache.catalina.core.StandardHost start INFO: XML validation disabled Jan 12, 2008 7:00:03 PM org.apache.catalina.cluster.tcp.SimpleTcpCluster start INFO: Cluster is about to start Jan 12, 2008 7:00:03 PM org.apache.catalina.cluster.tcp.ReplicationTransmitter start INFO: Start ClusterSender at cluster Catalina:type=Cluster,host=localhost with name Catalina:type=ClusterSender,host=localhost Jan 12, 2008 7:00:03 PM org.apache.catalina.cluster.mcast.McastService start INFO: Sleeping for 2000 milliseconds to establish cluster membership Jan 12, 2008 7:00:05 PM org.apache.catalina.cluster.mcast.McastService registerMBean INFO: membership mbean registered (Catalina:type=ClusterMembership,host=localhost) Jan 12, 2008 7:00:05 PM org.apache.catalina.cluster.deploy.FarmWarDeployer start INFO: Cluster FarmWarDeployer started. Jan 12, 2008 7:00:05 PM org.apache.catalina.cluster.session.DeltaManager start INFO: Register manager /test to cluster element Host with name localhost Jan 12, 2008 7:00:05 PM org.apache.catalina.cluster.session.DeltaManager start INFO: Starting clustering manager at /test Jan 12, 2008 7:00:05 PM org.apache.catalina.cluster.session.DeltaManager getAllClusterSessions INFO: Manager [/test]: skipping state transfer. No members active in cluster group. Jan 12, 2008 7:00:05 PM org.apache.catalina.cluster.session.JvmRouteBinderValve start INFO: JvmRouteBinderValve started Jan 12, 2008 7:00:06 PM org.apache.coyote.http11.Http11BaseProtocol start INFO: Starting Coyote HTTP/1.1 on http-9080 Jan 12, 2008 7:00:06 PM org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:9009 Jan 12, 2008 7:00:06 PM org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/24 config=null Jan 12, 2008 7:00:06 PM org.apache.catalina.storeconfig.StoreLoader load INFO: Find registry server-registry.xml at classpath resource Jan 12, 2008 7:00:06 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 3642 ms кроме того в браузере создаются куки с суффиксом .node01 или .node02 но они перезатирают друг друга как бы... кстати еще вопрос - я запускаю кластер на локальном хосте (тоесть вертикальный), нужно ли в конфигурации для мультикаст-рассылки делать одинаковые порты mcascPort=45564 ? Просто в руководстве как бы используются одинаковые, но не будет ли конфликта в данном случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 19:20 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
unicornmirage 4.2. Из браузера набираю адрес http://localhost:8080/test/test.jsp при этом создается HTTP-сессия 4.3. Из браузера набираю адрес http://localhost:9080/test/test.jsp при этом сессия создается для этого узла, а по идее она должна браться из узла 1? - в данном случае идентификатор сессии передается браузером в виде Cookie и на случай 4.3 cookie созданные для 4.2 браузер отправлять не будет, так как с точки зрения браузера это другой сервер. Попробуйте использовать URL содержащий идентификатор сессии созданной в 4.2, для этого укажите URL вида: http://localhost:9080/test/test.jsp;jsessionid=идентификатор_созданный_для_4.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 19:24 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
unicornmirageя запускаю кластер на локальном хосте (тоесть вертикальный), нужно ли в конфигурации для мультикаст-рассылки делать одинаковые порты mcascPort=45564? Просто в руководстве как бы используются одинаковые, но не будет ли конфликта в данном случае? из server.xml: mcastAddr = the multicast address, has to be the same for all the nodes mcastPort = the multicast port, has to be the same for all the nodes ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 19:39 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Kachalov unicornmirage 4.2. Из браузера набираю адрес http://localhost:8080/test/test.jsp при этом создается HTTP-сессия 4.3. Из браузера набираю адрес http://localhost:9080/test/test.jsp при этом сессия создается для этого узла, а по идее она должна браться из узла 1? - в данном случае идентификатор сессии передается браузером в виде Cookie и на случай 4.3 cookie созданные для 4.2 браузер отправлять не будет, так как с точки зрения браузера это другой сервер. Попробуйте использовать URL содержащий идентификатор сессии созданной в 4.2, для этого укажите URL вида: http://localhost:9080/test/test.jsp;jsessionid=идентификатор_созданный_для_4.2 Ок, раз браузер считает что это другой сервер, значит никак нельзя проверить репликацию сессий на кластере без балансировщика? Теперь я включаю балансировщик нагрузки nginx , который перенаправляет на один из адресов: 127.0.0.1:8080 127.0.0.1:9080 тоесть в браузере я ввожу такой адрес: http://localhost/test/test.jsp В этом случае также не работает репликация сессий.. На томкате /opt/java/cluster/t1/webapps/test есть test.jsp , которая записывает в сессию атрибут "alpha" : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. На томкате /opt/java/cluster/t2/webapps/test есть аналогичная test.jsp , которая записывает в сессию атрибут "beta" Далее открываю браузер и постоянно отправляю запросы на адрес http://localhost/test/test.jsp . В браузере поочередно выводится следующее: Node: /opt/java/cluster/t1/webapps/test/. No session. Setting sessionObj to "alpha" ... Node: /opt/java/cluster/t2/webapps/test/. No session. Setting sessionObj to "beta" ... Node: /opt/java/cluster/t1/webapps/test/. No session. Setting sessionObj to "alpha" Node: /opt/java/cluster/t2/webapps/test/. No session. Setting sessionObj to "beta" ... а по идее должно быть так: первый задействованный нод создает сессию, например node01 и записывает атрибут aplha. Тогда после попадания на узел node02 должно было бы вывестись: Node: /opt/java/cluster/t1/webapps/test/. sessionObj alpha Но не выводится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 20:19 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
unicornmirageОк, раз браузер считает что это другой сервер, значит никак нельзя проверить репликацию сессий на кластере без балансировщика? - почему нельзя? я приводил пример как это сделать - сессии могут работать и без кук, при использовании в URL jsessionid. Вам достаточно получить с первого узла id сессии (просто распечатайте его на странице) и добавить его в URL при обращении ко второму узлу (можно на странице сделать абсолютную ссылку на второй узел с использованием метода encodeURL (только куки в браузере отключите) или воспользоваться методом getId сессии) unicornmirageТеперь я включаю балансировщик нагрузки nginx, который перенаправляет на один из адресов - теоретически репликация сессии должна происходить и без балансировщика ... но уж если использовать балансировщик я бы сначала поэкспериментировал с Apache+mod_jk+Tomcat, а потом уже с nginx, все таки первая связка лучше описана ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 21:42 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
возникло еще одно предположение - а вдруг кластер вообще не собрался в моем случае - томкаты работают каждый сам по себе и не знают друг о друге, т.к. широковещательная рассылка между ними не работает. Я же запускаю их на одном локальном компе, и, возможно, что нужно сделать виртуальные хосты разные для каждого нода - свой? Сейчас атрибут тега <host> везде стоит localhost . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2008, 00:56 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
Вобщем вроде бы всё получилось! Работает балансировка nginx + tomcat nodes на локальном хосте с репликацией сессий... Ув. Kachalov, большое спасибо за консультации, они весьма помогли в решении проблемы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2008, 02:27 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
непонятная репликация сессий теперь происходит. Предположим, я запускаю узлы кластера в такой последовательности: node01, node02, node03... Тоесть первым был запущен node01. Теперь он регистрирует узлы кластера.. О чем можно убедиться, глядя на логи: Jan 14, 2008 9:45:47 AM org.apache.catalina.startup.Catalina start INFO: Server startup in 85237 ms Jan 14, 2008 9:45:54 AM org.apache.catalina.cluster.tcp.SimpleTcpCluster memberDisappeared INFO: Received member disappeared:org.apache.catalina.cluster.mcast.McastMember[tcp://127.0.0.1:4002,catalina,127.0.0.1,4002, alive=9692] Jan 14, 2008 9:45:54 AM org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded INFO: Replication member added:org.apache.catalina.cluster.mcast.McastMember[tcp://127.0.0.1:4002,catalina,127.0.0.1,4002, alive=6] Jan 14, 2008 9:46:18 AM org.apache.catalina.cluster.tcp.SimpleTcpCluster memberDisappeared INFO: Received member disappeared:org.apache.catalina.cluster.mcast.McastMember[tcp://127.0.0.1:4002,catalina,127.0.0.1,4002, alive=9653] Jan 14, 2008 9:46:18 AM org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded INFO: Replication member added:org.apache.catalina.cluster.mcast.McastMember[tcp://127.0.0.1:4002,catalina,127.0.0.1,4002, alive=79] Так вот, я написал простое web-приложение, просто аутентифицирующее пользователя и сообщающее об этом. И проверяю его на кластере. Если мы заходим вначале на node01, тоесть набираем в строке браузера http://localhost:8080/test/test.jsp , и аутентифицируемся на этом узле, а затем просто переходим на другой узел по адресу http://localhost:8081/test/test.jsp то там я тоже аутентифицирован! тоесть репликация сработала! Но, если же сперва проводить аутентификацию на node01 то с него не происходит репликация на node01. Почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 09:53 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
а вот что пишет в логах узел node01: Jan 14, 2008 9:57:55 AM org.apache.catalina.cluster.mcast.McastServiceImpl$RecoveryThread run INFO: Cluster membership, running recovery thread, multicasting is not functional. Тоесть его ктото видит (узел 01) а он не видит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 09:59 |
|
||
|
Tomcat clustering + nginx
|
|||
|---|---|---|---|
|
#18+
вобщем все вопросы снимаются... тему можно закрывать. если кому интересно почему не работала правильно репликация - потому что надо было прописать в таблице роутинга правило для мультикаста на локальном хосте для адреса 228.0.0.4 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 15:14 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=35056867&tid=2127362]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 553ms |

| 0 / 0 |
