JBoss.org Community Documentation

22.7.7. Binding JGroups Channels to a particular interface

In the Transport Protocols section above, we briefly touched on how the interface to which JGroups will bind sockets is configured. Let's get into this topic in more depth:

First, it's important to understand that the value set in any bind_addr element in an XML configuration file will be ignored by JGroups if it finds that system property jgroups.bind_addr (or a deprecated earlier name for the same thing, bind.address) has been set. The system property trumps XML. If JBoss AS is started with the -b (a.k.a. --host) switch, the AS will set jgroups.bind_addr to the specified value.

Beginning with AS 4.2.0, for security reasons the AS will bind most services to localhost if -b is not set. The effect of this is that in most cases users are going to be setting -b and thus jgroups.bind_addr is going to be set and any XML setting will be ignored.

So, what are best practices for managing how JGroups binds to interfaces?

  • Binding JGroups to the same interface as other services. Simple, just use -b:

    ./run.sh -b -c all

  • Binding services (e.g., JBoss Web) to one interface, but use a different one for JGroups:

    ./run.sh -b -Djgroups.bind_addr= -c all

    Specifically setting the system property overrides the -b value. This is a common usage pattern; put client traffic on one network, with intra-cluster traffic on another.

  • Binding services (e.g., JBoss Web) to all interfaces. This can be done like this:

    ./run.sh -b -c all

    However, doing this will not cause JGroups to bind to all interfaces! Instead , JGroups will bind to the machine's default interface. See the Transport Protocols section for how to tell JGroups to receive or send on all interfaces, if that is what you really want.

  • Binding services (e.g., JBoss Web) to all interfaces, but specify the JGroups interface:

    ./run.sh -b -Djgroups.bind_addr= -c all

    Again, specifically setting the system property overrides the -b value.

  • Using different interfaces for different channels:

    ./run.sh -b -Djgroups.ignore.bind_addr=true -c all

This setting tells JGroups to ignore the jgroups.bind_addr system property, and instead use whatever is specfied in XML. You would need to edit the various XML configuration files to set the bind_addr to the desired interfaces.