Question: Explain the communication details between Domain
Admin Server, node-agents and server instances in Sun's Application
Server 8.x and 9.x (GlassFish V2).
Terminology:
DAS: Domain Admin Server (One per domain) -- The process that controls the management of the entire domain.
NA: Node Agent -- Generally, one per box or Solaris container -- The process that controls the life cycle of server instances.
SI: Server Instance -- The real Java EE instances that run user applications in an enterprise.
Answer:
1. Background:
The domain.xml controls the configuration. At every node-agent, there
are also a few configuration files that are consulted by every NA. See NA section at docs.sun.com for details. Following are the points in time when the communication (for administration/management purpose) happens:
- DAS communicates with each NA: Only when DAS needs to know NA's running status.
- DAS communicates with each SI: When DAS needs to know SI's running status and when it needs to cascade the SI MBeans into the DAS's MBenServer.
- NA communicates with DAS:
During initial rendezvous (which may happen during creation of NA),
synchronization of the NA itself and synchronization of each SI that NA
is responsible for.
- SI communicates with the DAS: Never, explicitly.
Thus,
the communication is mainly driven by DAS. When the domain is created,
the administration is configured to use an authentication realm named admin-realm.
This realm points to what's called a FileRealm which is nothing but the
implementation of a security realm implementation that uses admin-keyfile. If you see the domain's configuration, you'll find this file in config folder of that domain.
The
communication happens over two channels. One is the HTTP channel and
the other is RMI channel. For this purpose, there is a
SynchronizationServlet and a System JMX Connector (standard in JDK 5)
that is provided. Every DAS and SI, including the NA start a JMX RMI
ConnectorServer that can be optionally configured to use transport
layer security.
Every NA communicates with DAS multiple times,
but the key points are of initial hand-shake and synchronization. The
initial hand-shake is when NA makes DAS aware of its own existence and
DAS correspondingly responds if it has the correct credentials. When
the DAS is configured to have secure access (this is the default in
enterprise profile domain), both the HTTP and JMX/RMI channels use
Transport Layer Security with SSL/v3. Note that during the initial
hand-shake, the DAS knows about NA's existence alone. DAS does not
release the contents of the domain's repository during this phase. This
happens over HTTP channel since creation of node-agent takes the DAS's admin-port (default: 4848) as an option.
After an NA is created, the most natural step is to start that NA. This is done by executing the asadmin start-node-agent
command. Since this is the first-time startup of the NA, NA syncs up
with the DAS. Note that startup of NA requires the correct credentials
(admin user name and admin password) to be supplied. The DAS compares
them against its own admin-keyfile and the communication succeeds only
when this succeeds. The NA startup also requires the master password to
be provided on the command line because in order to start, the NA has
to be able to unlock the security store (e.g. keystore.jks) that it
synced from the DAS. Note that master password is never put on the
wire! It has to be provided at the time of both DAS startup and every
NA startup. For advanced use cases, there is an unattended boot
scenario that is handled by using the option --savemasterpassword which should be used with care.
The
reason NA needs the master password is also to pass it on to the SI's
it starts (as part of start-instance or start-cluster) so that these
instances are able to unlock the security store to get the primary keys
and certificates.
The NA always communicates with the DAS over
JMX/RMI channel. Thus NA opens an RMI connection to the DAS where DAS
is listening for RMI/JMX Connections. This is where the RMI Registry in
DAS (default port 8686) comes into picture.
When the domain is created, it uses the self-signed certificate aliased s1as
which is used for internal communication. This certificate is created
anew every time a domain is created. The master password of a domain is
what locks the server's keystore. In enterprise profile domain, NSS is
used to manage the secure store, whereas in cluster profile domain, JKS
manages the secure store. The semantics of the master password are
unchanged in both the cases.
The Server Instances are synced with the DAS as part of either:
- start-instance, or
- start-cluster, or
- start-node-agent --syncinstances procedure.
For
this synchronization, they use the HTTP layer and communicate with the
SynchronizationServlet that's listening for sync requests. This servlet
is (of course) running in the DAS.
The server instances get the
admin credentials from the node-agent process in a secure manner (using
stdin). This also evident when you try to use the startserv script that's located in instance's bin folder.
The
process of DAS communicating with the NA and SI's is identical in that
it communicates with them over RMI/JMX in the other direction.
2. Transport Layer Security:
This
is achieved when we enable the security-enabled flag on the
admin-listener and jmx-connector named system on the DAS and server
instances. Note that admin-listener (HTTP/S) is started only in the
DAS. There is no admin-listener in server instances.
It's of
course possible to use another CA-signed certificate for this purpose.
It needs additional configuration after importing those certs in the
store.
3. Authentication and Credentials:
Please see: http://wiki.glassfish.java.net/attach/GlassFishAdministrationPages/admincreds.html
posted on 2009-06-10 15:12
Blog of JoJo 阅读(372)
评论(0) 编辑 收藏 所属分类:
Programming 相关 、
每日一记