Monday, February 9, 2009

Configuring a BPEL Process Manager cluster using TCP instead of UDP

When configuring multicast for an Oracle SOA Suite 10g (10.1.3.3) cluster, there are two sets of multicast addresses that are required; one for the Oracle Application Server and a completely separate one for BPEL Process Manager. This is to allow BPEL Process Manager to manage active/passive adapter state as well as propagate process deployment notifications in the cluster.

The TCP settings in jgroups-protocol.xml are designed for clustering across subnets, and Oracle seems to generally recommend using multicast otherwise. Unfortunately, the Enterprise Deployment Guide (10.1.3.3) does not describe how to configure TCP-based clustering for BPEL Process Manager.

When to use TCP for BPEL Process Manager Clustering

You should you use node-to-node (TCP) instead of multicast (UDP) when configuring a BPEL Process Manager cluster if a combination of the conditions below apply:

- You cannot configure multicast.
- Your BPEL Process Manager servers communicate across subnets.
- You have a very large number of nodes in your cluster.
- Performance of UDP is slow in your environment.

Configuring TCP-based clustering for BPEL Process Manager

Perform the following on all BPEL Process Manager servers in your cluster.

1. Comment out the UDP multicast configuration in jgroups-protocol.xml:
    <--
    <config>
    <UDP mcast_send_buf_size="32000"
    .
    .
    .
    </config>
    -->

2. Uncomment the TCP configuration in jgroups-protocol.xml and update the initial_hosts attribute with the hostnames in your node-to-node cluster, as well as the port you want to use (7900 in the example below):
    <config>
    <TCP start_port="7900" loopback="true" send_buf_size="32000" recv_buf_size="64000"/>
    <TCPPING timeout="3000" initial_hosts="
    server1[7900],server2[7900]" port_range="3" num_initial_members="3"/>
    .
    .
    .

The configured port should be identical across all servers.

3. Restart OPMN.

If configured correctly, the log file SOA_GROUP~OC4J_SOA~SOA_GROUP~1.log should show it working with entries similar to:
    INFO: server socket created on 192.168.28.210:7900
    GMS: address is 192.168.28.210:7900
    INFO: created socket to 192.168.28.207:7900
    INFO: created socket to 192.168.28.210:7900

The log entries below shows the result of having incorrectly configured different ports:
    WARNING: discarded message from different group "server2:8880" (our group is "server1:7777"). Sender was192.168.28.207:7900
    WARNING: discarded message from different group "server2:8880" (our group is "server1:7777"). Sender was192.168.28.207:7900

Good luck.

1 comment:

arif-ali-saiyed said...

that was quite detailed.
Thanks for sharing