<distributed-cache name="dist" l1-lifespan="0"/>
This guide is still under development, check back soon!
Disabling L1 cache for distributed cache:
<distributed-cache name="dist" l1-lifespan="0"/>
The recommended front-end module is mod_cluster but mod_jk or mod_proxy could be used as in Tomcat or other AS version.
To use AJP define a ajp connector in the web subsystem like:
<subsystem xmlns="urn:jboss:domain:web:1.0">
<connector name="http" protocol="HTTP/1.1" socket-binding="http"/>
<connector name="ajp" protocol="AJP/1.3" socket-binding="ajp"/>
Note: Don't use scheme="ajp" wiith ajp connectors because scheme is used for the redirects
To the ajp in the in the socket-binding-group like:
<socket-binding-group name="standard-sockets" default-interface="public">
....
<socket-binding name="http" port="8080"/>
<socket-binding name="ajp" port="8009"/>
<socket-binding name="https" port="8443"/>
The mod_cluster integration is done via the modcluster subsystem it requires mod_cluster-1.1.x.
The modcluster subsystem supports several operations:
[standalone@localhost:9999 subsystem=modcluster] :read-operation-names { "outcome" => "success", "result" => [ "add", "add-custom-metric", "add-metric", "add-proxy", "disable", "disable-context", "enable", "enable-context", "list-proxies", "read-attribute", "read-children-names", "read-children-resources", "read-children-types", "read-operation-description", "read-operation-names", "read-proxies-configuration", "read-proxies-info", "read-resource", "read-resource-description", "refresh", "remove-custom-metric", "remove-metric", "remove-proxy", "reset", "stop", "stop-context", "validate-address", "write-attribute" ] }
There are 2 operations that display how Apache httpd sees the node:
Send a DUMP message to all Apache httpd the node is connected to and display the message received from Apache httpd.
[standalone@localhost:9999 subsystem=modcluster] :read-proxies-configuration { "outcome" => "success", "result" => [ "neo3:6666", "balancer: [1] Name: mycluster Sticky: 1 [JSESSIONID]/[jsessionid] remove: 0 force: 1 Timeout: 0 Maxtry: 1 node: [1:1],Balancer: mycluster,JVMRoute: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Domain: [],Host: 127.0.0.1,Port: 8080,Type: http,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0 host: 1 [example.com] vhost: 1 node: 1 host: 2 [localhost] vhost: 1 node: 1 host: 3 [default-host] vhost: 1 node: 1 context: 1 [/myapp] vhost: 1 node: 1 status: 1 context: 2 [/] vhost: 1 node: 1 status: 1 ", "jfcpc:6666", "balancer: [1] Name: mycluster Sticky: 1 [JSESSIONID]/[jsessionid] remove: 0 force: 1 Timeout: 0 maxAttempts: 1 node: [1:1],Balancer: mycluster,JVMRoute: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,LBGroup: [],Host: 127.0.0.1,Port: 8080,Type: http,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0 host: 1 [default-host] vhost: 1 node: 1 host: 2 [localhost] vhost: 1 node: 1 host: 3 [example.com] vhost: 1 node: 1 context: 1 [/] vhost: 1 node: 1 status: 1 context: 2 [/myapp] vhost: 1 node: 1 status: 1 " ] }
Send a INFO message to all Apache httpd the node is connected to and display the message received from Apache httpd.
[standalone@localhost:9999 subsystem=modcluster] :read-proxies-info { "outcome" => "success", "result" => [ "neo3:6666", "Node: [1],Name: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Balancer: mycluster,Domain: ,Host: 127.0.0.1,Port: 8080,Type: http,Flushpackets: Off,Flushwait: 10000,Ping: 10000000,Smax: 26,Ttl: 60000000,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: -1 Vhost: [1:1:1], Alias: example.com Vhost: [1:1:2], Alias: localhost Vhost: [1:1:3], Alias: default-host Context: [1:1:1], Context: /myapp, Status: ENABLED Context: [1:1:2], Context: /, Status: ENABLED ", "jfcpc:6666", "Node: [1],Name: 498bb1f0-00d9-3436-a341-7f012bc2e7ec,Balancer: mycluster,LBGroup: ,Host: 127.0.0.1,Port: 8080,Type: http,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 1 Vhost: [1:1:1], Alias: default-host Vhost: [1:1:2], Alias: localhost Vhost: [1:1:3], Alias: example.com Context: [1:1:1], Context: /, Status: ENABLED Context: [1:1:2], Context: /myapp, Status: ENABLED " ] }
there are 3 operation that could be used to manipulate the list of Apache httpd the node is connected too.
Displays the httpd that are connected to the node. The httpd could be discovered via the Advertise protocol or via the proxy-list attribute.
[standalone@localhost:9999 subsystem=modcluster] :list-proxies { "outcome" => "success", "result" => [ "neo3:6666", "jfcpc:6666" ] }
Remove a proxy from the discovered proxies or temporarily from the proxy-list attribute.
[standalone@localhost:9999 subsystem=modcluster] :remove-proxy(host=jfcpc, port=6666) {"outcome" => "success"}
Add a proxy to the discovered proxies or temporarily to the proxy-list attribute.
[standalone@localhost:9999 subsystem=modcluster] :add-proxy(host=jfcpc, port=6666) {"outcome" => "success"}
There are 4 metric operations corresponding to add and remove load metrics to the dynamic-load-provider.
Note that when nothing is defined a simple-load-provider is use with a fixed load factor of one.
[standalone@localhost:9999 subsystem=modcluster] :read-resource(name=mod-cluster-config) { "outcome" => "success", "result" => {"simple-load-provider" => {"factor" => "1"}} }
that corresponds to the following configuration:
<subsystem xmlns="urn:jboss:domain:modcluster:1.0"> <mod-cluster-config> <simple-load-provider factor="1"/> </mod-cluster-config> </subsystem>
When using the dynamic-load-provider it is possible to have a list of metric and custom-metric to collect information for the web-app, web server, the JVM etc. There are 2 lists one containing the metrics the other containing the custom-metric. custom-metrics are normally customer written metrics.
The standard metrics are the following ones:
type |
Server-Side Load Metric |
description |
cpu |
AverageSystemLoadMetric |
Returns CPU load |
mem |
SystemMemoryUsageLoadMetric |
Returns system memory usage |
heap |
HeapMemoryUsageLoadMetric |
Returns the heap memory usage as a percentage of max heap size |
sessions |
ActiveSessionsLoadMetric |
Returns the percentage of busyness based on the number of active sessions needs a property: capacity. |
requests |
RequestCountLoadMetric |
Returns the percentage of connector threads from the thread pool that are busy servicing requests |
send-traffic |
SendTrafficLoadMetric |
Returns the percentage of busyness based onthe outgoing request traffic in KB/sec.needs a property: capacity. |
receive-traffic |
ReceiveTrafficLoadMetric |
Returns the percentage of busyness based on the incoming request POST traffic in KB/sec (the application needs to read POST data).needs a property: capacity. |
busyness |
BusyConnectorsLoadMetric |
Returns the percentage of connector threads from the thread pool that are busy servicing requests |
connection-pool |
ConnectionPoolUsageLoadMetric |
Returns the percentage of connections from a connection pool that are in use. (needs properties). (NOT SUPPORTED) |
Add a metric to the dynamic-load-provider, the dynamic-load-provider in configuration is created if needed.
[standalone@localhost:9999 subsystem=modcluster] :add-metric(type=cpu) {"outcome" => "success"} [standalone@localhost:9999 subsystem=modcluster] :read-resource(name=mod-cluster-config) { "outcome" => "success", "result" => { "dynamic-load-provider" => { "history" => 9, "decay" => 2, "load-metric" => [{ "type" => "cpu" }] } } }
When properties are needed it is possible to add them using the standard format like:
[("name1" => "value1"), ("name2" => "value2")]
For example:
[standalone@localhost:9999 subsystem=modcluster] :add-metric(type=send-traffic, property=[("capacity" => "200")]) {"outcome" => "success"}
Remove a metric from the dynamic-load-provider.
[standalone@localhost:9999 subsystem=modcluster] :remove-metric(type=cpu) {"outcome" => "success"}
like the add-metric and remove-metric except they require a class parameter instead the type. Usually they needed additional properties which can be specified
[standalone@localhost:9999 subsystem=modcluster] :add-custom-metric(class=myclass, property=[("pro1" => "value1"), ("pro2" => "value2")] {"outcome" => "success"}
which corresponds the following in the xml configuration file:
<subsystem xmlns="urn:jboss:domain:modcluster:1.0"> <mod-cluster-config> <dynamic-load-provider history="9" decay="2"> <custom-load-metric class="myclass"> <property name="pro1" value="value1"/> <property name="pro2" value="value2"/> </custom-load-metric> </dynamic-load-provider> </mod-cluster-config> </subsystem>
If you want to use your own JVM route instead of automatically generated one you can insert the following property:
... </extensions> <system-properties> <property name="jboss.mod_cluster.jvmRoute" value="myJvmRoute"/> </system-properties> <management> ...
If you want to use SSL between AS7 and httpd, which is to get the node behaves like client browser for httpd, you have to configure the httpd side see mod_ssl documentation.
To configure SSL you have to create the ssl configuration and then change the attributes you need to configure, for example:
[standalone@localhost:9999 subsystem=modcluster] ./ssl=configuration:add {"outcome" => "success"} [standalone@localhost:9999 subsystem=modcluster] ./ssl=configuration:write-attribute(name=password, value=mypassword) {"outcome" => "success"} [standalone@localhost:9999 subsystem=modcluster] :read-resource(recursive=true) { "outcome" => "success", "result" => { "advertise-socket" => "modcluster", "ssl" => {"configuration" => { "certificate-key-file" => "${user.home}/.keystore", "password" => "mypassword", "protocol" => "TLS" }} } }
There are several guides in the JBoss Application Server 7 documentation series. This list gives an overview of each of the guides:
*Getting Started Guide - Explains how to download and start JBoss Application Server 7.
*Getting Started Developing Applications Guide - Talks you through developing your first applications on JBoss Application Server 7, and introduces you to JBoss Tools and how to deploy your applications.
*JavaEE 6 Tutorial - A Java EE 6 Tutorial.
*Admin Guide - Tells you how to configure and manage your JBoss Application Server 7 instances.
*Developer Guide - Contains concepts that you need to be aware of when developing applications for JBoss Application Server 7. Classloading is explained in depth.
*High Availability Guide - Reference guide for how to set up clustered JBoss Application Server 7 instances.
*Extending JBoss AS 7 - A guide to adding new functionality to JBoss Application Server 7.