Go to start of metadata
Version
Please use the newest JBoss EAP 6.1.0.Final to follow this document, or you'll meet a lot of bugs.
In this article, I'd like to show you how to setup JBoss AS7 in domain mode and enable clustering so we can get HA (high availability) and session replication among the nodes. It's a step to step guide so you can follow the instructions in this article and build the sandbox by yourself.
Preparation & Scenario
Preparation
Scenario
Download JBoss AS7
Domain Configuration
Interface config on master
Interface config on slave
Master
Slave
Setup HornetQ
Dry Run
Deployment
Cluster Configuration
Testing
Additional Resources
Special Thanks
Preparation & Scenario
Preparation
We need to prepare two hosts (or virtual hosts) to do the experiment. We will use these two hosts as follows:
Install Fedora 16 on them (Another linux version may also work, but I'll use Fedora 16 in this article)
Make sure the hosts are in same local network
Make sure that they can access each other via different TCP/UDP ports (it's better to turn off firewall and disable SELinux during the experiment or they will cause network problems).
Scenario
Here are some details on what we are going to do:
Let's call one host 'master' and the other one 'slave'.
Both master and slave will run AS7, and master will run as domain controller, slave will under the domain management of master.
Apache httpd will be run on master, and we'll enable the mod_cluster module in httpd. The as7 on master and slave will form a cluster and be discovered by httpd.
We will deploy a demo project into domain and verify that the project is deployed into both master and slave by domain controller. Thus we could confirm that domain management provide us a single point to manage the deployments across multiple hosts in a single domain.
We will access the cluster URL and verify that httpd has distributed the request to one of the as7 host. This helps us confirm that the cluster is working properly.
We will try to make a request to the cluster, and if the request is forwarded to master as7, we then kill the as7 process on master. After that we will go on requesting cluster and we should see that the request has been forwarded to slave, but the session has not been lost. Our goal is to verify the HA is working and sessions are replicated.
After the previous step has been completed we reconnect the master as7 by restarting it. We should see the master as7 is registered back into cluster, and we should also see slave as7 recognizes master as7 as domain controller again and connects to it.
Please don't worry if you cannot digest so all the details now. Let's move on and you will get the points step by step.
Download JBoss AS7
First we should download the AS7 from website:
The version I downloaded is 7.1.0.CR1b, please don't use the version prior to this one, or you will meet this bug when running in clustering mode:
After the download has completed, I have the zip file:
Then I unzipped the package to master and try a test run:
If everything ok we should see AS7 successfully startup in domain mode:
Now exit as7 and let's repeat the same steps on slave host. Finally we get AS7 run on both master and slave, then we can move onto the next step.
Domain Configuration
Interface config on master
In this section we'll setup both master and slave for them to run in domain mode. And we will configure master to be the domain controller.
First open the host.xml in master as7 for editing:
The default settings for interface in this file is like:
We need to change the address to the management interface so slave can connect to master. The public interface allows the application to be accessed by non-local HTTP, and the unsecured interface allows remote RMI access. My master's ip address is 10.211.55.7, so I change the config to:
Interface config on slave
Now we will setup interfaces on slave. First we need to remove the domain.xml from slave, because slave will not act as domain controller and is under the management of master. I just rename the domain.xml so it won't be processed by as7:
From AS 7.1.Final you don't need to rename domain.xml anymore.
Then let's edit host.xml. Similar to the steps on master, open host.xml first:
The configuration we'll use on slave is a little bit different because we need to let slave as7 connect to master as7. First we need to set the hostname. We change the name property from:
Then we need to modify domain-controller section so slave as7 can connect to master's management port:
As we know, 10.211.55.7 is the ip address of master.
Finally, we also need to configure interfaces section and expose the management ports to public address:
10.211.55.2 is the ip address of the slave. Refer to the domain controller configuration above for an explanation of the management, public, and unsecured interfaces.
It is easier to turn off all firewalls for testing, but in production, you need to enable the firewall and allow access to the following ports: TBD
Security Configuration
If you start as7 on both master and slave now, you will see the slave as7 cannot be started with following error:
Because we haven't properly set up the authentication between master and slave. Now let's work on it:
Master
In bin directory there is a script called add-user.sh, we'll use it to add new users to the properties file used for domain management authentication:
As shown above, we have created a user named 'admin' and its password is '123123'. Then we add another user called 'slave':
We will use this user for slave as7 host to connect to master.
Notice that the username must be equal to the name given in the slaves host element. That means that for each additional host you need a user.
In newer versions of JBoss AS7, the add-user.sh will let you choose the type of the user. Here we need to choose 'Management User' type for both 'admin' and 'slave' account:
Slave
In slave we need to configure host.xml for authentication. We should change the security-realms section as following:
We've added server-identities into security-realm, which is used for host authentication when slave tries to connect to master. Because the slave's host name is set as 'slave', so we should use the 'slave' user's password on master. In the secret value property we have 'MTIzMTIz=', which is the base64 code for '123123'. You can generate this value by using a base64 calculator such as the one at http://www.webutils.pl/index.php?idx=base64.
Then in domain controller section we also need to add security-realm property:
So the slave host could use the authentication information we provided in 'ManagementRealm'.
Setup HornetQ
The newer version of JBoss AS7 has enforced the security checking for HornetQ. So you need to some additional configuration in domain controller. Open domain.xml of master and find:
This is the config for hornetq, we need to put 'cluster-user' and 'cluster-password' into it:
There are two "<subsystem xmlns="urn:jboss:domain:messaging:1.3">" config sections in domain.xml. One is for "<profile name="full">" and another for "full-ha". If you have activated both of these two profiles, then you should put the 'cluster-user' and 'cluster-password' settings in both of them.
The 'cluster-user' and 'cluster-password' settings are just user-defined values; you can choose whatever you want. The authentication scheme used by HornetQ here is simple: when a host connects to domain controller, the HornetQ instance running on domain controller will tell the host its 'cluster-user' and 'cluster-password' settings. Then the connected host's HornetQ instance will use this setting to communicate and form a cluster with other HornetQ instances running in the domain. This is a simple but effective way to prevent some outsiders from participating on this domain's HornetQ cluster.
If you do not want to use this security scheme, just disable it in "<subsystem xmlns="urn:jboss:domain:messaging:1.3">":
Dry Run
Now everything is set for the two hosts to run in domain mode. Let's start them by running domain.sh on both hosts. If everything goes well we should see the following in the log on master:
That means all the configurations are correct and the two hosts are running in domain mode now as expected. Hurrah!
Deployment
Now we can deploy a demo project into the domain. I have created a simple project located at:
We can use git command to fetch a copy of the demo:
In this demo project we have a very simple web application. In web.xml we've enabled session replication by adding following entry:
And it contains a jsp page called put.jsp which will put current time to a session entry called 'current.time':
Then we could fetch this value from get.jsp:
It's an extremely simple project but it could help us to test the cluster later: We will access put.jsp from cluster and see the request are distributed to master, then we disconnect master and access get.jsp. We should see the request is forwarded to slave but the 'current.time' value is held by session replication. We'll cover more details on this one later.
Let's go back to this demo project. Now we need to create a war from it. In the project directory, run the following command to get the war:
It will generate cluster-demo.war. Then we need to deploy the war into domain. First we should access the http management console on master (Because master is acting as domain controller):
It will popup a windows prompting you to input an account name and a password; we can use the 'admin' account we've just added. After logging in we will see the 'Server Instances' window. By default there are three servers listed, which are:
server-one
server-two
server-three
We can see server-one and server-two are in running status and they belong to main-server-group; server-three is in idle status, and it belongs to other-server-group.
All these servers and server groups are set in domain.xml on master as7. What we are interested in is the 'other-server-group' in domain.xml:
We could see this server-group is using 'ha' profile, which then uses 'ha-sockets' socket binding group. It enable all the modules we need to establish the cluster later (including infinispan, jgroup and mod_cluster modules). So we will deploy our demo project into a server that belongs to 'other-server-group', so 'server-three' is our choice.
In newer version of JBoss AS7, the profile 'ha' changes to 'full-ha':
Let's go back to domain controller's management console:
Now server-three is not running, so let's click on 'server-three' and then click the 'start' button at bottom right of the server list. Wait a moment and server-three should start now.
Now we should also enable 'server-three' on slave: From the top of menu list on left side of the page, we could see now we are managing master currently. Click on the list, and click 'slave', then choose 'server-three', and we are in slave host management page now.
Then repeat the steps we've done on master to start 'server-three' on slave.
server-three on master and slave are two different hosts, their names can be different.
After server-three on both master and slave are started, we will add our cluster-demo.war for deployment. Click on the 'Manage Deployments' link at the bottom of left menu list.
(We should ensure the server-three are running on both master and slave)
Then enter 'Manage Deployments' page, click 'Add Content' at top right corner. Then we should choose our cluster-demo.war and follow the instruction to add it into our content repository.
Now we can see cluster-demo.war is added. Next we click 'Add to Groups' button and add the war to 'other-server-group' and then click 'save'.
After waiting a few seconds, the management console should tell you that the project is deployed into 'other-server-group'.:
Please note we have two hosts participate in this server group, so the project should be deployed in both master and slave now - that's the power of domain management.
Now let's verify this by trying to access cluster-demo from both master and slave. They should all work now:
Now that we have finished the project deployment and see the usages of domain controller, we will then head up for using these two hosts to establish a cluster
Why the port number is 8330 instead of 8080? Please check the settings in host.xml on both master and slave:
The port-offset is set to 250, so 8080 + 250 = 8330
Now we quit the as7 process on both master and slave. We have some work left on host.xml configurations. Open the host.xml of master, and make the following modifications to the servers section changing from:
We've set auto-start to true so we don't need to enable it in management console each time as7 restart. Now open slave's host.xml, and modify the server-three section:
Besides setting auto-start to true, we've renamed the 'server-three' to 'server-three-slave'. We need to do this because mod_cluster will fail to register the hosts with same name in a single server group. It will cause name conflict.
After finishing the above configuration, let's restart two as7 hosts and go on to cluster configuration.
Cluster Configuration
We will use mod_cluster + apache httpd on master as our cluster controller here. Because AS7 has been configured to support mod_cluster out of box so it's the easiest way.
The AS7 domain controller and httpd are not necessary to be on same host. But in this article I just install them all on master for convenience.
First we need to ensure that httpd is installed:
And then we need to download newer version of mod_cluster from its website:
Jean-Frederic has suggested to use mod_cluster 1.2.x. Because 1.1.x it is affected by CVE-2011-4608 With mod_cluster-1.2.0 you need to add EnableMCPMReceive in the VirtualHost.
This is in conflict with cluster module. Then we need to make httpd listen to public address so we can do the testing. Because we installed httpd on master host we know the ip address of it:
Then we do the necessary configuration at the bottom of httpd.conf:
For more details on mod_cluster configurations please see this document:
Testing
If everything goes well we can now start the httpd service:
We should see the request is distributed to one of the hosts(master or slave) from the as7 log. For me the request is sent to master:
Now I disconnect master as7 by using the management interface. Select 'runtime' and the server 'master' in the upper corners.
Select 'server-three' and kick the stop button, the active-icon should change.
Killing the server by using system commands will have the effect that the Host-Controller restart the instance immediately!
Then wait for a few seconds and access cluster:
Now the request should be served by slave and we should see the log from slave as7:
From the get.jsp we should see that the time we get is the same we've put by 'put.jsp'. Thus it's proven that the session has been correctly replicated to slave.
Now we restart master as7 and should see the host is registered back to cluster.
It doesn't matter if you found the request is distributed to slave at first time. Then just disconnect slave and do the testing, the request should be sent to master instead. The point is we should see the request is being redirected from one host to another and the session is held.
Additional Resources
If you'd like to understand how to set multiple httpd load balancers in a cluster, please refer to this article: Setting multiple mod_cluster load balancers in clustering environment
This article is focusing on AS7 domain mode + mod_cluster integration. If you are interested in using AS7 with mod_jk, please check Using mod_jk with JBoss AS7
If you want to know how to develop an application with AS7, please check [Developing JSF Project Using JBoss AS7, Maven and IntelliJ]
Special Thanks
Wolf-Dieter Fink has contributed the updated add-user.sh usages and configs in host.xml from 7.1.0.Final.
Jean-Frederic Clere provided the mod_cluster 1.2.0 usages.
Misty Stanley-Jones has given a lot of suggestions and helps to make this document readable.
Labels parameters
Looking for a label? Just start typing.
A couple of things.
1. Am I correct that the first half of this demo shows session replication, while the other half shows HTTP front-end clustering? If not, what is the second part showing?
2. I am really confused how you knew the proper way to encode the password for the host.xml file. I tried to read carefully but didn't see this mentioned as a requirement.
3. Is it possible to do any of this configuration using the Management CLI instead of editing the XML directly? We are trying to discourage people from editing the XML.
Permalink
1. The demo project itself is a very simple web app that has session replication config enabled in web.xml:
At first half of the article we've setup two hosts and make them form a domain. master is acting as domain controller+host and slave is a host that under the control of master. We then use the domain controller to deploy the web project with one click on both master and slave (by HTTP management console). So we are showing the functions provided by domain controller at this point: Provides a central point to management the project deployments across all the hosts in domain.
Then we use mod_cluster module in http to connect with two AS7 hosts to form a cluster. And then we create a scenario by disconnecting a host that is accepting requests to test the failover are working correctly, and sessions are replicated to the other host. Actually this is achieved by Infinispan, JGroup and mod_cluster modules together, which are defined in domain.xml. They are just configured out of box.
I should explain more details on the clustering in article. I'll add them soon.
2. It's described in this doc:
https://docs.jboss.org/author/display/AS7/Admin+Guide#AdminGuide-Secret
I just use bash command to generate the base64 encoded message. I'll add more details on this one.
3. Most of the configurations in this article could not be done by using CLI. Because these are the configurations that should be completed before server start(Like IP bindings, etc).
Permalink
I was wondering when i start the slace host controller i get the follow message
[Server:malcolm] 20:34:34,179 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) Operation ("add") failed - address: ([("interface" => "unsecure")]) - failure description: "JBAS014763: any-address is required"
why am i getting this error I am jboss 7.1 final on wondows. is this saying that my host can not connect to the unsecure interface. I notice that I also do not see my servers on the domain control panel.
Permalink
Sorry I couldn't reproduce your problem on my machines. Maybe posting host.xml on both your master and slave to https://gist.github.com/ and provide a link here could be more helpful for me to investigate your problem.
Permalink
Hi Weinan;
Thanks for the cluster guide. It was really helpfull in getting everything set up. However I used a Windows XP pro OS, and the MS Loopback adapter with 3 custom IP's. I then used these as my "servers". All goes well and the clustering from the JBoss 7.1 AS servers works well. However when I try to setup the httpd server I run into problems.
I first tried a already installed Apache HTTP server with the mod_x.so mentioned just copied from the mod_cluster zip file, and the config you mentioned. No dice. Then I tried both the 1.20 mod cluster httpd and the 1.1.3 without any success. I can get the default "IT WORKS" page, but it seems not to forward to the JBoss AS 7.1 when trying to access cluster_demo.
Here are the questions I have. If you are not running the httpd on the same server as the master jboss, what is the ip supposed to be for the following:
Listen <?>:6666
<VirtualHost <?>:6666>
Allow from <?>
Permalink
Hi Gerhard,
I'm a little bit confused about your problem. You said the mod_cluster doesn't work in http. But then you said you can get the default page when accessing cluster url. Could you please tell me more details on your problem?
For the listening address configurations of httpd, you should set the Listen to the IP address of your host which httpd is running on, and please ensure the IP address are in same local network with your AS7 hosts.
VirtualHost address should be same with the Listen address, which is also the IP address that your httpd is running on.
Allow from should be set to the subnet address that all your machines are in(Your httpd and AS7 hosts are all in same subnet right? Please ensure that's true).
Permalink
The Apache HTTP zip comes with a page in the htdocs directory with one index.html file that just reads "IT WORKS!" So when I go to http://localhost/ thats what I get. However when I try to go to http://localhost/cluster-demo/put.jsp I just get a 404. So what I am seeing is that its trying to get cluster-demo/put.jsp from the htdocs directory. So the mod_cluster on its own does nothing. Do we need to add a entry to forward all requests of a certain type to the server?
Permalink
Sounds like your 'other-server-group' in AS7 is not started. Please login into AS7 management console and ensure 'other-server-group' is running.
Permalink
Hi Weinan
After struggling with my own httpd setup I finally removed and installed mod_cluster-1.2.0.Final-linux2-x64-ssl.tar.gz
That solved a lot of issues, I now see:
127.0.0.1 - - [26/Feb/2012:10:27:38 +0700] "STATUS / HTTP/1.1" 200 85
127.0.0.1 - - [26/Feb/2012:10:27:48 +0700] "STATUS / HTTP/1.1" 200 85
127.0.0.1 - - [26/Feb/2012:10:27:58 +0700] "STATUS / HTTP/1.1" 200 85
127.0.0.1 - - [26/Feb/2012:10:28:08 +0700] "STATUS / HTTP/1.1" 200 85
in the httpd access_log
I see the welcome on port 8000 (httpd has Listen 8000)
httpd.conf has the following directives:
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
Listen 127.0.0.1:6666
ManagerBalancerName mycluster
<VirtualHost 127.0.0.1:6666>
<Location />
Order deny,allow
Deny from all
Allow from all
</Location>
KeepAliveTimeout 300
MaxKeepAliveRequests 0
#ServerAdvertise on http://@IP@:6666
AdvertiseFrequency 5
#AdvertiseSecurityKey secret
#AdvertiseGroup (ADVIP):23364
EnableMCPMReceive
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from 127.0.0
</Location>
</VirtualHost>
</IfModule>
My last question is, how do I get to the web service from my front end
The front end is a c sharp application that connect with:
<client>
<endpoint address="http://192.168.2.3:8082/beans/XMLTranServiceBean/XMLTranServiceBean"
binding="basicHttpBinding" bindingConfiguration="XMLTranServiceBeanSoapBinding"
contract="CapitalWebService.XMLTranServiceBean" name="XMLTranServiceBeanPort" />
</client>
The above example works because it goes straight to JBoss http port (as defined in domain.xml).
The question is: how do I play this into the cluster via httpd ?
To put it simply, I am looking for the mod_cluster equivalent of the mod_jk config file workers.properties
It had this directive inside: /STARXMLTranServiceBean/STAR=loadbalancer (STAR = * which seems to be meaningful with this editor)
That fished out my front end transactions in httpd before, any URL with the above strings inside would go to JBoss 4 via Tomcat 8009
How does that work with mod_cluster ?
Thanks and best regards
Johan Vermeij
Jakarta
Permalink
Hi Johan,
After two AS7 hosts are setup they can be accessed directly by their own IPs. And session replication is working with the help of JGroup and Infinispan configured out-of-box in AS7 domain.xml. But the cluster is useless if we could not have a 'single entry point' for user to access(We don't want the users to know each AS7 node's IP address).
So we need mod_cluster+httpd to provide an address that user could use for accessing the cluster: httpd will provide a listening IP address that user can access, and mod_cluster is used to distribute the requests to one of the node in cluster(depending on each node's load, such as CPU load, memory usage, request numbers, etc.)
I guess you have gotten the idea now :-) So the endpoint address used in your web service should not be one of the AS7 host's ip address. It should be http://<your_httpd_listening_address>:8000 (Because you said your httpd is listening on port 8000).
In my example I've put httpd on the same machine with one of the AS7 host, so the IP address sames like the same with master AS7 ip address. This may create some confusions :-) It could be more clear if I use three machines to show the demo then you could see the httpd IP address is standalone.
Actually we don't have to use mod_cluster to do the request distribution, we could use LVS, or even hardware devices. But with mod_cluster we could get some nice features out of box such as nodes auto-discovery, recovered host auto registering back, etc. Because both mod_cluster and AS7 are developed by JBoss dev team and they are designed to be integrated with each other nicely :-)
So let's go back to your httpd config, you should set it to listen to a public ip address instead of 127.0.0.1, and you could access your cluster by http://<your_httpd_listening_address>:<your_httpd_listening_port>
Hope these could help.
Permalink
Hi Weinan
I am sorry to say but I still cannot get anything into the cluster (but I can send client transactions to both master and slave on port 8082 as defined in domain.xml on the master. The slave does not have a domain.xml as per instruction. It reads domain.xml from the server using port 9999).
I have installed httpd on a third machine now.
The warning below is something I never got before:
[Thu Mar 01 19:52:04 2012] [notice] Child 3464: Child process is running
[Thu Mar 01 19:52:04 2012] [notice] Child 3464: Acquired the start mutex.
[Thu Mar 01 19:52:04 2012] [notice] Child 3464: Starting 64 worker threads.
[Thu Mar 01 19:52:04 2012] [notice] Child 3464: Starting thread to listen on port 6666.
[Thu Mar 01 19:52:04 2012] [notice] Child 3464: Starting thread to listen on port 8000.
[Thu Mar 01 19:52:09 2012] [warn] manager_handler STATUS error: MEM: Can't read node
That looks a lot like the good old node under mod_jk load balancing.
Does this mean anything to you ?
I listen on port 8000, this is the first time that httpd tries to access the cluster, before I always went straight to DocumentRoot.
My end point is a web service under JBoss 7 AS
Thanks and best regards
Johan
Permalink
The above warning only came out once.
Now I am back to good old "no end point found".
This is from the Apache httpd log
192.168.2.2 - - [01/Mar/2012:20:07:04 +0700] "POST /beans/XMLTranServiceBean/XMLTranServiceBean HTTP/1.1" 404 1088
192.168.2.4 - - [01/Mar/2012:20:07:10 +0700] "STATUS / HTTP/1.1" 200 85
192.168.2.3 - - [01/Mar/2012:20:07:12 +0700] "STATUS / HTTP/1.1" 200 85
192.168.2.4 - - [01/Mar/2012:20:07:20 +0700] "STATUS / HTTP/1.1" 200 85
192.168.2.3 - - [01/Mar/2012:20:07:22 +0700] "STATUS / HTTP/1.1" 200 85
192.168.2.4 - - [01/Mar/2012:20:07:30 +0700] "STATUS / HTTP/1.1" 200 85
192.168.2.3 - - [01/Mar/2012:20:07:32 +0700] "STATUS / HTTP/1.1" 200 85
We are now working with 2 people on this, both are very experienced IT professionals.
We have a feeling that we are missing a small detail somewhere.
How does httpd know which port to use when it sends messages to JBoss 7 AS ?
Or is that automatically discovered ?
Permalink
I made some changes to the article, to simplify exactly what needs to be configured. Tomorrow I will make some more changes to keep things secure (exactly what needs to be changed on the firewall and selinux configs).
Permalink
Hi Weinan,
I am having similar issue faced by Gerhard Visagie.
Able to view "It Works" page when http://172.18.140.91:666 is specified. However when we say http://172.18.140.91/cluster-demo/put.jsp getting page not found error.
Following error is logged in AS7 :
"18:05:31,228 ERROR [org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [null: null:
Unknown macro: {4}
] sending command INFO to proxy mach.cmcltd.com/172.18.140.91:6666, configuration will be reset"
Following error is logged in Apache:
[Fri Mar 02 18:07:11 2012] [error] [client 172.18.140.91] Invalid method in request INFO / HTTP/1.1
We are using JBOSS AS 7.1.0 final, Apache 2.2.22 and mod_cluster 1.2.0
And the configuration in httpd.conf :
<VirtualHost 172.18.140.91:6666>
<Directory />
Order deny,allow
Deny from all
Allow from all
</Directory>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName other-server-group
AdvertiseFrequency 5
EnableMCPMReceive
</VirtualHost>
Permalink
The question is: how does httpd know what goes to DocumentRoot and what goes to the JBoss cluster.
This (I could be wrong) needs some filter mechanism, something has to be fished out of the URL.
As I asked before:
-----------------------------------------
To put it simply, I am looking for the mod_cluster equivalent of the mod_jk config file workers.properties
It had this directive inside: /STARXMLTranServiceBean/STAR=loadbalancer (STAR = * which seems to be meaningful with this editor)
That fished out my front end transactions in httpd before, any URL with the above strings inside would go to JBoss 4 via Tomcat 8009
How does that work with mod_cluster ?
------------------------------------------
In my view nothing can be intelligent enough to decide what goes where.
httpd may be serving many web sites, subversion interfave, php interface etc
Permalink
I don't hear much.
Either everybody is up and running with mod_cluster load balancing or ...
Anyway, I just try things:
I changed domain.xml (the XMLTranServiceBean is in the URL that I send to the webservice):
<subsystem xmlns="urn:jboss:domain:webservices:1.1">
<modify-wsdl-address>true</modify-wsdl-address>
<wsdl-host>$
Unknown macro: {jboss.bind.address}
</wsdl-host>
<endpoint-config name="Standard-Endpoint-Config"/>
<endpoint-config name="Recording-Endpoint-Config">
<pre-handler-chain name="recording-handlers" protocol-bindings="/XMLTranServiceBean/">
<handler name="RecordingHandler" />
</pre-handler-chain>
</endpoint-config>
</subsystem>
This gave me the following error in the Apache httpd error log:
[Sat Mar 03 12:13:30 2012] [error] [client 192.168.2.2] (OS 10054)An existing connection was forcibly closed by the remote host. : proxy: error reading status line from remote server 192.168.2.4:8332
[Sat Mar 03 12:13:30 2012] [error] [client 192.168.2.2] proxy: Error reading from remote server returned by /beans/XMLTranServiceBean/XMLTranServiceBean
And I see the following in the server-three-slave log:
20:28:04,243 WARNING [org.jgroups.protocols.UDP] (OOB-20,null) null: no physical address for 2864c345-49ad-670b-dc4a-083fd7156c5a, dropping message
20:28:18,037 INFO [org.apache.coyote.http11.Http11AprProtocol] (MSC service thread 1-4) Pausing Coyote HTTP/1.1 on http--192.168.2.4-8332
20:28:18,049 INFO [org.apache.coyote.http11.Http11AprProtocol] (MSC service thread 1-4) Stopping Coyote HTTP/1.1 on http--192.168.2.4-8332
20:28:18,335 INFO [org.jboss.as.osgi] (MSC service thread 1-4) JBAS011942: Stopping OSGi Framework
20:28:21,222 INFO [org.jboss.as.deployment.connector] (MSC service thread 1-3) JBAS010410: Unbound JCA ConnectionFactory [java:/JmsXA]
20:28:20,479 INFO [org.jboss.modcluster.ModClusterService] (MSC service thread 1-2) All active sessions drained from context [/wssimple] in 0 seconds
20:28:25,082 INFO [org.jboss.as.webservices] (MSC service thread 1-3) JBAS015540: Stopping service jboss.ws.port-component-link
20:28:29,103 ERROR [org.apache.catalina.core.ContainerBase] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Exception invoking periodic operation: : java.lang.IllegalStateException
at org.jboss.modcluster.container.catalina.CatalinaEngine.getProxyConnector(CatalinaEngine.java:153)
at org.jboss.modcluster.ModClusterService.status(ModClusterService.java:464)
at org.jboss.modcluster.container.catalina.CatalinaEventHandlerAdapter.lifecycleEvent(CatalinaEventHandlerAdapter.java:239)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:115) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590) [jbossweb-7.0.10.Final.jar:]
at java.lang.Thread.run(Thread.java:636) [rt.jar:1.6.0_20]
So there is a pass through mechanism, same as in mod_jk.
No software can be so intelligent that it can decide what goes where, that is for sure.
And Apache httpd can do a lot of things at once.
I only get this error on the slave and I only get it once, I have to restart the slave server to reproduce the error.
Who knows what the correct parameters are ?
Thanks
Johan
Permalink
I'm not so familiar with the WebServices configuration in domain.xml (I generally use JAX-RS which has configured out-of-box by AS7), that may need some extra configurations for it to work in cluster environment.
Permalink
Hi Shyam,
Similar with what I've replied to Gerhard, sounds like your 'other-server-group' in AS7 is not started. Please login into AS7 management console and ensure 'other-server-group' is running.
In addition, the 6666 port is the management port of mod_cluster. If you've seen 'it works', then there's something wrong. You can try to add following config into virtual-host:
After restarting the HTTP server, try to access 6666 port:
You should see the management console of mod_cluster:
Permalink
Hi [Weinan Li||\||]
Now i have tried clustering for standalone application with AS7 and Apache 2.2. First i
will explain what i did.
First i run the standalone server on ip:192.168.111.19:8231
And following is the changes what i did in httpd.conf file
Now following is the code which i changed in httpd-vhosts.conf file
Now when i start the server i cant get the advertise message and i cant get my application
from following i.p:192.168.111.19/Demo/test.jsp. When i checked through :list-proxies command
in jboss-cli.bat file then it shows no proxy. Then i add the proxy through the following command
Proxy was added successfully. Then i can get the application from
192.168.111.19/Demo/test.jsp. Now when i monitor the mod-cluster-manager in my browser
then i got the following screen.
So following are the problems:
I cant get specific node name. So how can i get?
Now in jboss-cli.bat file if i tried for :read-proxies-configuration command i get
following output:
So here i cant get JVMRoute specifically. So what should i do?
And i cant get specific clustering.
And can you say me how clustering and load balancing is done in standalone mode.
Thanks in advance
Permalink
We have put almost 3 weeks into getting the new load balancing working with JBoss AS 7 and mod_cluster. We = two very experienced professional IT people with a shared experience spannbsp&of around 60 years.
I am very grateful to the community members who have put lots of effort into the new JBoss clustering.
These are my observations:
1) Setting up clustering under Unix / Linux is a breeze. I set it up under 30 minutes on Mac OS X yesterday (that made me very happy, amazing software). I also had two instances running under Centos 6.
2) Setting up the same, using the same domain.xml and host.xml files from Unix/Linux, under Windows 7 is very cumbersome. Despite all our efforts we could not make it work
3) mod_jk load balancing works using a httpd instance and 2 (or more) JBoss standalone (not domain) instances
4) We cannot get anything into the cluster using mod_cluster via httpd. We can send transactions to all cluster instances but we cannot send anything to the actual cluster. And for intelligent load balancing we have to be able to send transactions to the cluster, not to cluster members. Otherwise you get the same inflexible load balancing as under mod_jk where you have to guess how busy a server is going to be.
Permalink
I can get to the point where I can see the mod_cluster-manager, but I can't access my deployed app via Apache, only directly via JBoss Web. I think there is some subsystem configuration or something that is missing, that tells Apache where to look for the deployment in the AS server. I'll look into it and post back here when I find it.
Permalink
What a difference a day can make.
Today we managed to bring up a cluster under Windows 7 and we managed to get transactions into the cluster using port 8000.
I have Apache httpd running on a Windows XP box and 2 JBoss instances on a Linux server and an iMac.
Please see below for the httpd VirtualHost config (192.168.2.2 is the XP box, no need to make reference to any cluster members by IP address, that is automatic. Please note the URL used by ProxyPass (as per Jean Frederic's suggestion).
Having different logs per VirtualHost is also nice, it makes things more readable.
-------------------
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule advertise_module modules/mod_advertise.so
LoadModule manager_module modules/mod_manager.so
# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
Listen 192.168.2.2:6666
ManagerBalancerName other-server-group
<VirtualHost 192.168.2.2:6666>
<Location />
Order deny,allow
Deny from all
Allow from all
</Location>
ErrorLog "logs/chatter_log"
LogLevel debug
KeepAliveTimeout 300
MaxKeepAliveRequests 0
#ServerAdvertise on http://127.0.0.1:6666
AdvertiseFrequency 30
#AdvertiseSecurityKey secret
#AdvertiseGroup 224.0.1.105:23364
EnableMCPMReceive
# <Location /mod_cluster_manager>
# SetHandler mod_cluster-manager
# Order deny,allow
# Deny from all
# Allow from all
# </Location>
</VirtualHost>
</IfModule>
NameVirtualHost 192.168.2.2:8000
<VirtualHost 192.168.2.2:8000>
ServerAdmin johanvermeij@gmail.com
ServerName 192.168.2.2
ErrorLog "logs/cluster_log"
LogLevel debug
# ServerAlias 192.168.1.10
ProxyPass '/beans/XMLTranServiceBean/XMLTranServiceBean' balancer://other-server-group stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://other-server-group
ProxyPreserveHost On
<Location />
Order deny,allow
Allow from All
</Location>
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from all
</Location>
</VirtualHost>
Permalink
Session replication doesn't seem to work for me. I followed the steps in this guide, but when I kill server three in master, the process also destroys the session that has been made. So when I run the get.jsp in slave, it shows that time is null (it didn't get any session).
Is there something else that I should configure?
Thanks!
Permalink
Can you write down what you do, step by step.
We do the following:
set auto-start for server-three to false in host.xml on master
run domain.sh in master
start server-three using admin console on port 9990
deploy the application through the console (deploy to ha only)
set auto-start for server-three-slave to false in host.xml on slave
remove or rename domain.sh in slave
run domain.sh in salve
start server-three-slave using admin console (this will trigger deployment to the slave)
see if you can access the http port on master and slave (as per http port defined in domain.xml)
see if you can access the cluster using httpd (port 8000 as per above example, up to you which port to use)
What do you do next ?
If you let me know I will simulate it and send you the results
Permalink
hi johan!
remove or rename domain.sh in slave, run domain.sh in salve.
Should be deleted or renamed domain.xml!And then perform the the slave Node of domain.bat, Do not error?Because domain.bat references the domain.conf.bat When you edit domian.conf.bat, you will find set JAVA_OPTS = the% JAVA_OPTS percent-Djboss.domain.default.config =, domain.xml-Djboss.host.default.the config = host.xml this line command.
Mar 09, 2012[Johan|../../../../../../../../../../display/~johanvermeij]!
Permalink
hi! how do you configure JBoss AS 7.1.1 for clustering? I did the same steps here, but I cannot even get cluster-demo to deploy to all nodes. Also, my httpd cannot detect the nodes.
Permalink
If you see a lot of infinispan errors (your deployment "hangs") do the following:
1) Download the latest infinispan libraries and put them in \jboss-as-7.1.0.Final\modules\org\infinispan
2) Locate in domain.xml:
<subsystem xmlns="urn:jboss:domain:infinispan:1.1" default-cache-container="hibernate">
<cache-container name="hibernate" default-cache="local-query">
<local-cache name="entity">
<transaction mode="NON_XA"/>
<eviction strategy="LRU" max-entries="10000"/>
<expiration max-idle="100000"/>
</local-cache>
<local-cache name="local-query">
<transaction mode="NONE"/>
<eviction strategy="LRU" max-entries="10000"/>
<expiration max-idle="100000"/>
</local-cache>
<local-cache name="timestamps">
<transaction mode="NONE"/>
<eviction strategy="NONE"/>
</local-cache>
</cache-container>
</subsystem>
Change <eviction strategy="NONE"/> under "timestamps" to <eviction strategy="NONE" max-entries="0" />
That was the finishing touch for us, the cluster was established after we changed that.
Remember that only HA (High Availability) is clustered so only deploy to HA
As always, the problems are not big but tricky.
The max-entries one is crucial.
Permalink
thanks, i will try that! is it also required to add the AJP connector and socket-binding for ha-sockets in the domain.xml?
Permalink
We didn't use the AJP connector, HTTP only
I attach the master and slave config files (only domain.xml (master, shared with slave) and host.xml (master and slave) matter)
configuration_master_and_slave.rar
Permalink
hi. i get this error message when i don't use the AJP connector:
Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /cluster-demo.
Reason: Error reading from remote server
Permalink
i'm still encountering a lot of errors when deploying large web applications in the cluster, i've been experiencing the following errors
over and over again:
1. JBAS010806: Caught exception closing input stream: java.io.IOException: Stream closed
2. ISPN000097: Error while processing 1PC PrepareCommand: org.infinispan.CacheException: java.lang.RuntimeException:
Failure to marshal argument(s)
3. org.infinispan.CacheException: Could not commit.
4. java.util.concurrent.ExecutionException: org.infinispan.CacheException: org.jgroups.TimeoutException:
timeout sending message to master:server-three/web
5. ISPN000172: Failed to prepare view CacheView
Permalink
This is an excellent how to guide for a starter like me on Jboss..
However I have a question from above howto..In Apache Config, May this has been answered.. But I haven;t understood.. Sorry guys am a starter on Jboss
I set a similar 2 node cluster but a small differenc ei I had setup apache on my two nodes.. so that I can do a Lload Blancing using Pound.
No my question is I followed instructions as it is from the doc. and went to do the same
I 'am listening on on 10001 in my apache config
http:<hostname>:10001/mod_cluster-manager works fine :)
http:<hostname>:10001/cluster-demo works fine
however if I go
http:<hostname>/cluster-demo doesn't work as it shows in the demo and screen shots
is there something am doing wrong ?
thi sis what am using my httpd.conf and
Listen 10.36.200.10:10001
MemManagerFile /apps/cache/httpd
<VirtualHost 10.36.200.10:10001>
<Directory />
Order deny,allow
Deny from none
#Allow from 10.36.
</Directory>
ServerAdvertise On
EnableMCPMReceive
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName mycluster
AdvertiseFrequency 5
</VirtualHost>
<Location /mod_cluster-manager>
Listen 10.36.200.16:10001
MemManagerFile /apps/cache/httpd
<VirtualHost 10.36.200.16 :10001>
<Directory />
Order deny,allow
Deny from none
</Directory>
EnableMCPMReceive
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName mycluster
AdvertiseFrequency 5
</VirtualHost>
<Location /mod_cluster-manager>
am I doing anything wrong ?
S
Permalink
These instructions work for jboss-as-7.1.0.Final "Thunder" but not for jboss-as-7.1.1.Final "Brontes". On 7.1.1, starting server-three fails with "jboss.binding.jacorb (missing) dependents" as in https://community.jboss.org/thread/197320
Permalink
Try using full-ha-sockets in other-server-group.
Permalink
Everything works fine, except the last step - http://<ip_address>cluster-demo/get.jsp :-( . I even read the above, and I saw few people having similar problems. I have checked that other-group server instance is up.
I was also able to access mod_cluster-manager.
Could you explain how does it know that it has to connect to JBoss ? probably I am missing something very basic here !
http://<your_ip_address>:<port>/mod_cluster-manager
http://<ip_address>cluster-demo/get.jsp
Permalink
Finally I got this working.
mod_cluster version - 1.2.0.FINAL
JBoss AS7.1.1 FINAL.
There were couple of changes I had to do in domain.xml.
1.) Had to add in web subsystem
Update :A known issue : https://issues.jboss.org/browse/JBPAPP-8451
2.) proxy-list="<ip address>:<portno.> " under <subsystem xmlns="urn:jboss:domain:modcluster:1.0"> in <mod-cluster-config advertise-socket="modcluster" proxy-list="IP:Port">
So I guess the change 2 is required because due to some reason JBoss does not seem to work out of the box. Looks like an issue there with 7.1.1.
Without (1) there were errors in JBoss AS7 server instances like - manager_handler CONFIG error: MEM: Old node still exist
Permalink
Hi
I have observed the following while trying to set up clustering in single pc on domain mode (no slave configuration). If you find some tweaking to these issues, please let me know.
A). to cluster to be correctly operate, socket group name of the
server group where the profile name=”full-ha”,must be in “full-ha-sockets”.The bare minimum requirement is “ha-sockets”though it doesn’t correctly operate the “failover” concept. (if one server is down it will stop responding to user requests and the other servers in the cluster will not serve the requests). Additionally server start with errors (dependency issues) as follows.
JBAS014775: New missing/unsatisfied dependencies:
service jboss.binding.jacorb (missing) dependents: [service jboss.jacorb.orb-service]
service jboss.binding.jacorb-ssl (missing) dependents: [service jboss.jacorb.orb-service]
service jboss.binding.messaging (missing) dependents: [service jboss.messaging.default]
service jboss.binding.messaging-throughput (missing) dependents: [service jboss.messaging.default]
B). To operate on “full-ha-sockets”,you cannot “auto-start” more than one server in the server group. If you do, it will create a deadlock situation.
ERROR [org.hornetq.core.protocol.core.impl.HornetQPacketHandler] (Old I/O server worker (parentId: 18599604, [id: 0x011bceb4, localhost/127.0.0.1:5695])) Failed to create session : HornetQException[errorCode=105 message=Unable to validate user: HORNETQ.CLUSTER.ADMIN.USER]
at org.hornetq.core.security.impl.SecurityStoreImpl.authenticate(SecurityStoreImpl.java:126) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.server.impl.HornetQServerImpl.createSession(HornetQServerImpl.java:807) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.impl.HornetQPacketHandler.handleCreateSession(HornetQPacketHandler.java:187) [hornetq-core-2.2.13.Final.jar:]
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44) [netty-3.2.6.Final.jar:]
C) Even after you start the server and try to start other servers in the group through admin console, it will enter to deadlock state.
However difference between “full-ha-sockets”and “ha-sockets” configuration is “full-ha-sockets” configuration still operate and serve the user request in this situation. (Server which is auto started at boot, will continuously serve the request unless you stop this server, and keep other in the same server group).
Thanks
Suwath
Permalink
Hi:
Thanks for any help. At the point 2, what IP and Port should I put?
Permalink
Thank you very much Rang S. After almost 2 days for trying out various things, I came across your suggestions and it works for me now like a breeze. You have helped me a lot and saved my time.
Permalink
when i start server-three on master is working fine, but when i start server-three on 'slave' getting the following error
[Server:server-three] 07:13:38,903 ERROR [org.hornetq.core.protocol.core.impl.Ho
rnetQPacketHandler] (Old I/O server worker (parentId: 594465015, [id: 0x236ed0f7
, hostname/192.168.1.2:5695])) Failed to create session : HornetQException[er
rorCode=105 message=Unable to validate user: HORNETQ.CLUSTER.ADMIN.USER
Please find the attached file which i have configured
Permalink
Try the below link...it has the solution and why this problem occurs.
https://community.jboss.org/thread/195452
Permalink
Thanks for your valuable response.. now i am getting
[Server:server-three] 20:53:05,768 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Can't read node:
Unknown macro: {4}
] sending command STATUS to proxy 192.16
8.1.2:6666, configuration will be reset
Permalink
Could you paste some more of the stack trace? are u running all of your servers in master and slave on the same machine ?
Permalink
Both are running in different machines but on same network. master at 192.168.1.2 and slave at 192.168.1.3. default gateway is
192.168.1.1., http server running at 192.168.1.2 (on master machine )
STACK TRACE:
[Server:server-three] 21:11:18,247 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Old node still exist:
Unknown macro: {4}
] sending command CONFIG to proxy DivyaArvind/1
92.168.1.2:6666, configuration will be reset
[Server:server-three] 21:11:38,268 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Can't read node:
] sending command STATUS to proxy DivyaArvind/192.16
8.1.2:6666, configuration will be reset
[Server:server-three] 21:11:48,278 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Old node still exist:
Unknown macro: {4}
] sending command CONFIG to proxy DivyaArvind/1
92.168.1.2:6666, configuration will be reset
[Server:server-three] 21:12:08,298 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Can't read node:
] sending command STATUS to proxy DivyaArvind/192.16
8.1.2:6666, configuration will be reset
[Server:server-three] 21:12:18,308 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Old node still exist:
Unknown macro: {4}
] sending command CONFIG to proxy DivyaArvind/1
92.168.1.2:6666, configuration will be reset
[Server:server-three] 21:12:38,329 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Can't read node:
] sending command STATUS to proxy DivyaArvind/192.16
8.1.2:6666, configuration will be reset
[Server:server-three] 21:12:48,340 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Old node still exist:
Unknown macro: {4}
] sending command CONFIG to proxy DivyaArvind/1
92.168.1.2:6666, configuration will be reset
*httpd.conf file:*
Listen 192.168.1.2:6666
<VirtualHost 192.168.1.2:6666>
<Location />
Order deny,allow
Allow from all
</Location>
# This directive allows you to view mod_cluster status at URL http://192.168.1.2:6666/mod_cluster-manager
<Location /mod_cluster-manager>
SetHandler mod_cluster-manager
Order deny,allow
Allow from 192.168.1.
</Location>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName other-server-group
AdvertiseFrequency 5
EnableMCPMReceive
</VirtualHost>
Permalink
I feel the port of server three is overlapping with a different server, can u try by giving a different offset in host.xml ?
Permalink
i changed the port but getting the same error. please find attached file which contains config details
Permalink
From your config files I see you have the following :-
1.) Master
server- one
server-two -> offset -150
server-three -> offset ->250
2.) Slave
server- one
server-two -> offset -150
server-three -> offset ->250
So are you starting 6 servers in total (3 in each machine ? ) ? To debug start each of the servers one after another (disable auto start =true in domain.xml host.xml of master and slave) and find out on start of which of the server causes this problem to be showing up in console continously?
Another simple test you can try if it is indeed caused by port - change offset for server two and server three in Master to 151 and 251 and in slave as 101 and 201 (or some odd numbers) (This is just a guess )
Permalink
I followed what you said. first i started server three of master (it went fine, no errors) but when i started server three of
slave, getting error continuously
[Server:server-three] 22:42:03,808 ERROR [org.jboss.modcluster.mcmp.impl.Default
MCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [ME
M: MEM: Old node still exist:
Unknown macro: {4}
] sending command CONFIG to proxy DivyaArvind/1
92.168.1.2:6666, configuration will be reset
Even i tried changing port , but no use
Permalink
Ok, the ports are not the cause, this is an issue with AS7. To get this working you would need to add an instance id in web subsystem. you cannot hard-code this to master, instead you need to have:-
thanks now the error has gone.... but nothing display when i test the deployed demo on browser.
Please help me, Do i need to change/add anything on http server CONFIG?
I am able to access mod_cluster-manager.
Permalink
How are you testing it ? http://192.168.1.2:6666/cluster-demo ?
Permalink
finally i got everything ....
1) I made a call to put.jsp, it was directed to master machine and i stopped server three of
master. made a call to get.jsp and it was directed to slave machine. everything fine.
2) Brought back server three of master, now again i made a call to put.jsp and it was
failed 'service temporary unavailable'
3) the error on console when i brought back 'master'
[Server:server-three] 23:46:22,379 WARN [org.hornetq.core.cluster.impl.Di
scoveryGroupImpl] (hornetq-discovery-group-thread-dg-group1) There are more than
one servers on the network broadcasting the same node id. You will see this mes
sage exactly once (per node) if a node is restarted, in which case it can be saf
ely ignored. But if it is logged continuously it means you really do have more t
han one node on the same network active concurrently with the same node id. This
could occur if you have a backup node active at the same time as its live node.
nodeID=6498e4cb-8061-11e1-a0d6-24b6fd012f2a
4) Error logs in HTTP server:
[Sun Apr 08 23:46:59 2012] [error] proxy: CLUSTER: (balancer://other-server-group). All workers are in error state
Permalink
Point 3 is not an error if you get it only once (during restart). I dont' have an idea of why you get this issue.
Some points you may want to check :-
1.) Hope you have <distributable/> in your web.xml.
2.) Any errors when you brought up the master , server three (related to cache) , also any errors in slave - master three.
Dont have a setup, I'll check this example again and get back to you later.
Permalink
message from management console. i sent you an email please check it.
i was not able to attach a file here.
Thanks for your co-operation
Permalink
OK, so I decided to try using linux instead of windows XP. I used Virtualbox with two Ubuntu server installs. I used JBoss AS 7.1 and jdk 7.0.3. After configuration of the cluster I deploy the "cluster-demo.war". The deploy screen then gets stuck in "Please wait: Your request is being processed ...".
In the log I get this printout for master:
[Server:server-three] 10:02:53,654 INFO [org.jboss.as.server] (host-controller-connection-threads - 2) JBAS015870: Deploy of deployment "cluster-demo.war" was rolled back with failure message JBAS014750: Operation handler failed to complete
[Server:server-three] 10:02:53,664 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-1) JBAS010282: Stopped //default-host//cluster-demo cache from web container
[Server:server-three] 10:02:53,778 INFO [org.infinispan.eviction.PassivationManagerImpl] (pool-14-thread-1) ISPN000029: Passivating all entries to disk
[Server:server-three] 10:02:53,779 INFO [org.infinispan.eviction.PassivationManagerImpl] (pool-14-thread-1) ISPN000030: Passivated 0 entries in 0 milliseconds
[Server:server-three] 10:02:53,783 INFO [org.jboss.as.clustering.infinispan] (pool-14-thread-1) JBAS010282: Stopped repl cache from web container
[Server:server-three] 10:02:53,794 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment cluster-demo.war in 148ms
[Server:server-three] 10:02:53,998 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (pool-12-thread-1) ISPN000082: Stopping the RpcDispatcher
[Server:server-three] 10:02:54,119 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (Incoming-7,null) ISPN000094: Received new cluster view: [master:server-three/web|2] [master:server-three/web]
[Host Controller] 10:02:54,129 ERROR [org.jboss.as.controller.management-operation] (HttpManagementService-threads - 1) JBAS014612: Operation ("composite") failed - address: ([]): java.lang.IllegalArgumentException
[Host Controller] at org.jboss.dmr.ModelValue.getChild(ModelValue.java:108) [jboss-dmr-1.1.1.Final.jar:1.1.1.Final]
[Host Controller] at org.jboss.dmr.ModelNode.get(ModelNode.java:798) [jboss-dmr-1.1.1.Final.jar:1.1.1.Final]
[Host Controller] at org.jboss.as.domain.controller.operations.coordination.DomainFinalResultHandler.collectHostFailures(DomainFinalResultHandler.java:158) [jboss-as-host-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.domain.controller.operations.coordination.DomainFinalResultHandler.execute(DomainFinalResultHandler.java:80) [jboss-as-host-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:385) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:272) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.AbstractOperationContext.completeStep(AbstractOperationContext.java:200) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.domain.controller.operations.coordination.OperationCoordinatorStepHandler.executeTwoPhaseOperation(OperationCoordinatorStepHandler.java:225) [jboss-as-host-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.domain.controller.operations.coordination.OperationCoordinatorStepHandler.execute(OperationCoordinatorStepHandler.java:118) [jboss-as-host-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.domain.controller.operations.coordination.PrepareStepHandler.execute(PrepareStepHandler.java:85) [jboss-as-host-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:385) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:272) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.AbstractOperationContext.completeStep(AbstractOperationContext.java:200) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:121) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.ModelControllerImpl$1.execute(ModelControllerImpl.java:309) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.controller.ModelControllerImpl$1.execute(ModelControllerImpl.java:299) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.domain.http.server.DomainApiHandler.processRequest(DomainApiHandler.java:294) [jboss-as-domain-http-interface-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.domain.http.server.DomainApiHandler.doHandle(DomainApiHandler.java:201) [jboss-as-domain-http-interface-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.domain.http.server.DomainApiHandler.handle(DomainApiHandler.java:208) [jboss-as-domain-http-interface-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.as.domain.http.server.security.SubjectAssociationHandler.handle(SubjectAssociationHandler.java:51) [jboss-as-domain-http-interface-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:78)
[Host Controller] at org.jboss.sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:69)
[Host Controller] at org.jboss.com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:81)
[Host Controller] at org.jboss.sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:710)
[Host Controller] at org.jboss.com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:78)
[Host Controller] at org.jboss.as.domain.http.server.RealmReadinessFilter.doFilter(RealmReadinessFilter.java:54) [jboss-as-domain-http-interface-7.1.1.Final.jar:7.1.1.Final]
[Host Controller] at org.jboss.com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:81)
[Host Controller] at org.jboss.sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:682)
[Host Controller] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03]
[Host Controller] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03]
[Host Controller] at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03]
[Host Controller] at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.0.0.GA.jar:2.0.0.GA]
[Host Controller]
On the slave I see this:
[Server:server-three-slave] 10:02:53,943 INFO [org.jboss.as.server] (host-controller-connection-threads - 1) JBAS015870: Deploy of deployment "cluster-demo.war" was rolled back with failure message JBAS014750: Operation handler failed to complete
[Server:server-three-slave] 10:02:53,957 INFO [org.infinispan.eviction.PassivationManagerImpl] (MSC service thread 1-1) ISPN000029: Passivating all entries to disk
[Server:server-three-slave] 10:02:53,958 INFO [org.infinispan.eviction.PassivationManagerImpl] (MSC service thread 1-1) ISPN000030: Passivated 0 entries in 0 milliseconds
[Server:server-three-slave] 10:02:53,963 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-1) JBAS010282: Stopped //default-host//cluster-demo cache from web container
[Server:server-three-slave] 10:02:54,031 INFO [org.infinispan.eviction.PassivationManagerImpl] (pool-14-thread-1) ISPN000029: Passivating all entries to disk
[Server:server-three-slave] 10:02:54,033 INFO [org.infinispan.eviction.PassivationManagerImpl] (pool-14-thread-1) ISPN000030: Passivated 1 entries in 1 milliseconds
[Server:server-three-slave] 10:02:54,045 INFO [org.jboss.as.clustering.infinispan] (pool-14-thread-1) JBAS010282: Stopped repl cache from web container
[Server:server-three-slave] 10:02:54,056 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015877: Stopped deployment cluster-demo.war in 108ms
[Server:server-three-slave] 10:02:54,295 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (pool-12-thread-1) ISPN000082: Stopping the RpcDispatcher
[Server:server-three-slave] 10:02:54,300 WARN [org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher] (Incoming-6,null) Problems unmarshalling remote command from byte buffer: org.infinispan.CacheException: Cache manager is either starting up and type (id=74) cannot be resolved (thread not interrupted)
[Server:server-three-slave] at org.infinispan.marshall.jboss.ExternalizerTable.readObject(ExternalizerTable.java:274) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL]
[Server:server-three-slave] at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:351)
[Server:server-three-slave] at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
[Server:server-three-slave] at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:37) [jboss-marshalling-1.3.11.GA.jar:1.3.11.GA]
[Server:server-three-slave] at org.infinispan.marshall.jboss.AbstractJBossMarshaller.objectFromObjectStream(AbstractJBossMarshaller.java:148) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL]
[Server:server-three-slave] at org.infinispan.marshall.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:110) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL]
[Server:server-three-slave] at org.infinispan.marshall.AbstractDelegatingMarshaller.objectFromByteBuffer(AbstractDelegatingMarshaller.java:84) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL]
[Server:server-three-slave] at org.infinispan.remoting.transport.jgroups.MarshallerAdapter.objectFromBuffer(MarshallerAdapter.java:50) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL]
[Server:server-three-slave] at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.handle(CommandAwareRpcDispatcher.java:196) [infinispan-core-5.1.2.FINAL.jar:5.1.2.FINAL]
[Server:server-three-slave] at org.jgroups.blocks.RequestCorrelator.handleRequest(RequestCorrelator.java:456) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:363) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.blocks.RequestCorrelator.receive(RequestCorrelator.java:238) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:543) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jboss.as.clustering.jgroups.ClassLoaderAwareUpHandler.up(ClassLoaderAwareUpHandler.java:56) [jboss-as-clustering-jgroups-7.1.1.Final.jar:7.1.1.Final]
[Server:server-three-slave] at org.jgroups.blocks.mux.MuxUpHandler.up(MuxUpHandler.java:130) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jboss.as.clustering.jgroups.MuxChannel$ClassLoaderAwareMuxUpHandler.up(MuxChannel.java:64) [jboss-as-clustering-jgroups-7.1.1.Final.jar:7.1.1.Final]
[Server:server-three-slave] at org.jgroups.JChannel.up(JChannel.java:716) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:1026) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.FRAG2.up(FRAG2.java:181) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.FlowControl.up(FlowControl.java:418) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.FlowControl.up(FlowControl.java:400) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.pbcast.GMS.up(GMS.java:881) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:244) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.UNICAST2.handleDataReceived(UNICAST2.java:793) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.UNICAST2.up(UNICAST2.java:365) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:595) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.BARRIER.up(BARRIER.java:102) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:140) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.FD.up(FD.java:273) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:282) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.MERGE2.up(MERGE2.java:205) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.Discovery.up(Discovery.java:355) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.stack.Protocol.up(Protocol.java:358) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.TP.passMessageUp(TP.java:1174) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.TP$IncomingPacket.handleMyMessage(TP.java:1722) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at org.jgroups.protocols.TP$IncomingPacket.run(TP.java:1704) [jgroups-3.0.6.Final.jar:3.0.6.Final]
[Server:server-three-slave] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03]
[Server:server-three-slave] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03]
[Server:server-three-slave] at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03]
[Server:server-three-slave]
Any ideas On what im doing wrong?
Permalink
I noticed in the top right hand corner at "Messages" there was an "Unknown Error" When I clocked it, this is what I saw:
"
Unknown error Unexpected HTTP response: 500
Request
{
"operation" => "composite",
"address" => [],
"steps" => [
Unknown macro: { "address" => [ ("server-group" => "other-server-group"), ("deployment" => "cluster-demo.war") ], "operation" => "add" }
,
Unknown macro: { "address" => [ ("server-group" => "other-server-group"), ("deployment" => "cluster-demo.war") ], "operation" => "deploy" }
]
}
Response
Internal Server Error
{
"outcome" => "failed",
"result" => {
"step-1" =>
Unknown macro: { "outcome" => "failed", "rolled-back" => true }
,
"step-2" =>
},
"failure-description" => "JBAS014654: Composite operation was rolled back",
"rolled-back" => true
}
"
Permalink
I'm also facing the same problem, not being able to deploy to cluster-demo.war, ending with the same stacktrace in the log.
Permalink
Hi
I try create HA cluster, as described in thi aricle and as described in this comment
https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto#comment-22872548
But HA not work: I put date on master (i see from log) stop server on master, on slave "The time is null "
Session not replicated.
In logs I see"JBAS010206: Number of cluster members: 1"
What I do wrong?
config files and logs I post there: https://gist.github.com/2419905
Permalink
Hi
I downloaded ver 7.1.1 and followed the instructions to create a master-slave set of servers. I am successfully able to remotely start a slave server, but I am unable to deploy the cluster-demo.war.
The sequence I follow is as detailed in the guide;
I start the master server-three
I start the slave server-three
I upload the cluster-demo.war
I attempt to deploy to the cluster group
There are no overt errors on the slave (and master) console when I start the default servers, but I do see the following on starting server-three:
[Server:server-three] JBAS014775: New missing/unsatisfied dependencies:
[Server:server-three] service jboss.binding.jacorb (missing) dependents: [service jboss.jacorb.orb-service]
[Server:server-three] service jboss.binding.jacorb-ssl (missing) dependents: [service jboss.jacorb.orb-service]
[Server:server-three] service jboss.binding.messaging (missing) dependents: [service jboss.messaging.default]
[Server:server-three] service jboss.binding.messaging-throughput (missing) dependents: [service jboss.messaging.default]
[Server:server-three]
[Server:server-three] 17:25:20,392 ERROR [org.jboss.as] (Controller Boot Thread) JBAS015875: JBoss AS 7.1.1.Final "Brontes" started (with errors) in 5684ms - Started 146 of 280 services (12 services failed or missing dependencies, 121 services are passive or on-demand)
[Server:server-three] 17:25:20,387 INFO [org.jboss.as.controller] (Controller Boot Thread) JBAS014774: Service status report
[Server:server-three] JBAS014775: New missing/unsatisfied dependencies:
[Server:server-three] service jboss.binding.jacorb (missing) dependents: [service jboss.jacorb.orb-service]
[Server:server-three] service jboss.binding.jacorb-ssl (missing) dependents: [service jboss.jacorb.orb-service]
[Server:server-three] service jboss.binding.messaging (missing) dependents: [service jboss.messaging.default]
[Server:server-three] service jboss.binding.messaging-throughput (missing) dependents: [service jboss.messaging.default]
[Server:server-three]
[Server:server-three] 17:25:20,392 ERROR [org.jboss.as] (Controller Boot Thread) JBAS015875: JBoss AS 7.1.1.Final "Brontes" started (with errors) in 5684ms - Started 146 of 280 services (12 services failed or missing dependencies, 121 services are passive or on-demand)
The remote deployment hangs and terminates with a 500 error in the master log. The slave console shows the following messages:
[Server:server-three] 16:33:08,859 INFO [stdout] (pool-13-thread-1)
[Server:server-three] 16:33:08,860 INFO [stdout] (pool-13-thread-1) -------------------------------------------------------------------
[Server:server-three] 16:33:08,861 INFO [stdout] (pool-13-thread-1) GMS: address=slaveport:server-three/web, cluster=web, physical address=10.16.221.102:55450
[Server:server-three] 16:33:08,861 INFO [stdout] (pool-13-thread-1) -------------------------------------------------------------------
[Server:server-three] 16:33:11,133 INFO [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (MSC service thread 1-2) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
[Server:server-three] 16:33:11,135 INFO [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (MSC service thread 1-1) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
[Server:server-three] 16:33:11,190 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (pool-14-thread-1) ISPN000078: Starting JGroups Channel
[Server:server-three] 16:33:11,195 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (pool-14-thread-1) ISPN000094: Received new cluster view: [slaveport:server-three/web|0] [slaveport:server-three/web]
[Server:server-three] 16:33:11,196 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (pool-14-thread-1) ISPN000079: Cache local address is slaveport:server-three/web, physical addresses are [10.16.221.102:55450]
[Server:server-three] 16:33:11,201 INFO [org.infinispan.factories.GlobalComponentRegistry] (pool-14-thread-1) ISPN000128: Infinispan version: Infinispan 'Brahma' 5.1.2.FINAL
[Server:server-three] 16:33:11,201 INFO [org.infinispan.config.ConfigurationValidatingVisitor] (pool-14-thread-1) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
[Server:server-three] 16:33:11,302 INFO [org.infinispan.jmx.CacheJmxRegistration] (pool-14-thread-1) ISPN000031: MBeans were successfully registered to the platform mbean server.
[Server:server-three] 16:33:11,314 INFO [org.jboss.as.clustering.infinispan] (pool-14-thread-1) JBAS010281: Started repl cache from web container
[Server:server-three] 16:33:11,323 INFO [org.jboss.as.clustering.impl.CoreGroupCommunicationService.web] (MSC service thread 1-4) JBAS010206: Number of cluster members: 1
[Server:server-three] 16:33:11,368 INFO [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (MSC service thread 1-3) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
[Server:server-three] 16:33:11,388 INFO [org.infinispan.config.ConfigurationValidatingVisitor] (MSC service thread 1-3) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
[Server:server-three] 16:33:11,410 INFO [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-3) ISPN000031: MBeans were successfully registered to the platform mbean server.
[Server:server-three] 16:33:11,412 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-3) JBAS010281: Started //default-host//cluster-demo cache from web container
[Server:server-three] 16:33:11,427 INFO [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (MSC service thread 1-3) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
[Server:server-three] 16:33:11,429 INFO [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (MSC service thread 1-3) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
[Server:server-three] 16:33:11,541 INFO [org.jboss.web] (MSC service thread 1-3) JBAS018210: Registering web context: /cluster-demo
[Server:server-three] 16:33:11,748 INFO [org.jboss.as.server] (host-controller-connection-threads - 1) JBAS015870: Deploy of deployment "cluster-demo.war" was rolled back with failure message JBAS014750: Operation handler failed to complete
[Server:server-three] 16:33:11,768 INFO [org.infinispan.eviction.PassivationManagerImpl] (MSC service thread 1-2) ISPN000029: Passivating all entries to disk
[Server:server-three] 16:33:11,769 INFO [org.infinispan.eviction.PassivationManagerImpl] (MSC service thread 1-2) ISPN000030: Passivated 0 entries in 1 milliseconds
[Server:server-three] 16:33:11,772 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-2) JBAS010282: Stopped //default-host//cluster-demo cache from web container
[Server:server-three] 16:33:11,802 INFO [org.infinispan.eviction.PassivationManagerImpl] (pool-14-thread-1) ISPN000029: Passivating all entries to disk
[Server:server-three] 16:33:11,803 INFO [org.infinispan.eviction.PassivationManagerImpl] (pool-14-thread-1) ISPN000030: Passivated 0 entries in 0 milliseconds
[Server:server-three] 16:33:11,806 INFO [org.jboss.as.clustering.infinispan] (pool-14-thread-1) JBAS010282: Stopped repl cache from web container
[Server:server-three] 16:33:11,831 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment cluster-demo.war in 81ms
[Server:server-three] 16:33:11,935 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (pool-12-thread-1) ISPN000082: Stopping the RpcDispatcher
I'm running this on os X (Lion) and java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-11M3635)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode)
Any help will be greatly appreciated.
David.
Permalink
Try using full-ha-sockets in other-server-group, ? Have a look at this thread if you encounter a different error after trying this ...
https://community.jboss.org/message/727190#727190
Permalink
Thank you that fixed the problem.
The issue I run into now relates to configuring httpd - I am attempting to include the cluster modules into the bundled apache 2.2 installation on a Mac (Lion).
I get the following error:
sudo apachectl -k restart
httpd: Syntax error on line 116 of /private/etc/apache2/httpd.conf: Cannot load /usr/libexec/apache2/mod_slotmem.so into server: dlopen(/usr/libexec/apache2/mod_slotmem.so, 10): no suitable image found. Did find:\n\t/usr/libexec/apache2/mod_slotmem.so: mach-o, but wrong architecture
sudo apachectl -k restart
httpd: Syntax error on line 116 of /private/etc/apache2/httpd.conf: Cannot load /usr/libexec/apache2/mod_slotmem.so into server: dlopen(/usr/libexec/apache2/mod_slotmem.so, 10): no suitable image found. Did find:\n\t/usr/libexec/apache2/mod_slotmem.so: mach-o, but wrong architecture
Anybody have any success with this, or should I just go ahead and try the httpd bundle from jboss directly?
Thanks.
Permalink
I have progressed to the point where everything but clustering seems to be working.
I have a master and a slave.
I installed the httpd binary from jboss and configured it according to the instructions given in the main document.
I am able to see the mod_cluster_manager page (but none of the links show anything).
I can invoke the put.jsp method in cluster-demo when I go directly to port 8330, but I get an page not found error when I try navigate using port number 10001.
The relevant portion of my httpd.conf file is below. The error log show
File does not exist: /opt/jboss/httpd/htdocs/htdocs/cluster-demo
As usual, any help will be greatly appreciated!
# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
# This Listen port is for the mod_cluster-manager, where you can see the status of mod_cluster.
# Port 10001 is not a reserved port, so this prevents problems with SELinux.
Listen 172.16.129.148:10001 <VirtualHost 172.16.129.148:10001>
<Directory />
Order deny,allow
Deny from all
Allow from all
</Directory> # This directive allows you to view mod_cluster status at URL http://10.211.55.4:10001/mod_cluster-manager
<Location /mod_cluster-manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from all
</Location>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName other-server-group
AdvertiseFrequency 5
EnableMCPMReceive
</VirtualHost>
</IfModule>
Permalink
Hi,
if mod_cluster-manager only shows a heading like "mod_cluster/1.2.0.Final" and some links (showing nothing like you say) your nodes have not been registered on the apache-side of mod_cluster. This would also explain that you get a 404 when you try to access the cluster-demo through mod_cluster (port 10001) but it works if you go directly on a JBoss instance.
I had this problem by myself and it stinks like JBPAPP-7516 because it works fine with the latest EAP6 beta and the JBoss AS7.1.2 (you can get a nightly build here).
Also watch your JBoss for any error-messages on the terminal. Sometimes the error-messages are hard to see between all the other messages.
Maybe you should give the latest working nightly-build a try, But be warned, just copying your actual configuration files to the new JBoss installation won't work, because the JBoss makes changes to these files during deployment.
Greetings from Berlin!
Permalink
Immanuel,
Thanks for the prompt response. I agree with your conclusion that the cluster is not being registered on the Apache side as this explains all I see. There are no errors in my JBoss console and I will try the nightly build next. I don't understand your point about configuration files though - why will JBoss overwrite my config files (domain.xml and host.xml) or did I misunderstand you?
I think we will probably end up running a number of JBoss instances behind a hardware balancer so httpd may be moot, but I still need to prove this works in our dev environment.
Danke for your help
David.
Permalink
Hi,
the point with the configuration files (I think it was just the host.xml) is that if you deploy something into the JBoss it will write that (with some hash-values and so on) into the host.xml so the deployment is not lost after a restart of the JBoss. Maybe this behaviour does only occur when you deploy over the management-console. But after trying different JBoss 7 versions (including 7.1.0 which refuses to deploy SFSBs annotated with @Clustered) I ran into this problem a couple of times. Just copying the configuration files won't work: The JBoss you copied your configuration to doesn't find the deployments of the old JBoss you copied from and maybe some more issues.
I don't think it's the most efficient way but to solve the issue, but I alway ended up setting up a fresh configuration (so I'm quite fit in setting up the cluster described in this howto ). After all this issue isn't really a big deal. I just wanted give a little hint if you run into a problem that looks like this.
Greetings from Berlin!
Permalink
Hi
Thanks for your help, you saved me a lot of head-banging!
I finally got everything to work with one caveat and one small issue.
First the caveat: it seems all nodes in a cluster need to run the same version of JBoss 7.
Second: I was unable to suppress this message:
[Server:server-three] 13:36:29,732 WARN [org.hornetq.core.cluster.impl.DiscoveryGroupImpl] (hornetq-discovery-group-thread-dg-group1) There are more than one servers on the network broadcasting the same node id. You will see this message exactly once (per node) if a node is restarted, in which case it can be safely ignored. But if it is logged continuously it means you really do have more than one node on the same network active concurrently with the same node id. This could occur if you have a backup node active at the same time as its live node. nodeID=5b2e186c-9af8-11e1-9675-e3f2a1f44414[Server:server-three] 13:36:29,732 WARN [org.hornetq.core.cluster.impl.DiscoveryGroupImpl] (hornetq-discovery-group-thread-dg-group1) There are more than one servers on the network broadcasting the same node id. You will see this message exactly once (per node) if a node is restarted, in which case it can be safely ignored. But if it is logged continuously it means you really do have more than one node on the same network active concurrently with the same node id. This could occur if you have a backup node active at the same time as its live node. nodeID=5b2e186c-9af8-11e1-9675-e3f2a1f44414
Again, any suggestion about killing this would be great. I'm running on os X (Lion) so the comments about NFS don't really help me much.
Thanks David.
Permalink
Hi David,
ok, maybe I'm a bit late but: Have you created the slave by copying the master? Then try to delete the contents of domain/data and/or domain/servers/yourserver/data . I by myself didn't experience this problem.
Permalink
Hi everybody,
I have a question: can I use the capabilities of AS7 clustering & HA configurations in order to use other protocols
than http? We need to use telnet (this is the application requirement)
Thank you
Permalink
I followed these directions and comments by others very carefully and I got everything working *except* for session replication. I tried adding the <cluster-user> and <cluster-password> as was suggested. I tried both 7.1.1-Final and yesterdays latest 7.1.x build (really 7.2.0 Alpha-1). I made the minimal changes required and everything else is stock settings.
Once the other-server-group (server three) begins running I start getting errors on both master/slave as others have reported.
As was suggested in a number of forums postings I tried adding cluster-password. It wasn't clear if you were supposed to add <cluster-name> and <cluster-password> to both master and slave so I added it to both but to no avail (still doesn't work).
There is NO jboss user named this but according to the directions there doesn't seem to need to be one. It's interesting that the exception says 'HORNETQ.CLUSTER.ADMIN.USER' even though I specified to use 'admin'
This is how I start both master and slave:
master:
$ sudo -u jboss bin/domain.sh -b 192.168.150.100 -bmanagement 192.168.150.100
slave:
$ sudo -u jboss bin/domain.sh -b 192.168.150.200 -bmanagement 192.168.150.200 -Djboss.domain.master.address=192.168.150.100 -Djboss.domain.master.port=9999
I disabled selinx and the firewall on both nodes. Everything else works great: deployments to nodes, mod_cluster but not replication. :(
Any ideas?
Thanks
Permalink
It should be a valid username and the right password.
Permalink
I should have been more clear but I already tried using a valid user from the ManagementRealm previously (added via add-user.sh) and that didn't help. Like I said based on the error message it doesn't appear like it was honoring the <cluster-user> tag since the exception referred to 'HORNETQ.CLUSTER.ADMIN.USER'
I also tried adding 'HORNETQ.CLUSTER.ADMIN.USER' as a valid user to the ManagementRealm and ran into the same problem.
Permalink
Could you confirm if you added the username and password in both master and slave ?
Permalink
Yes I added the same username/password to both master and slave.
Permalink
Is there anyway that we can encrypt this password?
Permalink
How to configure the clustering for standalone server. I tried with standalone-ha.xml configuration file with
two different ip address, but if i shutdown one node it will not redirect request to other node automatically.
Permalink
I have only one laptop, please let me know how I can setup Jboss AS7 clustering on single machine, I want to test some of my project stuff on clustered environment.
Thanks in Advance!
Raj
Permalink
Do u want to apply it in standalone server or domain server?
Permalink
I do not know the difference between standalone and domain, please explain.
Permalink
See in standalone server there is only one server running,either in one machine with two
different i.p or on two different machine with two different machine. And in domain server there
will be a group of server. So,if u deploy an application in one server it will be automatically
available on another servers. in domain server on one i.p address it will be running group of
servers with different port number.
Permalink
Got it.so as I have only one machine then I can only run in standalone mode, right?
Can you share me the steps to setup on one machine then please?
Permalink
No you can run domain configuration in one machine for that you have to just
change the port offset for different server. So, if you run one server on
127.0.0.1:8080,then you have to run other server on 127.0.0.1:8230 port or any
other. So you can run domain server on your laptop too. So you have to decide
as per your need. And even you can also run two standalone server on one
machine with either different i.p or different port. And i will share you the steps
very soon. Thanks
Permalink
Hello, Weinan.Li, I need help when I follow the steps in article: https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto
server-one and server-two can start up successfully on domain master,
but it failed to start server-three at : http://128.128.86.222:9990/console/App.html#server-instances
server-one and server-two log content is as bellow:
----------------
[Server:server-two] 10:59:46,003 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS 7.1.0.CR1b "Flux Capacitor" started in 30718ms - Started 148 of 215 services (65 services are passive or on-demand)
[Server:server-one] 10:59:46,021 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS 7.1.0.CR1b "Flux Capacitor" started in 31217ms - Started 148 of 215 services (65 services are passive or on-demand)
----------------
when I click "start" button at administration console page, the console log is like this:
----------------
[Host Controller] 11:04:37,394 INFO [org.jboss.as.host.controller] (HttpManagementService-threads - 6) JBAS010922: Starting server server-three
11:04:40,969 INFO [org.jboss.as.process.Server:server-three.status] (ProcessController-threads - 6) JBAS012017: Starting process 'Server:server-three'
[Server:server-three] 11:04:46,925 信息 [org.jboss.modules] (main) JBoss Modules version 1.1.0.CR6
[Server:server-three] 11:05:26,385 信息 [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-1) live server is starting with configuration HornetQ Configuration (clustered=false,backup=false,sharedStore=true,journalDirectory=/usr/jboss-as-7.1.0.CR1b/domain/servers/server-three/data/messagingjournal,bindingsDirectory=/usr/jboss-as-7.1.0.CR1b/domain/servers/server-three/data/messagingbindings,largeMessagesDirectory=/usr/jboss-as-7.1.0.CR1b/domain/servers/server-three/data/messaginglargemessages,pagingDirectory=/usr/jboss-as-7.1.0.CR1b/domain/servers/server-three/data/messagingpaging)
[Server:server-three] 11:05:26,546 警告 [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-1) Security risk! It has been detected that the cluster admin user and password have not been changed from the installation default. Please see the HornetQ user guide, cluster chapter, for instructions on how to do this.
[Server:server-three] 11:05:27,651 信息 [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-1) Server is now live
[Server:server-three] 11:05:27,651 信息 [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-1) HornetQ Server version 2.2.7.Final (HQ_2_2_7_FINAL_AS7, 121) [ff1f011e-d17b-11e1-b314-000c29eaa811] started
[Server:server-three] 11:05:28,441 信息 [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-1) trying to deploy queue jms.topic.testTopic
[Server:server-three] 11:05:29,039 信息 [org.hornetq.core.server.impl.HornetQServerImpl] (MSC service thread 1-2) trying to deploy queue jms.queue.testQueue
[Server:server-three] 11:05:29,407 INFO [org.jboss.as.messaging] (MSC service thread 1-2) JBAS011601: Bound messaging object to jndi name java:/queue/test
[Server:server-three] 11:05:30,218 INFO [org.jboss.as.deployment.connector] (MSC service thread 1-2) JBAS010406: Registered connection factory java:/JmsXA
[Server:server-three] 11:05:30,275 INFO [org.hornetq.ra.HornetQResourceAdapter] (MSC service thread 1-2) HornetQ resource adaptor started
[Server:server-three] 11:05:30,276 INFO [org.jboss.as.connector.services.ResourceAdapterActivatorService$ResourceAdapterActivator] (MSC service thread 1-2) IJ020002: Deployed: file://RaActivatorhornetq-ra
[Server:server-three] 11:05:30,284 INFO [org.jboss.as.deployment.connector] (MSC service thread 1-2) JBAS010401: Bound JCA ConnectionFactory [java:/JmsXA]
[Server:server-three] 11:05:30,315 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
[Server:server-three] 11:05:30,379 ERROR [org.jboss.as] (Controller Boot Thread) JBoss AS 7.1.0.CR1b "Flux Capacitor" started (with errors) in 46986ms - Started 146 of 254 services (2 services failed or missing dependencies, 101 services are passive or on-demand)
----------------
It seems that when I start process 'Server:server-three', it tried to connect to remote://128.128.86.222:9999, and then it caused "connection timed out".
Should I modify the "domain-controller" property in host.xml on domain master host?
P.s. domain master IP: 128.128.86.222; OS: CentOs 5.4; Memery Size: 256M; Run mode: linux text.
and my master host config file "host.xml":
----------------
<host name="master" xmlns="urn:jboss:domain:1.1">
<management>
<security-realms>
<security-realm name="ManagementRealm">
<authentication>
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
</security-realm>
</security-realms>
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket interface="management" port="$
Unknown macro: {jboss.management.native.port}
"/>
</native-interface>
<http-interface security-realm="ManagementRealm">
<socket interface="management" port="$
Unknown macro: {jboss.management.http.port}
"/>
</http-interface>
</management-interfaces>
</management>
<domain-controller>
<local />
<!- Alternative remote domain controller configuration with a host and port ->
<!-- <remote host="$
Unknown macro: {jboss.domain.master.address}
" port="$
Unknown macro: {jboss.domain.master.port}
"/> -->
</domain-controller>
<interfaces>
<interface name="management">
<inet-address value="128.128.86.222"/>
</interface>
<interface name="public">
<inet-address value="128.128.86.222"/>
</interface>
<interface name="unsecured">
<inet-address value="128.128.86.222"/>
</interface>
</interfaces>
<jvms>
<jvm name="default">
<heap size="64m" max-size="256m"/>
</jvm>
</jvms>
<servers>
<server name="server-one" group="main-server-group">
<!-- Remote JPDA debugging for a specific server
<jvm name="default">
<jvm-options>
<option value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"/>
</jvm-options>
</jvm>
-->
</server>
<server name="server-two" group="main-server-group" auto-start="true">
<!-- server-two avoids port conflicts by incrementing the ports in
the default socket-group declared in the server-group -->
<socket-bindings port-offset="150"/>
</server>
<server name="server-three" group="other-server-group" auto-start="false">
<!-- server-three avoids port conflicts by incrementing the ports in
the default socket-group declared in the server-group -->
<socket-bindings port-offset="250"/>
</server>
</servers>
</host>
Permalink
Hi,
I was able to setup till the last step but the request is not getting forwarded from Apache Http server to AS7 servers. Both my Apache Http Server and AS7 master are running on a Windows7 machine and the slave AS7 is running on Window 7 laptop. Both the main-server-group and other-server-group (full-ha) are up and running correctly. I am able to access the deployed app on port 8330. Also the Http server is up and running on port 80 so when I put my master ip address I get "It Works!" message. Also, able to access the mod_cluster_manager on port 8000 correctly. Not sure what I am missing currently as the logs are not pointing me to any errors that might be happening.
The current httpd.conf is as below:
# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
Listen 172.20.201.24:10001
ManagerBalancerName other-server-group
<VirtualHost 172.20.201.24:10001>
<Location />
Order deny,allow
Allow from all
</Location>
ErrorLog "logs/chatter_log"
LogLevel debug
KeepAliveTimeout 300
MaxKeepAliveRequests 0
#ServerAdvertise on http://127.0.0.1:10001
AdvertiseFrequency 5
#AdvertiseSecurityKey secret
#AdvertiseGroup 224.0.1.105:23364
EnableMCPMReceive
#<Location /mod_cluster_manager>
# SetHandler mod_cluster-manager
# Order deny,allow
# Allow from all
#</Location>
</VirtualHost>
</IfModule>
NameVirtualHost 172.20.201.24:8000
Listen 172.20.201.24:8000
<VirtualHost 172.20.201.24:8000>
ServerAdmin sudeep.batra@synechron.com
ServerName 172.20.201.24
ErrorLog "logs/cluster_log"
LogLevel debug
EnableMCPMReceive
ProxyPass '/beans/XMLTranServiceBean/XMLTranServiceBean' balancer://other-server-group stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://other-server-group
ProxyPreserveHost On
<Location />
Order deny,allow
Allow from All
</Location>
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from all
</Location>
</VirtualHost>
# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
Listen 172.20.201.24:10001
ManagerBalancerName other-server-group
<VirtualHost 172.20.201.24:10001>
<Location />
Order deny,allow
Allow from all
</Location>
ErrorLog "logs/chatter_log"
LogLevel debug
KeepAliveTimeout 300
MaxKeepAliveRequests 0
#ServerAdvertise on http://127.0.0.1:10001
AdvertiseFrequency 5
#AdvertiseSecurityKey secret
#AdvertiseGroup 224.0.1.105:23364
EnableMCPMReceive
#<Location /mod_cluster_manager>
# SetHandler mod_cluster-manager
# Order deny,allow
# Allow from all
#</Location>
</VirtualHost>
</IfModule>
NameVirtualHost 172.20.201.24:8000
Listen 172.20.201.24:8000
<VirtualHost 172.20.201.24:8000>
ServerAdmin sudeep.batra@synechron.com
ServerName 172.20.201.24
ErrorLog "logs/cluster_log"
LogLevel debug
EnableMCPMReceive
ProxyPass '/beans/XMLTranServiceBean/XMLTranServiceBean' balancer://other-server-group stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://other-server-group
ProxyPreserveHost On
<Location />
Order deny,allow
Allow from All
</Location>
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from all
</Location>
</VirtualHost>
Permalink
Try add 2 module below to httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.sod
Permalink
You cannot simply copy and expect things to work.
ProxyPass '/beans/XMLTranServiceBean/XMLTranServiceBean' balancer://other-server-group stickysession=JSESSIONID|jsessionid nofailover=On
means that anything that hits the virtual host with '/beans/XMLTranServiceBean/XMLTranServiceBean' as part of the URL is forwarded
to the balancer, everything else goes to the document root (or elsewhere is you have another ProxyPass).
This is useful if you have 2 kinds of functions processed by the virtual host.
If you just want to forward everything that is received use:
ProxyPass / balancer://other-server-group stickysession=JSESSIONID|jsessionid nofailover=On
When you see It Works your ProxyPass is not working, the It Works message comes from a index.html in the DocumentRoot
Permalink
Hi,
Can someone help me?
I try to install cluster in JBoss 7.1.1 with mod_cluster 1.2.0.
At final step, when i access to /cluster-demo/put.jsp then a message "putting date now" is sent to my master node, However when I stop master node, I try access to /cluster-demo/get.jsp and I see "The time is null".
It seem httpd can redirect request to other node, but without session.
This is my httpd.conf file:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so
LoadModule authz_host_module modules/mod_authz_host.so
Listen 192.168.72.101:8888
<VirtualHost 192.168.72.101:8888>
<Location />
Order deny,allow
Allow from all
</Location>
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Allow from all
</Location>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
AllowDisplay On
ManagerBalancerName cluster-server-group
ServerAdvertise On
EnableMCPMReceive
</VirtualHost>
I add already some workaround as:
instance-id
proxy-list="IP:Port"
Special one, If I don't add module authz_host_module, I can not start httpd. Httpd alway say that "Order" miss spelling ...
Permalink
Copy the example above (mine, also under Sudeep).
You need 2 virtual hosts, one for the mod_cluster manager and another to forward message to the cluster using ProxyPass.
See my comment above in reply to Sudeep as well.
Permalink
Please have a look at my discussion in the JBoss Community Forum under https://community.jboss.org/message/755981#755981
Any advise is much appreciated
Permalink
Nice article!! Only have one question. I want to install mod_cluster in slave host and forward user requests to the master host, is it possible?
This is because i have configured a load balancer with HAProxy as showed in this basic example http://www.leaseweblabs.com/2011/07/high-availability-load-balancing-using-haproxy-on-ubuntu-part-1/ so i have two nodes with apache http installed and each should redirect to any of JBoss instance or JBoss domain.
Any help will be appreciated.
Permalink
thanks for the post it relay helped me to understand standalone mode clustering of Jboss
I have done the above in windows xp using APACHE 2.2 and HTTPD 2.2 and Jboss AS 7.1.1.Final and it was successful with the application shown below,
</html>
The example stateful session bean is a CDI component associated to the HTTP session. The bean has a counter which is increased every time it is read by the getter-method getCounterValue(). With the counter you can track how often the bean was invoked during the session.
in the apche httpd.config i have done the following
But when i went on further and deployed my own application which uses ejb 3, richfaces and hibernate along with JSF. while we are running a single node jboss standalone cluster the application runs fine and smooth using apache httpd url ie http://127.0.0.1/WiseBank_CBS_v1/login.xhtml.
but when running more then one standalone jboss node of jboss, when ever i access the above url in jboss server node i see lots of error trace which i am unable to debug. attaching the jboss server log.
Can you plz suggest me an way out of this ...
thanks in advance
Permalink
I was following this guide successfully, up until I got to the point of adding datasources. Where are you supposed to add them, host.xml or domain.xml? I have not deployed any application yet, I am just trying to start the cluster. With the datasources (mysql) configured in domain.xml, the master starts up properly, but when I start the slave, it immediately connects to the database multiple times, eating up ALL of the available connections.
Permalink
I was following this guide failed,I used the jboss-as-7.1.1.Final、mod_cluster-1.1.3.Final-linux2-x64-so.tar.gz,
I deploy my own war“FileUpload.war”,While deployed on “main-server-group” successful, but on the “other-server-group” failed.
Can you help me to look for the wrong reasons? The following error:
Permalink
Killing the server by using system commands will have the effect that the Host-Controller restart the instance imediately!
This thing is not working for me... The respective request is not going to slave server3... it comes always to master server 1
Permalink
I have tested this module using Jboss AS 7.1.1 & mod_cluster1.2.0.Final.
#1
When you start up the nodes using the domain.bat scripts, always provide the bind ip and ports. If you don't then you seem to get some strange behaviours:
domain.sh-b 172.72.103.134 -bmanagement 172.72.103.134 (this is the master)
and
domain.sh-b 172.72.103.124 -bmanagement 172.72.103.124 (this is the slave)
#2
Server-2 does not start cleanly out of the box, due to a mismatch between the full-ha progile and the socket bindings. In domain.xml of the master, amend as follows:
<server-group profile="full-ha"> <jvm <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="full-ha-sockets"/> </server-group>
This will allow Server-2 to start cleanly.
#3
The hornetq-server needs configuring with a user name and password. If you don't you will get an exception along the lines of:
[Server:server-three] 16:24:36,875 ERROR [org.hornetq.core.protocol.core.impl.Ho rnetQPacketHandler] (Old I/O server worker (parentId: 2128830893, [id: 0x7ee361a d, /172.72.103.134:5695])) Failed to create session : HornetQException[errorCode=1 05 message=Unable to validate user: HORNETQ.CLUSTER.ADMIN.USER]
<subsystem xmlns="urn:jboss:domain:messaging:1.1"> <hornetq-server> <cluster-user>clusteruser</cluster-user> <cluster-password>clusterpassword</cluster-password>
It looks as though you can use any user and password. It doesn't appear to be authenticated against anything.. :)
#4
Assuming you have downloaded and installed mod_cluster 1,2.Final from here.
Out of the box, mod_cluster does't not work with jboss 7.1.1. A few tweaks are needed. Keeping things as simple as possible, I've stripped the provided httpd.conf down the bare minimum:
LoadModule authz_host_module modules/mod_authz_host.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_cluster_module modules/mod_proxy_cluster.so LoadModule manager_module modules/mod_manager.so LoadModule slotmem_module modules/mod_slotmem.so LoadModule advertise_module modules/mod_advertise.so Listen 172.72.103.134:80 Listen 172.72.103.134:10001 <VirtualHost 172.72.103.134:10001> <Location /> Order deny,allow Deny from all Allow from 172.72.103. </Location> KeepAliveTimeout 300 MaxKeepAliveRequests 0 EnableMCPMReceive ManagerBalancerName other-server-group AdvertiseFrequency 5 <Location /mod_cluster_manager> SetHandler mod_cluster-manager Order deny,allow Deny from all Allow from 172.72.103. </Location> </VirtualHost> ErrorLog "logs/error_log"
I used port 10001 as the default port 6666 didn't work for me. This httpd.conf should be enough to get you going.
The domain.xml of master also needs updating to link it up with the mod_cluster instance:
<subsystem xmlns="urn:jboss:domain:modcluster:1.0"> <mod-cluster-config advertise-socket="modcluster" proxy-list="172.72.103.134:10001"> ... and <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="$
Unknown macro: {jboss.node.name}
" native="false"> ...
Testing
To test everything is working, fire up the domain, deploy an application and start httpd (on windows 7 I needed to run it as administrator otherwise it complained about file permissions). Navigate to: http://172.72.103.134:10001/mod_cluster_manager. You should see:
mod_cluster/1.2.0.Final Auto Refresh show DUMP output show INFO output Node slave:server-three-slave (ajp://172.72.103.124:8259): Enable Contexts Disable Contexts Balancer: other-server-group,LBGroup: ,Flushpackets: Off,Flushwait: 10000,Ping: 10000000,Smax: 65,Ttl: 60000000,Status: OK,Elected: 0,Read: 0,Transferred: 0,Connected: 0,Load: 100 Virtual Host 1: Contexts: /cluster-demo, Status: ENABLED Request: 0 Disable /PFT.CLEAR.Common.Services, Status: ENABLED Request: 0 Disable Aliases: localhost default-host example.com
I do not know why this error will be reported when the start apache, I have several files copied to the modules folder under.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule advertise_module modules/mod_advertise.so
<IfModule manager_module>
Listen 192.168.0.2:10001
<VirtualHost 192.168.0.2:10001>
<Directory />
Order deny,allow
Deny from all
Allow from 192.168.0.
</Directory>
# This directive allows you to view mod_cluster status at URL http://192.168.0.2:10001/mod_cluster-manager
<Location /mod_cluster-manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from 192.168.0.
</Location>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName other-server-group
AdvertiseFrequency 5
</VirtualHost>
</IfModule>
Permalink
Hi Micheal,
Make sure you downloaded mod_cluster pack from http://www.jboss.org/mod_cluster site.
We suspect your version is not mod_cluster.
Regards,
Mani
Permalink
Hi Mani,
First, thank you reply.I was the latest apache2.4.4 downloaded from the official website of Apache version, then downloaded from the http://www.jboss.org/mod_cluster mod_cluster-1.2.0.Final-windows-x64-ssl.zip this version, mod_cluster1.2.0 after decompression mod_proxy_cluster.so copid to% APACHE_HOME% \ modules.Of course, there are three files are also copied to this directory.If I only use mod_cluster-1.2.0.Final-windows-x64-ssl.zip this version, I do not know how to start it in Windows.My operating system is Windows XP (32), I double-click http.exe and displays the error message "not a valid win32 application"
Permalink
Hi Michael,
Please follow the below steps:
1) download only mod_cluster-1.2.0.Final-windows-x64-ssl.zip, then unzip it to some folder. This folder has the same folder structure as in Apache 2.4.4, except the https.conf file. So,you don't need to download Apache 2.4.4 version. Only you need to modify the httpd.conf contents as I have shared above mail chain.
2) You will get the httpd.conf file inside the bin folder. If that file is not there then take the file from bin/default folder or create a httpd.conf file & paste the above contents.
I am sure it will work.
Please let me know, if you have any concern.
Thanks & Regards,
Jonbon Dash
Permalink
Hi JONBON,
Thank you very much!I follow your steps away from success is getting closer, but still encountered a problem.
master node: I can successfully access this URL http://192.168.3.185:10001/ClusterWebApp or this URL http://192.168.3.185:8330/ClusterWebApp
slave node: I can successfully access this URL http://192.168.3.153:8330/ClusterWebApp too.
Why I can not succeed through this URL http://192.168.3.185/ClusterWebApp access.
Configration:
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="$
Unknown macro: {jboss.node.name}
" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<alias name="example.com"/>
</virtual-server>
</subsystem>
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" *instance-id="$
"* native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<alias name="example.com"/>
</virtual-server>
</subsystem>
<subsystem xmlns="urn:jboss:domain:modcluster:1.0">
<mod-cluster-config advertise-socket="modcluster" proxy-list="192.168.3.185:10001">
<dynamic-load-provider>
<load-metric type="busyness"/>
</dynamic-load-provider>
</mod-cluster-config>
</subsystem>
Listen 192.168.3.185:10001
<VirtualHost 192.168.3.185:10001>
<Location />
Order deny,allow
Deny from all
Allow from 192.168.3.
</Location>
KeepAliveTimeout 300
MaxKeepAliveRequests 0
EnableMCPMReceive
ManagerBalancerName other-server-group
AdvertiseFrequency 5
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from 192.168.3.
</Location>
</VirtualHost>
ErrorLog "logs/error_log"
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule manager_module modules/mod_manager.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule advertise_module modules/mod_advertise.so
I can successfully access this URL http://192.168.3.185:10001/mod_cluster_manager?nonce=a49e863e-d639-f64e-b8dd-d1a06739d393&refresh=10
mod_cluster/1.2.0.Final
Auto Refresh show DUMP output show INFO output
Node master:server-three (ajp://ptiwh-clust.premiumit-cn.com:8259):
Enable Contexts Disable Contexts
Balancer: other-server-group,LBGroup: ,Flushpackets: Off,Flushwait: 10000,Ping: 10000000,Smax: 65,Ttl: 60000000,Status: OK,Elected: 0,Read: 0,Transferred: 0,Connected: 0,Load: 100
Virtual Host 1:
Contexts:
/ClusterWebApp, Status: ENABLED Request: 0 Disable
Aliases:
default-host
localhost
example.com
Node slave:server-three-slave (ajp://PTIWH-222.premiumit-cn.com:8259):
Enable Contexts Disable Contexts
Balancer: other-server-group,LBGroup: ,Flushpackets: Off,Flushwait: 10000,Ping: 10000000,Smax: 65,Ttl: 60000000,Status: OK,Elected: 0,Read: 0,Transferred: 0,Connected: 0,Load: 100
Virtual Host 1:
Contexts:
/ClusterWebApp, Status: ENABLED Request: 0 Disable
Aliases:
example.com
localhost
default-host
Permalink
Hi Michael,
You have to enable your host IP to listen on 80 port along with 10001 port in httpd.conf
Listen 192.168.3.185:10001
Listen 192.168.3.185:80
Please let me know, whether this solve you problem or not.
Thanks & Regards,
Jonbon Dash
Permalink
Hi JONBON,
Thank you very much! You say is right, my problem has been resolved.I really appreciate!
I can be your friend?
Permalink
Hi Michael,
Sure its my pleasure to be friend with you.. :)
Send me a friend request.
Regards,
Jonbon Dash
Permalink
Hi JONBON,
Domain for cluster mode, create a the Messaging cluster need how to configure?
Permalink
Hi Michael,
Are you asking about the Clustering of the messaging subsystem or what?
If yes, then please create a separate blog for this.
Regards,
Jonbon Dash
Permalink
Hi,
I just had look into https://github.com/liweinan/cluster-demo/tree/master/src/main/webapp/WEB-INF.
Why is
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<distributable/>
</web-app>
in use and not:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Archetype Created Web Application</display-name>
<distributable/>
</web-app>
?
Cheers,
Carsten
Permalink
Not sure if anyone is still tracking these comments .. a bit old now. Thanks for the information .. very useful!
I am running into an issue with domain mode configuration. I have Apache 2.2 with mod_cluster, 1 domain controller and 2 host controllers running on a single pc for testing. That is 3 separate instances of JBoss Eap 6.1
I can see both host controllers join the domain. And I can see both nodes recognize mod_cluster with the log output that they are using jvm-route. The number of nodes in the cluster logged appears correct.
When accessing the application through apache; the behavior i am seeing is that when i stop the server that requests are being sent to, the second server picks up the request but the time is null. if i switch back and forth stopping the current server and refreshing the page, the time is set for each individual server. So i have 2 separate times, one for each node and they continue to change as that node is hit.
In further testing i can see that the session is replicated for the servers in the same host, but they are not replicated to servers in the other host.
I am not getting any errors in the server logs or the http log.
Httpd.conf
Domain.xml (using full-ha profile and full-ha-sockets)
Any clue as to what would cause this behavior? Is there additional information I can provide?
Any insight is greatly appreciated.
Permalink
double click the domain.bat, as above described, looks like there are some service does not start, the cursor has stopped there, view the log did not display an error message, I do not know why?
Permalink
Hi,
I am trying to follow this tutorial and install a cluster of jboss on the amazon (ec2).
I'm using the micro instance that have 613 Mb of memory to be the "master server". The memory is not enough and i am giving out of memory exception. My question is: What is server-one, server-two and server-three ? I really need 3 servers running on master ?
At the picture Testing Scenario, i have only two servers running on master server: httpd + mod_cluster AND AS7 server. (only 2 servers). Where is the server-three ?
I think that on master should exist only 1 server (domain controller - administrator os the domain), and optionally a host. I don't understood why 3 servers.
What is the function os each three servers. Can some of them be optional ?
Thanks.
Permalink
Hi Victor,
You don't have to start 'server-one' and 'server-two' because they are belonged to 'main-server-group' instead of 'other-server-group'. You can see this from host.xml:
and 'main-server-group' belongs to different profile 'full'. See the config in domain.xml:
Only 'other-server-group' is using the 'full-ha' profile, thus only the servers belongs to this group (which is server-three) is relative.
You can disable server-one and server-two by setting 'auto-start' to 'false' to prevent them starting with AS together:
Hi,
I am following this guide to setup cluster. But I am not able to deploy the war. I am getting lot of errors . Please see the server.log
Also attaching domain.xml and standalone.xml of master for your reference. - domain.xml standalone.xml
Please reply asap.
Permalink
Have you used some messaging features? The messaging feature are only provided by '-full.xml', '-full-ha.xml' configs. If you are using domain mode, make sure you are using '-full' or '-full-ha' profile for your server group.
Please also update to EAP 6.1.0 instead of older version of JBoss AS7, which has fixed a lot of bugs.
JGroup cannot send message to slave. Have you turned off your firewall? SElinux disabled? Does you network support UDP + IP multicasting? These places are worth checking.
Permalink
Thank you.. I was able to deploy the war. Some configurations were missing.
But now when I tried to deploy a new war with size 105 MB i am getting new error -
[org.jboss.as.deployment] (HttpManagementService-threads - 3) JBAS010806: Caught exception closing input stream: java.io.IOException: Stream closed
Related links for this error - https://community.jboss.org/thread/199525?start=0&tstart=0
Also I read other posts, where they state this problem is fixed in 7.1.2 version. Is there any workaround with version 7.1.1 ?
Permalink
You can find the relative patch for the issue and rebuild 'host-controller component in JBoss AS 7.1.1. Then you can change the existing host-controller in AS modules dir:
But I wonder whether that's a good way. So please just upgrade to latest JBoss EAP 6.1.0
Permalink
Hi,
I have followed the steps in this guide to form a cluster environment. After that, I have deployed jbpm-console war on server three. But when I start server-three after deployment, it fails to start stating the following error -
JBAS014775: New missing/unsatisfied dependencies:
service jboss.binding.jacorb (missing) dependents: [service jboss.jacorb.orb-service]
service jboss.binding.jacorb-ssl (missing) dependents: [service jboss.jacorb.orb-service]
service jboss.binding.messaging (missing) dependents: [service jboss.messaging.default]
service jboss.binding.messaging-throughput (missing) dependents: [service jboss.messaging.default]
service jboss.naming.context.java.ConnectionFactory (missing) dependents: [service jboss.naming.context.java.module.jbpm-console.jbpm-console.env."org.kie.services.remote.jms.RequestMessageBean".connectionFactory]
service jboss.naming.context.java.jboss.datasources.jbpmDS (missing) dependents: [service jboss.persistenceunit."jbpm-console.war#org.jbpm.domain"]
service jboss.ra.hornetq-ra (missing) dependents: [service jboss.deployment.unit."jbpm-console.war".component.TaskServiceRequesMessageBean.CREATE, service jboss.deployment.unit."jbpm-console.war".component.KieSessionRequesMessageBean.CREATE]
Please reply asap. I have also attached server.log for reference.server.log
Permalink
Hi,
Can anyone please share me steps on the below requirement:
I have two Jboss AS7 Server ( Server1 & Server2), from which Server1 is behave as master & Server2 behave as slave and two mod_cluster setup (mod1 & mod2). With single mod1, I am able to track & do the above cluster step up.
Now problem is, how to do the request processing from mod2 for both Server1 & Server2, if mod1 got fail.
Regards,
Jonbon Dash
Permalink
You can use LVS+heartbeat, Ngnix OR another httpd to sit in front of your two modcluster nodes to load blanance them. Just treat your two modcluster nodes as worker nodes.
Permalink
I had a lot of trouble getting this to work with as-7.1.1, eventually I found this:
https://bugzilla.redhat.com/show_bug.cgi?id=899584
I added to the httpd VirtualHost:
AdvertiseSecurityKey secret
and modified the mod-cluster config in domain.xml:
<mod-cluster-config advertise-socket="modcluster" advertise-security-key="secret" >
After that it works fine with httpd and jboss on the same host (that bug also suggests an explicit external interface definition might be needed for use across a network). It's probably worth a note in this guide for those using 7.1.1; it's fixed in the current EAP6 release.
Permalink
Please use the newest JBoss EAP 6.1.0.Final to follow this document, or you'll meet a lot of bugs.
Permalink
Thank you so much Weinan, that was very helpful. I struggled with the configuration for some time and since there are so many combinations possible, thought I would put this down..
If anyone is is running JBoss 7.1.1.Final, mod-cluster 1.2 and apache httpd 2.2 64 bit on windows 7, this is the configuration that I used to get it working, hope it is helpful to someone.
1. Ensure the required .so files are present in the modules folder of apache httpd installation.
2. Configure httpd.conf
#xx.yy.zz.67 is your machine ip4 address that you get from ipconfig)
Listen xx.yy.zz.67:10001
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so
<VirtualHost xx.yy.zz.67:10001>
<Location />
Order deny,allow Deny from all
Allow from xx.yy.zz.
</Location>
EnableMCPMReceive
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName mycluster
ServerAdvertise On
# Below is required in a specific version (7.1.1.Final with 1.2 mod cluster) with corresponding change in domain.xml, should change the secret key value
AdvertiseSecurityKey secret AllowDisplay On
</VirtualHost>
#Below is required to view mod_cluster manager
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from xx.yy.zz
AllowDisplay On
</Location>
3. domain.xml changes
-> for 'ha' or whichever profile you have enabled in your server group add advertise-security-key="secret"
<subsystem xmlns="urn:jboss:domain:modcluster:1.0">
<mod-cluster-config advertise-socket="modcluster" advertise-security-key="secret">
-> Add instance id for web subsystem
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false" instance-id="${jboss.node.name}">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
4. Now, if you were to go to http://xx.yy.zz.67:10001/<your-application>
the request should be passed on to your jboss instance
Permalink
Hi All,
My requirement is to make 2 or more node in a clustering to get High Availability.
In my configuration i have used two nodes in a standalone mode for clustering.
I have used mod_cluster for load balancing.
If node which install Apche+mod_cluster crash the whole things stop.
Is there any way to make two mod_cluster in Active/Passive format in a such a way that when one of them crash another mod_cluster activated and start working without any interruption.
Is there any way to make two mod_cluster to check health status of each other.
Please anyone share me all the steps..
Thanks & Regards,
Jonbon Dash
Permalink
Hi Jonbon,
I'd recommend you to use an IP load balancing solution in front of multiple mod_cluster + httpd instances.
The standard solution provided by Red Hat is LVS+Heartbeat. Red Hat also supports a GUI tool called Piranha that could help you to manage LVS+Heartbeat in a convinient way.
Permalink
Hi Li,
Could you please share me whole steps or any reference doc, i don't know how to setup two mod_cluster?
I am using Window Server 2008 R2. Please guide me on this as well.
Thanks & Regards,
Jonbon Dash
Permalink
Hi Jonbon,
Generally speaking, mod_cluster uses advertising channel (an IP multicast channel) to advertise itself to the EAP6 worker nodes. If two mod_clusters advertising their addresses in the advertising channel, then the EAP6 server will register into these mod_cluster instances.
I need some time to write a document on how to do this. This weekend I'll try to find some time
Permalink
Hi Li,
Thanks a lot. I am waiting for the doc. Actually I have to do the Cluster setup in production environment.
Where we should not have any single point of failure.
Thanks & Regards,
Jonbon Dash
Permalink
Hi Jonbon,
Here is the article for your use: https://docs.jboss.org/author/display/AS71/Setting+multiple+mod_cluster+load+balancers+in+clustering+environment
Hope its helpful If you have any questions please leave comments to the above article.
Permalink
Hi all,
first of all I want to thank Li for his great tutorial. Perhaps someone can help me with my problem.
I´m using EAP 6.1 on master (Win7) and slave (Ubuntu Server) for my test environment. I also use mod_cluster-1.2.6.Final-windows-amd64. Everything works fine, if both pcs are within the same subnet. But how can I setup a cluster where the slave is in a different network?
Greetings,
Dennis Allert
Permalink
Hi Dennis,
The recommended solution is to put your httpd load balancer and your EAP6 servers in a same network. Because multiple components are either relying on IP multicast or have better performance in a LAN. For example: HornetQ, mod_cluster, JBoss Remoting, JGroups, etc. Putting your worker nodes and load balancers in a WAN will increase your configuration tasks, you have to consider much more things to make it working correctly.
A better solution could be: Building application level clusters in a LAN, and then use an IP level load balancer solution to load balance these clusters in different networks. Another options is to partition your cluster by its functions. For example, put web services cluster in one network, and put web application cluster in another network. And you can also use technologies like CDN to serve the static contents such as images. These are all better to partition your EAP6 servers and httpd load balancers across a WAN.
Hope this is useful to you
Permalink
Hi Li,
first of all I wish you a happy new year.
I was trying to implement your suggestion, but I failed in my special case. I´m new on this topic and perhaps you can help me with an example for my problem.
We´ve got two server in WAN.
Let´s say a.)´s IP are 111.111.111.111 and b.)´s IP are 222.222.222.222. Server c.) Should be the load balancer 333.333.333.333
a.) is Master and b.) is slave, connected with JBOSS Domain Mode. Both server running with the same server app. I´m able to communicate with server a.) or server b.) over two Java Socket IO specific ports. Let´s say port 9010 and 9020.
What I now need is a load balancer running on server c.), who knows both servers and is able to check if the communication over the specific Java Sockets is possible or not. So the client should only know the IP of the load balancer and the load balancer communicates with one of the servers and redirects the answer to the client. Another solution would be that the load balancer tells the client the IP of the server he should use for the communication.
I was able to run a normal load balancer who is redirecting me, if port 80 is not available, but I wasn´t able to load balance that Java Socket connection.
Do you have any suggestions or better a tutorial for me how to solve that problem?
Thanks & Regards,
Dennis Allert
Permalink
Hi Dennis,
Please don't build a cluster in a WAN. Build it in a LAN instead, because multiple components needs IP broadcasting to work properly.
Permalink
Hi Li,
Thanks for your quick response. Our problem is the following:
We´ve got a chat app for Android. User can send chat messages and pictures. There is one server which can receive queries over TCP (Java socket IO). We´ve got users from different countries and at the moment only one server located in Germany. Our plan was to spread a few servers over EU countries and cluster them for load balancing with geo tagging. We thought it would solve two problems: More speed for the user living outside of Germany and protection against a server failure.
You told me now, that we should build a LAN cluster. Now we could theoretically build several LAN cluster, but that wouldn´t solve the WAN problem. Do you have any suggestions for us?
Second question: Even if I start to build one LAN cluster in Germany, how can I load balance the TCP connections? Like I told you I wasn´t able to achieve this. Do you have any suggestions for me?
Best regards,
Dennis
Permalink
Hi Dennis, there are several technologies for WAN cluster. For example, you can use CDN to load balancing your static web contents such as images. And you may need to cache your database into different locations.
Permalink
btw, if you can't afford to build a distributed systems across different countries by yourself, there are many clouding vendors you could use. For example, Red Hat has Openshift, and you can also try Amazon EC2.
Permalink
Hi Li,
Thanks a lot for your effort. The tutorial is really helpful.
I am facing some problem to post Jms message from Non-cluster Jboss server to the above cluster setup JMS Queue from the Java Code. I have attached my Client code, Mod_cluster config & Jboss configuration file for your reference. Please guide me, how to discover the Cluster group address from Java code,if possible please share me some sample code which I can use to post message to the Cluster JMS Queue.
ClusterProgramTest.zip
Thanks & Regards,
Jonbon Dash
Permalink
Hello
Thanks a a lot for tutorial .
I think that this approach is use for "failover" i mean all request is response from master and if master is down the slave response ...
My problem is i have 15 physical server that each server have an instance of jboss7 and must be cluster (session replication) and have HAProxy to load balancing what can i do ?
Permalink
Hi Alireza,
You can use your own solution for load balancing and failover. Using mod_cluster or mod_jk plus httpd as load balancer of EAP6 servers is just one option. The session replications are implemented between EAP6 servers.
Permalink
Hi,
i'm using jboss 7.1.1 final on windows xp .
i start one master and one slave on the same pc,and see the register slave log on master console. but when start the server-three on master from the managerment console, an error occur and the host list on the topest menu is empty.
the error says unhandle master server-three.but i see the server-three start succesfully whiout any exceptioins on the console of master.
Permalink
finally.i find this is cause of browser.i upgrade the google chrome from version 28 to version 31.then there is no problems.
Permalink
Hi,
I have JBoss 7.1.3 in domain mode and mod_cluster 1.1.3 in two servers, master and slave.
Address of master is: 192.168.0.36
Address of slave is: 192.168.0.170
The profile used is full-ha and serves communicate.
I have added <distributable /> in web.xml and tried to configure httpd.conf following this guide but I don't understand how reach apache address and using load balancer. I can only reach master and slave directly (on port 8330) without using load balancer. I have found some example on the web but none of them works! In the httpd.conf I have set the listener on 192.168.0.36:10001 and at URL http://192.168.0.36:10001/mod_cluster-manager there is a mod_cluster page with these informations:
mod_cluster/1.1.x
Auto Refresh show DUMP output show INFO output
Node master:master-server (ajp://192.168.0.36:8259):
Enable Contexts Disable Contexts
Balancer: other-server-group,LBGroup: ,Flushpackets: Off,Flushwait: 10000,Ping: 10000000,Smax: 1,Ttl: 60000000,Status: NOTOK,Elected: 0,Read: 0,Transferred: 0,Connected: 0,Load: -1
Virtual Host 1:
Contexts:/CRI, Status: ENABLED Request: 0 Disable
Aliases:default-host
localhost
example.com
Node slave:slave-server (ajp://192.168.0.170:8259):
Enable Contexts Disable Contexts
Balancer: other-server-group,LBGroup: ,Flushpackets: Off,Flushwait: 10000,Ping: 10000000,Smax: 1,Ttl: 60000000,Status: NOTOK,Elected: 0,Read: 0,Transferred: 0,Connected: 0,Load: -1
Virtual Host 1:
Contexts:/CRI, Status: ENABLED Request: 0 Disable
Aliases:default-host
localhost
example.com
I noticed that in Balancer, Load is -1 and If I try to connect to 192.168.0.36:10001/CRI I obtain
Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
----Apache/2.2.15 (CentOS) Server at 192.168.0.36 Port 10001
This is my httpd.conf:
ServerName 192.168.0.36
Listen 192.168.0.36:10001
MemManagerFile /var/cache/httpd
<VirtualHost 192.168.0.36:10001>
<Directory />
Order deny,allow
Deny from all
Allow from 192.168.0.
</Directory>
<Location /mod_cluster-manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from 192.168.0.
</Location>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
ManagerBalancerName other-server-group
AdvertiseFrequency 5
</VirtualHost>
Thanks
Permalink
1. Please download the JBoss EAP 6.x and use the mod_cluster 1.2.x to run the tests. The AS 7.1.x and mod_cluster 1.1.x has bugs.
2. The 'EnableMCPMReceive' directive should be used in virtual host.
3. The 10001 virtual host should be used for MCMP channel only.
Here is an example configuration:
As the example shown above, 10.0.1.32 is the IP address of my machine.I have set two virtual machines, and 10.0.1.32:6666 is for httpd mod_cluster module to communicate with backend JBoss servers(via the MCPM channel).
The httpd version I've used is httpd-2.2.25, mod_cluster version I've used is 1.2.6.Final, and with the JBoss EAP6.2.
Btw, I've written a book regarding on these topics if you are interested in. The book name is JBoss EAP6 High Availability
Permalink
I discovered that problem was caused by my distribution of Linux (CentOS), because httpd_can_network_connect was 0.
Now, with JBoss 7.1.3 and mod_cluster 1.2.6.Final works, but sometimes I have errors as "Exception acquiring ownership", and "org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed".
I think that my two servers not have a good communications and I need to configure connection pool.
I have also other questions :D
1. What's the policy used by load balancer to decide which server use?
2. Is possible to configure it?
3. In clustering, there are rules about hardware of nodes (for example must be the same)?
4. Why some people use jboss-web.xml?
Thanks
Permalink
Thank you for the guide..
It works for me ..
I have two questions.
1. How long will the slave nodes work, if master node server failed?
2. Clustering is the set of nodes i.e JBoss AS instances, but in this guide I don't see the clustering. As we have two nodes which is handle by httpd + mod_cluster load balancer.
what I mean is [node1, node2, node3]cluser + [node4]cluster + [node5, node6]cluster
Permalink
My Aim: want to deploy EAR in managed domain model without using CLI or UI .
So Can anyone please tell me how to deploy an EAR file in Jboss7 or JBOSS6.2 in domain model , like we deploy it using below snippet in standalone.xml filein standalone mode.
"<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" auto-deploy-exploded="true"/>
</subsystem>"
similarly please let me know if there is any such way/module is there which we can incorporate in domain.xml like above , so that we can put the EAR file in any location and then when we start the server it just scans and picksup the file and deploys it.?
When I use this: "<extension module="org.jboss.as.deployment-scanner"/> " it says that we can't use this in managed domain model.
Please help
Regards,
Satya
Permalink
Hi,
Thanks for you help .
I have finished the most configurations about that ,but I can't got the HA. I have used mod_cluster + apache httpd on master as my cluster controller ,but the request not be served by slave when the master turn off .
Now,i have a question that if the cluster is unavoidable when the master was power off ,so it doesn't work .could i configure the cluster on slave ? or both of them ?
So,can anyone please tell me how to realize the faction of HA ,or the principle of HA?
thank you very much !
Permalink
Good article! I was able to follow through...almost...By that, I mean the last step - Session Replication - just did not work for me. When I call GetTime page, the time display is always null. I tried quite a few things as recommended in various comments and recommendations from Google search, it just did not work. Finally, I gave up domain mode and tried standalone mode...amazingly session replication just works!!
For everyone who struggles with session replication in domain mode (I know there are quite a few of users just in this site), I recommend give "standalone" mode a try. Good luck!
Permalink
I want to share my configuration. Hope this helps.
My configuration is JBOSS AS 7.1.0 Final and Mod Cluster 1.2.6. I also tried JBOSS EAP 6 which works too.
1. Mod_Cluster / Apache:
Mod_Cluster/Apache can be installed on any server. To make it simple, install Mod_Cluster/Apache on the same local network as the two JBOSS AS servers.
In HTTPD.conf file, make the following changes: (assume my apache server is installed in 192.168.1.101)
1). Listen to port 80.
Listen 192.168.1.101:80
2) Create Mod_Cluster virtual host:
# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
Listen 192.168.1.101:10001
ManagerBalancerName mycluster
<VirtualHost 192.168.1.101:10001>
<Location />
Order deny,allow
Deny from all
Allow from 192.168.1.
</Location>
KeepAliveTimeout 60
MaxKeepAliveRequests 0
#ServerAdvertise on http://127.0.0.1:6666
AdvertiseFrequency 5
#AdvertiseSecurityKey secret
#AdvertiseGroup 224.0.1.105:23364
EnableMCPMReceive
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from 192.168.1.
</Location>
</VirtualHost>
</IfModule>
2. JBOSS AS 7.1.0 Final:
I installed the JBOSS AS to two different servers, 192.168.1.101 and 102. For each installation, I use profile standalone-full-ha.xml profile.
1) In the profile file standalone-full-ha.xml, add proxy to point to the Apache server:
<subsystem xmlns="urn:jboss:domain:modcluster:1.0">
<mod-cluster-config advertise-socket="modcluster" proxy-list="192.168.1.101:10001" sticky-session="true"/>
</subsystem>
2) Also in the profile file, change interfaces to use 192.168.1.XX address (rather than 127.0.0.1). For example, in server 192.168.1.102:
3) To start the JBOSS server, use the following command:
In JBOSS on 192.168.1.101:
C:\jboss-as-7.1.0.Final\bin>standalone.bat -c standalone-full-ha.xml -b 192.168.
1.101 -Djbos.node.name=node1
In JBOSS on 192.168.1.102:
C:\jboss-as-7.1.0.Final\bin>standalone.bat -c standalone-full-ha.xml -b 192.168.
1.102 -Djbos.node.name=node2
Also, make sure to set JBOSS_HOME environment variable to the correct path (C:\jboss-as-7.1.0.Final for me).
After you deploy the sample projects to both servers, session replication should work.
Good luck!
Permalink