HTTP Balancer
Apache Karaf Cellar is able to expose servlets local to a node on the cluster. It means that a client (browser) can use any node in the cluster, proxying the requests to the node actually hosting the servlets.
Enable HTTP Balancer
To enable Cellar HTTP Balancer, you have to first install the http
and http-whiteboard
features:
karaf@root()> feature:install http karaf@root()> feature:install http-whiteboard
Now, we install the cellar-http-balancer
feature, actually providing the balancer:
karaf@root()> feature:install cellar-http-balancer
Of course, you can use Cellar to spread the installation of the cellar-http-balancer
feature on all nodes in the
cluster group:
karaf@root()> cluster:feature-install default cellar-http-balancer
It’s done: the Cellar HTTP Balancer is now enabled. It will expose proxy servlets on nodes.
Balancer in action
To illustrate Cellar HTTP Balancer in action, you need at least a cluster with two nodes.
On node1, we enable the Cellar HTTP Balancer:
karaf@node1()> feature:install http karaf@node1()> feature:install http-whiteboard karaf@node1()> feature:repo-add cellar 4.0.0 karaf@node1()> feature:install cellar karaf@node1()> cluster:feature-install default cellar-http-balancer
Now, we install the webconsole on node1:
karaf@node1()> feature:install webconsole
We can see the "local" servlets provided by the webconsole feature using the http:list
command:
karaf@node1()> http:list ID | Servlet | Servlet-Name | State | Alias | Url ------------------------------------------------------------------------------------------------------ 101 | KarafOsgiManager | ServletModel-2 | Undeployed | /system/console | [/system/console/*] 103 | GogoPlugin | ServletModel-7 | Deployed | /gogo | [/gogo/*] 102 | FeaturesPlugin | ServletModel-6 | Deployed | /features | [/features/*] 101 | ResourceServlet | /res | Deployed | /system/console/res | [/system/console/res/*] 101 | KarafOsgiManager | ServletModel-11 | Deployed | /system/console | [/system/console/*] 105 | InstancePlugin | ServletModel-9 | Deployed | /instance | [/instance/*]
You can access to the webconsole using a browser on http://localhost:8181/system/console.
We can see that Cellar HTTP Balancer exposed the servlets to the cluster, using the cluster:http-list
command:
karaf@node1()> cluster:http-list default Alias | Locations ----------------------------------------------------------------- /system/console/res | http://172.17.42.1:8181/system/console/res /gogo | http://172.17.42.1:8181/gogo /instance | http://172.17.42.1:8181/instance /system/console | http://172.17.42.1:8181/system/console /features | http://172.17.42.1:8181/features
On another node (node2), we install http
, http-whiteboard
and cellar
features:
karaf@node1()> feature:install http karaf@node1()> feature:install http-whiteboard karaf@node1()> feature:repo-add cellar 4.0.0 karaf@node1()> feature:install cellar
Note
|
If you run the nodes on a single machine, you have to provision org.osgi.service.http.port=8041 |
On node1, as we installed the cellar-http-balancer
using cluster:feature-install
command, it’s automatically installed
when node2 joins the default cluster group.
We can see the HTTP endpoints available on the cluster using the cluster:http-list
command:
karaf@node2()> cluster:http-list default Alias | Locations ----------------------------------------------------------------- /system/console/res | http://172.17.42.1:8181/system/console/res /gogo | http://172.17.42.1:8181/gogo /instance | http://172.17.42.1:8181/instance /system/console | http://172.17.42.1:8181/system/console /features | http://172.17.42.1:8181/features
If we take a look on the HTTP endpoints locally available on node2 (using http:list
command), we can see the proxies
created by Cellar HTTP Balancer:
karaf@node2()> http:list ID | Servlet | Servlet-Name | State | Alias | Url --------------------------------------------------------------------------------------------------------------- 100 | CellarBalancerProxyServlet | ServletModel-3 | Deployed | /gogo | [/gogo/*] 100 | CellarBalancerProxyServlet | ServletModel-2 | Deployed | /system/console/res | [/system/console/res/*] 100 | CellarBalancerProxyServlet | ServletModel-6 | Deployed | /features | [/features/*] 100 | CellarBalancerProxyServlet | ServletModel-5 | Deployed | /system/console | [/system/console/*] 100 | CellarBalancerProxyServlet | ServletModel-4 | Deployed | /instance | [/instance/*]
You can use a browser on http://localhost:8041/system/console: you will actually use the webconsole from node1, as Cellar HTTP Balancer proxies from node2 to node1.
Cellar HTTP Balancer randomly chooses one endpoint providing the HTTP endpoint.