| type=page |
| status=published |
| title=Configuring HTTP Load Balancing |
| next=rolling-upgrade.html |
| prev=named-configurations.html |
| ~~~~~~ |
| |
| = Configuring HTTP Load Balancing |
| |
| [[GSHAG00009]][[abdgs]] |
| |
| |
| [[configuring-http-load-balancing]] |
| == 7 Configuring HTTP Load Balancing |
| |
| This chapter describes how to configure HTTP load balancing on {productName} 7. |
| |
| The following topics are addressed here: |
| |
| * link:#abdgx[Setting Up HTTP Load Balancing] |
| |
| For information on other types of load balancing, see |
| link:jms.html#abdbk[Configuring Java Message Service High Availability] |
| and link:rmi-iiop.html#fxxqs[RMI-IIOP Load Balancing and Failover]. |
| |
| [[abdgx]][[GSHAG00202]][[setting-up-http-load-balancing]] |
| |
| === Setting Up HTTP Load Balancing |
| |
| This section describes how to set up load balancing for {productName}. |
| |
| The following topics are addressed here: |
| |
| * link:#abdgy[Prerequisites for Setting Up HTTP Load Balancing] |
| * link:#gksdt[Configuring {productName} with Apache HTTP Server and `mod_jk`] |
| * link:#CHDCCGDC[Configuring {productName} with Apache HTTP Server and `mod_proxy_ajp`] |
| * link:#abdgz[HTTP Load Balancer Deployments] |
| |
| [[abdgy]][[GSHAG00281]][[prerequisites-for-setting-up-http-load-balancing]] |
| |
| ==== Prerequisites for Setting Up HTTP Load Balancing |
| |
| Before configuring your load balancer, you must: |
| |
| * Install a supported web server and configure it. If using the `mod_jk` |
| or `mod_proxy_ajp` modules, the only supported web server is Apache HTTP Server 2.2.x. |
| |
| * Configure the `mod_jk` connector module, as described in |
| link:#gksdt[Configuring {productName} with Apache HTTP Server and `mod_jk`], |
| or configure the `mod_proxy_ajp` connector module, as |
| described in link:#CHDCCGDC[Configuring {productName} with Apache |
| HTTP Server and `mod_proxy_ajp`]. |
| |
| * Create {productName} clusters or server instances to participate in load balancing. |
| |
| * Deploy applications to these clusters or instances. |
| |
| [[gksdt]][[GSHAG00282]][[configuring-glassfish-server-with-apache-http-server-and-mod_jk]] |
| |
| ==== Configuring {productName} with Apache HTTP Server and `mod_jk` |
| |
| {productName} 7 can be configured for load balancing with Apache |
| HTTP Server as a front end by enabling the Apache `mod_jk` connector |
| module. To enable the `mod_jk` module in {productName}, set the |
| {productName} `jk-enabled` `network-listener` attribute. You can also |
| create `jk-connectors` under different virtual-servers using the |
| `jk-enabled` `network-listener` attribute. |
| |
| [[gksde]][[GSHAG00143]][[to-configure-the-mod_jk-connector-module]] |
| |
| ===== To Configure the `mod_jk` Connector Module |
| |
| 1. Install http://httpd.apache.org/docs/2.2/install.html[Apache HTTP Server] |
| (`http://httpd.apache.org/docs/2.2/install.html`) and |
| http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html[mod_jk] |
| (`http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html`). |
| |
| 2. Configure `workers.properties` and `httpd.conf`. For example: |
| |
| * `apache2/config/workers.properties` |
| + |
| [source] |
| ---- |
| # Define 1 real worker using ajp13 |
| worker.list=worker1 |
| # Set properties for worker1 (ajp13) |
| worker.worker1.type=ajp13 |
| worker.worker1.host=localhost |
| worker.worker1.port=8009 |
| ---- |
| |
| * `apache2/conf/httpd.conf` |
| + |
| [source] |
| ---- |
| LoadModule jk_module /Users/Amy/apache2/modules/mod_jk-1.2.25-httpd-2.2.4.so |
| JkWorkersFile /Users/Amy/apache2/conf/worker.properties |
| # Where to put jk logs |
| JkLogFile /Users/Amy/apache2/logs/mod_jk.log |
| # Set the jk log level [debug/error/info] |
| JkLogLevel debug |
| # Select the log format |
| JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " |
| # JkOptions indicate to send SSL KEY SIZE, |
| JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories |
| # JkRequestLogFormat set the request format |
| JkRequestLogFormat "%w %V %T" |
| # Send everything for context /examples to worker named worker1 (ajp13) |
| JkMount /examples/* worker1 |
| ---- |
| 3. Start Apache HTTP Server. |
| |
| 4. Create a jk-enabled network listener by using the |
| link:reference-manual/create-network-listener.html#GSRFM00046[`create-network-listener`] subcommand. |
| + |
| [source] |
| ---- |
| asadmin> create-network-listener --protocol http-listener-1 \ |
| --listenerport 8009 --jkenabled true jk-connector |
| ---- |
| |
| 5. If you are using the `glassfish-jk.properties` file, set the |
| `jk-configuration-file` property of the network listener to the |
| fully-qualified file name of the `glassfish-jk.properties` file. |
| + |
| [source] |
| ---- |
| asadmin> set server-config.network-config.network-listeners.network-listener.\ |
| jk-connector.jk-configuration-file=domain-dir/config/glassfish-jk.properties |
| ---- |
| |
| 6. If you expect to need more than five threads for the listener, |
| increase the maximum threads in the `http-thread-pool` pool: |
| + |
| [source] |
| ---- |
| asadmin> set configs.config.server-config.thread-pools.thread-pool.\ |
| http-thread-pool.max-thread-pool-size=value |
| ---- |
| |
| 7. Restart {productName}. |
| |
| [[GSHAG00065]][[gktpu]] |
| Example 7-1 `httpd.conf` File for Load Balancing |
| |
| This example shows an `httpd.conf` file that is set for load balancing. |
| |
| [source] |
| ---- |
| LoadModule jk_module /usr/lib/httpd/modules/mod_jk.so |
| JkWorkersFile /etc/httpd/conf/worker.properties |
| # Where to put jk logs |
| JkLogFile /var/log/httpd/mod_jk.log |
| # Set the jk log level [debug/error/info] |
| JkLogLevel debug |
| # Select the log format |
| JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " |
| # JkOptions indicate to send SSL KEY SIZE, |
| JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories |
| # JkRequestLogFormat set the request format |
| JkRequestLogFormat "%w %V %T" |
| # Send all jsp requests to GlassFish |
| JkMount /*.jsp worker1 |
| # Send all glassfish-test requests to GlassFish |
| JkMount /glassfish-test/* loadbalancer |
| ---- |
| |
| [[GSHAG00066]][[gktpe]] |
| Example 7-2 `workers.properties` File for Load Balancing |
| |
| This example shows a `workers.properties` or `glassfish-jk.properties` |
| file that is set for load balancing. The `worker.worker*.port` should |
| match with JK ports you created. |
| |
| [source] |
| ---- |
| worker.list=worker1,worker2,loadbalancer |
| worker.worker1.type=ajp13 |
| worker.worker1.host=localhost |
| worker.worker1.port=8009 |
| worker.worker1.lbfactor=1 |
| worker.worker1.socket_keepalive=1 |
| worker.worker1.socket_timeout=300 |
| worker.worker2.type=ajp13 |
| worker.worker2.host=localhost |
| worker.worker2.port=8010 |
| worker.worker2.lbfactor=1 |
| worker.worker2.socket_keepalive=1 |
| worker.worker2.socket_timeout=300 |
| worker.loadbalancer.type=lb |
| worker.loadbalancer.balance_workers=worker1,worker2 |
| ---- |
| |
| [[CHDCCGDC]][[GSHAG494]][[configuring-glassfish-server-with-apache-http-server-and-mod_proxy_ajp]] |
| |
| ==== Configuring {productName} with Apache HTTP Server and `mod_proxy_ajp` |
| |
| {productName} 7 can be configured for load balancing with Apache |
| HTTP Server as a front end by enabling the Apache `mod_proxy_ajp` |
| connector module. To enable the `mod_proxy_ajp` module in {productName}, set the {productName} `jk-enabled` `network-listener` |
| attribute. You can also create `jk-connectors` under different |
| virtual-servers using the `jk-enabled` `network-listener` attribute. |
| |
| [[GSHAG495]][[sthref22]] |
| |
| |
| [[to-configure-the-mod_proxy_ajp-connector-module]] |
| ===== To Configure the `mod_proxy_ajp` Connector Module |
| |
| 1. Install http://httpd.apache.org/docs/2.2/install.html[Apache HTTP Server] |
| (`http://httpd.apache.org/docs/2.2/install.html`). |
| |
| 2. Configure `httpd.conf`. For example: |
| + |
| [source] |
| ---- |
| LoadModule proxy_module /usr/lib/httpd/modules/mod_proxy.so |
| LoadModule proxy_ajp_module /usr/lib/httpd/modules/mod_proxy_ajp.so |
| |
| Listen 1979 |
| NameVirtualHost *:1979 |
| <VirtualHost *:1979> |
| ServerName localhost |
| ErrorLog /var/log/apache2/ajp.error.log |
| CustomLog /var/log/apache2/ajp.log combined |
| |
| <Proxy *> |
| AddDefaultCharset Off |
| Order deny,allow |
| Allow from all |
| </Proxy> |
| |
| ProxyPass / ajp://localhost:8009/ |
| ProxyPassReverse / ajp://localhost:8009/ |
| </VirtualHost> |
| ---- |
| |
| 3. Start Apache HTTP Server. |
| |
| 4. Create a jk-enabled network listener by using the `create-network-listener` subcommand. |
| + |
| [source] |
| ---- |
| asadmin> create-network-listener --protocol http-listener-1 \ |
| --listenerport 8009 --jkenabled true jk-connector |
| ---- |
| |
| 5. If you expect to need more than five threads for the listener, |
| increase the maximum threads in the `http-thread-pool` pool: |
| + |
| [source] |
| ---- |
| asadmin> set configs.config.server-config.thread-pools.thread-pool.\ |
| http-thread-pool.max-thread-pool-size=value |
| ---- |
| |
| 6. Restart {productName}. |
| |
| [[abdgz]][[GSHAG00284]][[http-load-balancer-deployments]] |
| |
| ==== HTTP Load Balancer Deployments |
| |
| You can configure your load balancer in different ways, depending on |
| your goals and environment, as described in the following sections: |
| |
| * link:#abdha[Using Clustered Server Instances] |
| * link:#abdhc[Using Multiple Standalone Instances] |
| |
| [[abdha]][[GSHAG00232]][[using-clustered-server-instances]] |
| |
| ===== Using Clustered Server Instances |
| |
| The most common way to deploy the load balancer is with a cluster or |
| clusters of server instances. By default all the instances in a cluster |
| have the same configuration and the same applications deployed to them. |
| The load balancer distributes the workload between the server instances |
| and requests fail over from an unhealthy instance to a healthy one. If |
| you've configured HTTP session persistence, session information persists |
| when the request is failed over. |
| |
| If you have multiple clusters, requests can be load balanced across |
| clusters but are only failed over between the instances in a single |
| cluster. Use multiple clusters in a load balancer to easily enable |
| rolling upgrades of applications. For more information, see |
| link:rolling-upgrade.html#abdik[Upgrading Applications Without Loss of Availability]. |
| |
| |
| [NOTE] |
| ==== |
| Requests cannot be load balanced across clusters and standalone instances. |
| ==== |
| |
| |
| [[abdhc]][[GSHAG00233]][[using-multiple-standalone-instances]] |
| |
| ===== Using Multiple Standalone Instances |
| |
| It is also possible to configure your load balancer to use multiple |
| standalone instances, and load balance and failover requests between |
| them. However, in this configuration, you must manually ensure that the |
| standalone instances have homogenous environments and the same |
| applications deployed to them. Because clusters automatically maintain a |
| homogenous environment, for most situations it is better and easier to |
| use clusters. |
| |
| |
| [TIP] |
| ==== |
| Load balancing across multiple standalone instances only provides |
| failover for requests, and any associated HTTP session data will not be |
| failed over. This is another reason why using a cluster, which can |
| provide session failover, is a more desirable load balancing |
| configuration. |
| ==== |