понедельник, 27 июля 2015 г.

Почему мой DMGR не видит экс-стэндалон узел, успешно подключенный с помощью addNode?

Давеча Суровый выполнял эксперимент по подключению готового стендалон-узла сервера приложений IBM WebSphere Application Server v8.5.5 for z/OS к ячейке. В процессе обнаружилось, что, не смотря на успешное завершение работы JOBBBOWADDN, вызывающего команду addNode, менеджер развертывания (DMGR) "не видит" свежеподключенный узел.


Сам узел (CZNODEB) при этом запущен и соответствующее адресное пространство существует в z/OS.


Симптомы заболевания

Что происходит на самом деле можно посмотреть в логах FFDC. Для узла сервер приложений пишет данные логи в каталог /wasv85config/CELL/NODE/AppServer/profiles/PROFILE/logs/ffdc/. Очень удобно отсортировать содержимое каталога по дате изменения файлов и смотреть последние измененные, иначе разобраться в каком файле находится актуальная информация довольно не просто. В нашем случае обращает на себя внимание следующая ошибка:



[6/30/15 7:01:44:582 GMT] FFDC Exception:com.ibm.websphere.management.exception.ConnectorException SourceId:com.ibm.ws.management.RoutingTable.Accessor.getConnector ProbeId:583 Reporter:com.ibm.ws.management.RoutingTable$Accessor@e153aa4c
com.ibm.websphere.management.exception.ConnectorException: ADMC0016E: The system cannot create a SOAP connector to connect to host HOST at port PORT.
at com.ibm.websphere.management.AdminClientFactory.createAdminClientPrivileged(AdminClientFactory.java:635)
at com.ibm.websphere.management.AdminClientFactory.access$000(AdminClientFactory.java:127)
at com.ibm.websphere.management.AdminClientFactory$1.run(AdminClientFactory.java:210)
...
Caused by: [SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket: java.io.IOException: Exception during sslSocket.startHandshake: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty; targetException=java.lang.IllegalArgumentException: Error opening socket: java.io.IOException: Exception during sslSocket.startHandshake: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty]
at org.apache.soap.transport.http.SOAPHTTPConnection.send(SOAPHTTPConnection.java:475)
at org.apache.soap.rpc.Call.WASinvoke(Call.java:510)

Записи в логах FFDC на стороне менеджера развертывания во многом похожи:


[6/26/15 6:45:11:707 GMT] FFDC Exception:com.ibm.websphere.management.exception.ConnectorException SourceId:com.ibm.ws.management.RoutingTable.Accessor.getConnector ProbeId:583 Reporter:com.ibm.ws.management.RoutingTable$Accessor@b44063cd
com.ibm.websphere.management.exception.ConnectorException: ADMC0016E: The system cannot create a SOAP connector to connect to host HOST at port PORT.
at com.ibm.websphere.management.AdminClientFactory.createAdminClientPrivileged(AdminClientFactory.java:635)
at com.ibm.websphere.management.AdminClientFactory.access$000(AdminClientFactory.java:127)
at com.ibm.websphere.management.AdminClientFactory$1.run(AdminClientFactory.java:210)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63)
at com.ibm.websphere.management.AdminClientFactory.createAdminClient(AdminClientFactory.java:206)
at com.ibm.ws.management.RoutingTable$Accessor.getConnector(RoutingTable.java:1102)
at com.ibm.ws.management.RoutingTable$Accessor.getConnector(RoutingTable.java:1218)
at com.ibm.ws.management.RoutingTable$Accessor.resetSession(RoutingTable.java:1264)
at com.ibm.ws.management.RoutingTable.addChild(RoutingTable.java:397)

Caused by: [SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket: java.io.IOException: Exception during sslSocket.startHandshake: Received fatal alert: handshake_failure; targetException=java.lang.IllegalArgumentException: Error opening socket: java.io.IOException: Exception during sslSocket.startHandshake: Received fatal alert: handshake_failure]
at org.apache.soap.transport.http.SOAPHTTPConnection.send(SOAPHTTPConnection.java:475)

Ставим диагноз

Очевидно, что проблема заключается в невозможности установить защищенное соединение между менеджером развертывания и агентом узла по протоколу (HTTPS). Чтобы менеджер развертывания "доверял" агенту узла, в хранилище сертификатов truststore менеджера развертывания должен находиться корневой сертификат, которым подписан сертификат сервера агента узла. Аналогично, чтобы агент узла "доверял" менеджеру развертывания, в хранилище сертификатов truststore данного агента узла должен находиться корневой сертификат, которым подписан сертификат сервера менеджера развертывания.

Если мы говорим о WebSphere Application Server for z/OS, то хранилищами сертификатов как правило являются z/OS System Access Facility (SAF) Keyrings. Задать пути и параметры подключения к хранилищам сертификатов можно на странице Security -> SSL certificate and key management -> Key stores and certificates консоли управления сервера приложений.


Лечение

На рисунке выше видно, что для узла cznodeb используется хранилище сертификатов safkeyring:///WASKeyring.WSBCELL, созданное для экс-стендалон сервера приложений WebSphere Application Server. Более того, в моем случае данное хранилище сертификатов изначально было пустым. Так как все остальные сервера в ячейке используют хранилище сертификатов safkeyring:///WASKeyring.CZCELL, то и для узла cznodeb необходимо прописать ссылки на данное хранилище.


После сохранения и синхронизации изменений (синхронизация с узлом cznodeb по очевидным причинам работать не будет, поэтому необходимо вручную скопировать на него файл /wasv85config/CELL/DMGR/DeploymentManager/profiles/default/config/cells/CELL/security.xml) необходимо перезапустить агент узла cznodeb. Агент сможет подключиться к менеджеру развертывания и синхронизироваться, а менеджер развертывания сможет подключиться к агенту, о чем будет свидетельствовать яркая зеленая стрелочка напротив соответстветствующей строки в таблице System administration -> Node agents, Node agents.


Больше вам зеленых стрелочек в жизни. Оставайтесь на связи!

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