четверг, 28 апреля 2011 г.

Параметры JVM для weblogic

Общие рассуждения о работе JVM.
Выделением памяти в Java занимается виртуальная машина. Машина выделяет память под объекты, удаляет объекты и освобождает память. В соответствии с Generation Model, объект за время своего существования перемещается между областями памяти, которые называются Young и Tenured. Но скорее всего, до Tenured объект не доживёт, ибо по статистике объекты умирают молодыми. Удалением объектов занимается сборщик мусора, который запускается по мере заполнения памяти.

среда, 20 апреля 2011 г.

Балансировка нагрузки с помощью mod_wl


Балансировка нагрузки возможна не только между серверами, объединёнными в кластер. С некоторыми ограничениями, можно сделать это с помощью любого балансировщика нагрузки, в том числе и с помощью apache + mod_wl просто перенаправляя запросы на разные сервера, на которые задеплоено одно приложение. Естественно, фича session failover при этом не доступна.

В моём случае необходимо было реализовать возможность перезагрузки экземпляров weblogic (по очереди) без потери доступности сервиса. При этом потеря сессии и её состояния не считается критичной.
Будем реализовывать вот такую схему:



Если почитать документацию, можно найти нужный параметр
WebLogicCluster
под которым подразумевается
List of WebLogic Servers that can be used for load balancing
Это список  серверов, доступных для перенаправления на них запросов. Список динамически обновляется, учитывая failed и recvered в данный момент сервера.
При этом не стоит переопределять параметр
DynamicServerList
он по имелчанию равен ON. При установке его в Off возможно перенаправление запроса на неработающий в данный момент сервер.

Для апача настройка будет такой же, как и в предыдущем посте. Конфиг модуля будет выглядеть так

LoadModule weblogic_module "/etc/apache2/modules/mod_wl_22.so"

<IfModule mod_weblogic.c>
       WebLogicCluster server1:8001,server1:8002,server2:8001,server2:8002
     MatchExpression *.jsp №перенаправлять только jsp-страницы
</IfModule>
Или, например, так

<Location /myApp>
    SetHandler weblogic-handler
    PathTrim /myApp    WebLogicCluster server1:8001,server1:8002,server2:8001,server2:8002
</Location>
Парвый вариант перенапрвляет запрс на основе MIME-типа. Второй по явному указанию пути (path) или его части

вторник, 19 апреля 2011 г.

Запуск и остановка серверов c помощью NodeManager Update 03.06.2011

В качестве best practices управления weblogic-доменами предлагается использовать NodeManager.
NodeManager запускается один на хост и может обслуживать несколько managed-серверов, принадлежащих одному или нескольким доменам.
Benefits от использования:
1. Возможность управления  managed-серверами через админскую консоль.
2. Возможность автоматического выключения\рестарта серверов в случае ошибки.
3. Автоматический запуск управляемых серверов.
4. Возможность восстановления состояния серверов до состояния, предшествующего "неожиданному выключению" (это значит, что если ваш сервер перед сбоем находился в состоянии standby, он запустится в standby, а не running)
5. Удобная настройка новых серверов на удалённых машинах.
6. Миграция серверов.

суббота, 9 апреля 2011 г.

Запуск weblogic на 80 порту upd 16.01.12

В Unix-like системах запуск приложений, слушаюших на портах меньших 1024 возможен только от пользователя root.  Соответственно, запуск weblogic на 80 порту от  имени другого пользователя невозможен.  Пара способов обойти это ограничние.
1.       Запуск процесса от имени root с последующим переключением его на непривилигированнойго пользователя. Настройка Weblogic-сервера производится через admin-консоль на вкладке
     Environment - > Machines -> [Mashine name]
Post-Bind UID: – UID  группы, на пользователя которой мы переключаемся.
Post-Bind GID: – GID пользователя, на которого переключаемся
2.       Второй способ – запуск прокси-сервера на 80 порту и перенаправление на weblogic всех запросов, адресованных приложению.
В качестве прокси будем использовать apache 2.2 с модулем mod_wl
Для SuSE linux и утановленного из репозиториев apache это будет выглядеть так
1.       Установка web-сервера
rpm –ihv apache2*
2.       Создаём папку /etc/apache2/modules и копируем  в неё mod_wl_22.so
3.       В папке  /etc/apache2/conf.d создаём конфиг примерно такого содержания:
LoadModule weblogic_module "/etc/apache2/modules/mod_wl_22.so" 
<Location /console>
    SetHandler weblogic-handler
    WebLogicHost server
    WeblogicPort 7001
</Location>
           KeepAliveEnabled ON           KeepAliveSecs      30
                 
запросы к приложению console на 80 порту теперь перенаправляются на 7001 порт



4. Перезапускаем apache
                               rcapache2 reload
                Проверяем работоспособность

Третий способ.
Завернуть трафик с порта управляемого сервера на порт 80.
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 

iptables -t nat -A PREROUTING -p udp -m udp --dport 80 -j REDIRECT --to-ports 8080