Документ создан: 02.11.2017

Настройка многоэкземплярной конфигурации.

Tomcat

Сначала немного теории:

  • CATALINA_HOME — общий каталог для всех экземпляров tomcat, в котором присутствуют следующие каталоги:
    • bin — содержит скипты запуска и останова экземпляров. Если в CATALINA_BASE/bin отсутствуют файлы setenv.sh (*nix), setenv.bat (Windows), tomcat-juli.jar, то они будут загужены отсюда.
    • lib — содержит общие для всех экземпляров библиотеки.
    • endorsed — содержит "нестандартные" библиотеки для всех экземпляров. По-умолчанию отсутсвует.
    • webapps — содержит manager, который является общим для всех экземпляров. Для настройки конкретного экземпляра необходимо в CATALINA_BASE/conf/Catalina/localhost/ поместить файл manager.xml примерно следующего содержания:
      <?xml version="1.0" encoding="UTF-8"?>
      <Context docBase="${catalina.home}/webapps/manager" antiResourceLocking="false" privileged="true" >
        <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
      </Context>

      Доступ к данному приложению разрешён только с локальных адресов, по сети доступ получить не удастся.

  • CATALINA_BASE — каталог конкретного экземпляра, в котором присутствуют следующие каталоги с файлами, относящимися к конкретному экземпляру:
    • bin — содержит только файлы setenv.sh (*nix), setenv.bat (Windows), tomcat-juli.jar.
    • conf — содержит конфигурационные файлы экземпляра.
    • lib — содержит библиотеки, которые необходимы только этому экземпляру.
    • logs — логи экземпляра.
    • webapps — приложения экземпляра.
    • work — временный рабочий каталог приложений экземпляра.
    • temp — временный каталог JVM.

Теперь практика:

  • Файловая структура выглядит примерно так:
    /opt/tomcat_home
    /opt/tomcat_server1
    /opt/tomcat_server2
  • Стартовый скрипт (например, /etc/init.d/tomcat_multi) выгладит так:
    #!/bin/bash
    # description: Tomcat Start Stop Restart
    # processname: tomcat
    # chkconfig: 234 80 80
    export PATH
    CATALINA_USER=tomcat
    CATALINA_PREFIX=/opt/tomcat_
    CATALINA_HOME=${CATALINA_PREFIX}home
    if [ ! -z $2 ]
    then
            CATALINA_BASES=$2
    else
            CATALINA_BASES='server1 server2'
    fi
     
    case $1 in
            start)
                    for i in ${CATALINA_BASES}
                    do
                            export CATALINA_BASE=${CATALINA_PREFIX}${i}
                            /bin/su ${CATALINA_USER} ${CATALINA_HOME}/bin/startup.sh
                    done
            ;;
            stop)
                    for i in ${CATALINA_BASES}
                    do
                            export CATALINA_BASE=${CATALINA_PREFIX}${i}
                            /bin/su ${CATALINA_USER} ${CATALINA_HOME}/bin/shutdown.sh
                    done
            ;;
            restart)
                    for i in ${CATALINA_BASES}
                    do
                            export CATALINA_BASE=${CATALINA_PREFIX}${i}
                            /bin/su ${CATALINA_USER} ${CATALINA_HOME}/bin/shutdown.sh
                            /bin/su ${CATALINA_USER} ${CATALINA_HOME}/bin/startup.sh
                    done
            ;;
    esac
    exit 0

    CATALINA_BASES='server1 server2' — содержит имена экземпляров, которые будут запущены/остановлены/перезагружены, если вторым атрибутом не передано имя экземпляра.

NGINX

location в конфигурации nginx подправил следующим образом:

location /JasperReportsIntegration/     {proxy_pass http://127.0.0.1:8280$request_uri;}
location /apex/         {proxy_pass http://127.0.0.1:8180$request_uri;}

JasperReportsIntegration размещён в одном экземпляре tomcat (на порту 8280), а apex — в другом (на порту 8180). (Конфигурация — тестовая, тест — синтетический:-) )

Ещё одно дополнение:

location /manager-server1/ {
        rewrite    /manager-server1/([^/]+) /manager/$1 break;
        proxy_pass http://127.0.0.1:8180;
}
location /manager-server2/ {
        rewrite    /manager-server2/([^/]+) /manager/$1 break;
        proxy_pass http://127.0.0.1:8280;
}

Нюансы данной конфигурации заключаются в том, что она работает частично. Связано это с тем, что все управляющие ссылки и кнопки жёстко привязаны на часть URL, а именно — на /manager/html/, соответственно, просмотреть список размещённых приложений возможно, а вот управлять ими — нет. Посему, данные настройки бессмысленны, но как пример я всё же оставлю.

 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate