среда, 19 декабря 2012 г.

Варианты запуска WebLogic Server'а с использованием WLST

Существует несколько способов запуска серверов участников домена сервера приложений WebLogic. Один из них - это использовать скрипты DOMAIN_HOME/bin/startWebLogic.sh для AdminServer'а и DOMAIN_HOME/bin/startManagedWebLogic.sh для управляемых серверов. Другой - использовать утилиту WebLogic Scripting Tool (WLST). В данной заметке мы подробно рассмотрим второй способ.


Запуск AdminServer'а без NodeManager'а


Для запуска AdminServer'a служит команда startServer(). В качестве аргументов данная команда принимает наименование сервера, наименование домена, URL сервера, имя пользователя и пароль, путь к каталогу домена, а так же аргументы запуска JVM. Пример использования команды:

startServer(adminServerName='AdminServer', domainName='ssl_domain', url='t3://localhost:7001', username='weblogic', password='12345678', domainDir='/u01/user_projects/domains/ssl_domain', jvmArgs='-Xms512m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=256m')

Особенностью данной команды является тот факт, что она содержит имя пользователя и пароль, необходимые для старта сервера, а так же аргументы запуска JVM, тем самым делая ненужным их указания ни в настройках самого сервера (группа параметров Server Start сервера), ни в т.н. файлах запуска: DOMAIN_HOME/servers/ManagedServer/data/NodeManager/boot.properties или DOMAIN_HOME/servers/ManagedServer/security/boot.properties, а так же DOMAIN_HOME/servers/ManagedServer/data/NodeManager/startup.properties.

Запуск AdminServer'а с использованием NodeManager'а


Другой вариант - запустить AdminServer под управлением NodeManager'а. Такой способ имеет ряд преимуществ, в частности, NodeManager может автоматически перезапускать работающий под его управлением сервер, а так же позволяет управлять его жизненным циклом из консоли администрирования.

Прежде всего следует запустить сам NodeManager. Это можно так же сделать из под WLST с помощью команды startNodeManager(). Пример использования команды:

startNodeManager(verbose='true', NodeManagerHome='/opt/oracle/middleware/wlserver_10.3/common/nodemanager', ListenPort='5556', ListenAddress='wm-linux-1')

После запуска NodeManager'а к нему необходимо подключиться. Сделать это можно с помощью команды nmConnect(). В качестве аргументов необходимо передать имя пользователя и пароль, адрес, на котором запущен NodeManager, порт, который он слушает, наименование домена, абсолютный путь к домену и режим подключения, например plain или ssl. Пример использования команды:

nmConnect('weblogic', '12345678', 'wm-linux-1', '5556', 'ssl_domain', '/u01/user_projects/domains/ssl_domain', 'ssl');

Важно, что режим подключения, а так же адрес и порт должны соответствовать настройкам соответствующей машины в домене.


Есть одно замечание. Чтобы можно было подключаться к NodeManager'у для продуктивного домена, необходимо сначала задать логин и пароль подключения. Сделать это можно установив параметры NodeManager Username и NodeManager Password, открыв ссылку Advanced на вкладке Security настроек домена.


После подключения к NodeManager'у можно запустить AdminServer с помощью команды nmStart(). Данная команда принимает один аргумент - имя сервера. Пример использования команды:

nmStart('AdminServer')

У данной команды есть ряд особенностей. Во-первых, она требует наличия файлов запуска: DOMAIN_HOME/servers/ManagedServer/data/NodeManager/boot.properties или DOMAIN_HOME/servers/ManagedServer/security/boot.properties, а так же DOMAIN_HOME/servers/ManagedServer/data/NodeManager/startup.properties. Файлы boot.properties можно создать вручную, прописав там имя пользователя и пароль открытым текстом:

username=weblogic

password=12345678

После первого успешного запуска сервера имя пользователя и пароль в файле будут зашифрованы:

# Generated by Configuration Wizard on Fri Jul 06 13:32:22 MSK 2012

username={AES}QhohKCp00/AVJ4fmU6ZEK/ROrh9bbglT9JctyZJQBcA=

password={AES}9BYRE+fgRJwa6IzTAWy0hvS8Hz/kEel+vQ/c7dcyoXQ=

 

Файл startup.properties автоматически будет создан при запуске AdminServer'а каким-либо другим способом кроме использования команды nmStart: скриптом startWebLogic.sh или командой startServer().

Если при запуске AdminServer'а окажется, что ему не хватает выставленных по-умолчанию размера кучи и постоянной области памяти (PermGenSpace), то их можно увеличить, добавив в файл startup.properties параметр Arguments:

Arguments=-Xms512m -Xmx512m -XX\:PermSize\=256m -XX\:MaxPermSize\=256m

Запуск управляемого сервера с использованием NodeManager'а


Для запуска управляемого сервера под NodeManager'ом можно воспользоваться уже знакомой нам командой nmStart(), требующей подключения к NodeManager'у, а так же командой start(), требующей подключения к AdminServer'у.

Команда nmStart() подробно описана выше. Стоит только отметить, что при первоначальном запуске управляемого сервера может возникнуть следующая ошибка:

<Info> <Security> <BEA-090906> <Changing the default Random Number Generator in RSA CryptoJ from ECDRBG to FIPS186PRNG. To disable this change, specify -Dweblogic.security.allowCryptoJDefaultPRNG=true>

<Info> <WebLogicServer> <BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) 64-Bit Server VM Version 20.1-b02 from Sun Microsystems Inc.>

<Info> <Management> <BEA-141107> <Version: WebLogic Server 10.3.4.0 Fri Dec 17 20:47:33 PST 2010 1384255 >

<Critical> <WebLogicServer> <BEA-000362> <Server failed. Reason:



There are 1 nested errors:



weblogic.management.ManagementException: Booting as admin server, but servername, soa_server1, does not match the admin server name, AdminServer

at weblogic.management.provider.internal.RuntimeAccessService.start(RuntimeAccessService.java:67)

at weblogic.t3.srvr.ServerServicesManager.startService(ServerServicesManager.java:461)

at weblogic.t3.srvr.ServerServicesManager.startInStandbyState(ServerServicesManager.java:166)

at weblogic.t3.srvr.T3Srvr.initializeStandby(T3Srvr.java:879)

at weblogic.t3.srvr.T3Srvr.startup(T3Srvr.java:566)

at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:467)

at weblogic.Server.main(Server.java:71)

 

Данная ошибка возникает из-за того, что управляемый сервер запускается первый раз и для него еще не созданы файлы запуска: DOMAIN_HOME/servers/ManagedServer/data/NodeManager/boot.properties или DOMAIN_HOME/servers/ManagedServer/security/boot.properties, а так же DOMAIN_HOME/servers/ManagedServer/data/NodeManager/startup.properties. Для создания файлов DOMAIN_HOME/servers/ManagedServer/data/NodeManager/startup.properties и DOMAIN_HOME/servers/ManagedServer/data/NodeManager/boot.properties можно использовать команду nmGenBootStartupProps(), принимающую в качестве аргумента имя сервера. Пример использования команды:

nmGenBootStartupProps('soa_server1')

При запуске данной команды необходимо, чтобы AdminServer работал и из WLST к нему было выполнено подключение. Важно! данная команда генерирует файлы в т.н. каталоге Root Directory. По-умолчанию, это - тот каталог, из которого запущен WLST. Изменить путь к каталогу Root Directory можно, отредактировав значение одноименного параметра на вкладке Server Start страницы соответствующего сервера в консоли администрирования WebLogic. После успешной генерации файлов необходимо перезапустить NodeManager.

Команда start() требует подключения к AdminServer'у. В качестве аргумента команда start() принимает имя запускаемого сервера или кластера, тип запускаемого объекта - сервер или кластер (по-умолчанию - сервер) и путь к AdminServer'у (необязательный параметр). Пример использования команды:

start('soa_server1','Server', 't3://wm-linux-1:7001')

Чтобы подключиться к AdminServer'у необходимо воспользоваться командой connect(), принимающей следующие аргументы: имя пользователя, пароль, URL AdminServer'а. Пример использования команды:

connect('weblogic', '12345678', 't3://wm-linux-1:7001')

Стоит отметить, что для запуска управляемых серверов из консоли администрирования домена WebLogic используется именно эта команда. Т.к. данные для запуска сервера в том числе логин и пароль запрашиваются у AdminServer'а, то файл boot.properties не требуется. В качестве аргументов для запуска JVM используются параметры, заданные в консоли администрирования на вкладке Server Start для соответствующего сервера.

Материалы



Понравилось сообщение - подпишитесь на блог и Twitter

17 комментариев:

Unknown комментирует...

>В качестве аргументов для запуска JVM используются параметры, заданные в консоли администрирования на вкладке Server Start для соответствующего сервера
Да, это так, если в nodemanager.properties StartScriptEnabled=false. При StartScriptEnabled=true значения, указанные на вкладке Server Start будут проигнорированы, а вместо этого запуск будет производится скриптом, указанном в параметре StartScriptName.

Unknown комментирует...

Еще одни типичные грабли - node manager по умолчанию работает по SSL, и часто с самоподписанными default-сертификатами это заканчивается SSLKeyException. В тестовых и разработческих средах проще отрубить SSL установкой SecureListener=false в nodemanager.properties, и у machine свойство type установить в plain. На PROD'е сразу надо озаботится переходом на custom identity и custom trust - http://www.veriton.co.uk/roller/fmw/entry/ssl_for_weblogic_server_11g

Unknown комментирует...

>Стоит отметить, что для запуска управляемых серверов из консоли администрирования домена WebLogic используется именно эта команда.
Ну или можно сказать так: и WLS Admin Console, и WLST-команда start, являясь JMX-клиентами, используют для запуска управляемого сервера метод start JMX MBean'а ServerLifeCycleRuntimeMBean

Unknown комментирует...

Дмитрий, спасибо за уточнение. Тестировалось действительно при StartScriptEnabled=false.

Unknown комментирует...

>> Еще одни типичные грабли - node manager по умолчанию работает по SSL, и часто с самоподписанными default-сертификатами это заканчивается SSLKeyException.

Я так понял это происходит из-за валидации имени хоста. Данную валидацию можно отключить. По крайней мере кроме данного поведения - валидации имени хоста - мне не удалось выяснить четких причин появления SSLKeyException. Про то как отключить валидацию имени хоста я писал в заметке Создание кластера серверов приложений WebLogic с помощью WLST и утилит pack/unpack.

Речь идет именно о default-сертификатах.

Евгений Поляков комментирует...

>> Данная ошибка возникает из-за того, что управляемый сервер запускается первый раз и для него еще не созданы файлы запуска: DOMAIN_HOME/servers/ManagedServer/security/boot.properties
Этот файл не имеет никакого отношения к запуску сервера через NodeManager.

Unknown комментирует...

Это не так. Если файл DOMAIN_HOME/servers/ManagedServer/data/nodemanager/boot.properties отсутствует, то используется файл DOMAIN_HOME/servers/ManagedServer/security/boot.properties.

Евгений Поляков комментирует...

Ну и каша. Не вали всё в одну кучу.
Посмотри вывод команды nmGenBootStartupProps('soa_server1'), раз уж ты её употребляешь. Она генерит 2 файла.

Unknown комментирует...

Данная команда генерирует файлы: servers/ManagedServer/data/nodemanager/boot.properties и servers/ManagedServer/data/nodemanager/startup.properties. При этом, если файла servers/ManagedServer/data/nodemanager/boot.properties по каким-либо причинам нет (например, команда nmGenBootStartupProps() не выполнялась), то вместо файла servers/ManagedServer/data/nodemanager/boot.properties логин и пароль берутся из файла DOMAIN_HOME/servers/ManagedServer/security/boot.properties. Поэтому говорить, что файл DOMAIN_HOME/servers/ManagedServer/security/boot.properties не имеет никакого отношения к запуску сервера через NM неверно.

Unknown комментирует...

Чтобы не было разночтений, добавил в статью информацию о servers/ManagedServer/data/nodemanager/boot.properties.

Евгений Поляков комментирует...

А когда серверов будет полсотни, тоже будешь раскладывать файлик и говорить, что ты прав и так и надо пользоваться NodeManager-ом?

Unknown комментирует...

Я не говорил, что так надо пользоваться NodeManager'ом, я говорил, что есть такая возможность. Вполне допускаю, что кому-то удобнее иметь один файл с паролями для запуска и скриптом, и NodeManager'ом. В конце концов зачем-то же разработчики предусмотрели такую возможность.

В любом случае Вам спасибо за замечания, копнул тему чуть глубже, внес изменения в статью.

Евгений Поляков комментирует...

Ты не говорил. Ты написал, как его настроить чтобы именно так им пользоваться. =)

Unknown комментирует...

Было бы интересно почитать Ваш рецепт.

I.C. Wiener комментирует...

Добрый день
Хотел бы получить ответы на пару вопросов.
Были развернуты по 2 ms на каждом физическом хосте.
NM управляет через ssh (используя синтаксис ssh -l ndmgr -o PasswordAuthentication=no -p %P %H
/opt/bea/wlserver_103/common/bin/wlscontrol.sh -d %D
-n /home/ndmgr -c -f startManagedWebLogic.sh -s %S %C)
Для каждого ms (находящегося на одном физ. хосте) необходимо настроить свое выделение памяти для jvm
Вопросы следующие:
1) конфигурацию памяти для каждого ms следует описывать в setDomainEnv.sh ? пример

if [ "${SERVER_NAME}" = "ms1" ] ; then
WLS_MEM_ARGS_64BIT="-Xms1g -Xmx1g"
export WLS_MEM_ARGS_64BIT
fi

if [ "${SERVER_NAME}" = "ms2" ] ; then
WLS_MEM_ARGS_64BIT="-Xms256m -Xmx512m"
export WLS_MEM_ARGS_64BIT
fi

2)Или конфигурацию делать через консоль Server Start - Arguments ?? Какой вариант верный?

Unknown комментирует...

Здравствуйте. В принципе можно делать как одним способом, так и другим. Просто вам нужно решить, нужен ли вам запуск настроечных скриптов при старте WebLogic'а (это нужно для продуктов Oracle Fusion Middleware). Если нужно, то конфигурация прописывается в setDomainEnv.sh, а в настройках NM надо включить StartScriptEnabled=true и StopScriptEnabled=true. Если ненужно - в параметрах старта серверов через консоль управления.

Unknown комментирует...

Понекропосчу!

>> А когда серверов будет полсотни, тоже будешь раскладывать файлик и говорить, что ты прав и так и надо пользоваться NodeManager-ом?

Прошло 5 лет :) Теперь утилиты IaC, такие как Ansible/Chef/Puppet позволяют раскладывать файлики не только по 50 серверам, но и по 5 000 серверов.

Именно так сейчас устанавливаю Oracle WebLogic 12c, Middleware Infrastructure, SOA Suite, OSB, создаю домен с помощью WLST offline и запускаю Node Manager и сервера под его управлением.

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!