Wednesday, November 4, 2009

How to change UDP ping to TCP Ping for BES 5.0 including MR3

How to change UDP ping to TCP Ping for BES 5.0 including MR3
 
Key Words:
 
BES 5.0 High Availability, BAS, Blackberry Administrative Services, Cannot Login to BAS, Blackberry Administrator Services. UDPPing and TCPPing
 
If you install Bes 5.0 High Availability for Blackberry Enterprise services on two Nodes, namely, BES50-Node1 and BES50-Node2. And you also install BAS, Blackberry Administrative services on Node1 and Node2. You will find out you can only login to BAS services to one of nodes. Once you try to login to the other node, you are prompt to login again page but never succeed.
The issue started with BES 5.0 initial release, until the most recently MR3. RIM code the bug with SDR329691
 
The work around:
 
To change default UDPPing to TCPPing by modifying Cluster-service.xml file and bas-object-versioning-cache-service.xml files under installed folder...
 
C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\jboss\ejb\server\default\deploy\Cluster-service.xml

C:\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\BAS\server\default\deploy\bas-object-versioning-cache-service.xml
Before you make any change on these two files, please make a copy of the file to your backup folder (not in the folder where is the is located)
 
A. Change of bas-object-versioning-cache-service.xml
 
1. open the file with notepad, find the following string

<attribute name="ClusterConfig">
locate...
before change...
<!--* UDP config stack *-->
       
         <Config>
            <UDP mcast_addr="${jboss.partition.udpGroup:228.1.2.5}"
After the change (note: you add <!--* to start comment out <Config>
<!--* UDP config stack *-->
         <!--*
         <Config>
            <UDP mcast_addr="${jboss.partition.udpGroup:228.1.2.5}"
and locate... (the end of UDP Config Stack)

        /<Config>
.....
before the change
    <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="false"/>
         </Config>
        
After the change...

    <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="false"/>
         </Config>
         *-->
Note... you added *--> to end of the comment out of UDP Stack

2. Leave MPING unchanged (by default, it's commented out)
 
3. Enable TCPPING by locating...   <!--* TCP with TCPPING (TCP ping) config stack *--> string
 
a) remove the <!--* to enable TCPing
 
before the change
         <!--*
         <Config>
   <TCP bind_addr="${jboss.bind.address}"
after the change
  <Config>
   <TCP bind_addr="${jboss.bind.address}"

....

before the change
 
            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="false"/>
         </Config>
         *-->
after the change
            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="false"/>
 </Config>

4. find the string of "TCPPING initial_hosts"
 
before you change
 
<TCPPING initial_hosts="host1[17800],host2[17800],host3[17800]" port_range="200"
 
after the change
 
<TCPPING initial_hosts="BES50-Node2[17800],BES50-Node1[17800]" port_range="200"
 
Note: replace host1 with your real node1 name and replace host2 with your real node2 name and delete host3[17800] if you have two instance of BAS
 
That's end for Node1 bas-object-versioning-cache-service.xml file. For Node2, you just copy the file to node 2 and edit the oder of node name
 
<TCPPING initial_hosts="BES50-Node1[17800],BES50-Node2[17800]" port_range="200"
and save change of the file

B.Change of Cluster-service.xml
 
1. comment out UDP stack as shown in previous section as follows:
 <!--* UDP config stack *-->
         <!--*
         <Config>
            <UDP mcast_addr="${jboss.partition.udpGroup:228.1.2.1}"
                 mcast_port="${jboss.hapartition.mcast_port:48855}"
                 receive_on_all_interfaces="false"
                 tos="8"
                 ucast_recv_buf_size="20000000"
                 ucast_send_buf_size="640000"
                 mcast_recv_buf_size="25000000"
                 mcast_send_buf_size="640000"
                 loopback="true"
                 discard_incompatible_packets="true"
                 enable_bundling="false"
                 max_bundle_size="64000"
                 max_bundle_timeout="30"
                 use_incoming_packet_handler="true"
                 use_outgoing_packet_handler="false"
                 ip_ttl="${jgroups.udp.ip_ttl:6}"
                 down_thread="false" up_thread="false"/>
            <PING timeout="10000"
                  down_thread="false" up_thread="false" num_initial_members="3"/>
            <MERGE2 max_interval="200000"
                    down_thread="false" up_thread="false" min_interval="20000"/>
            <FD_SOCK down_thread="false" up_thread="false"/>
            <FD timeout="20000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
            <VERIFY_SUSPECT timeout="10000" down_thread="false" up_thread="false"/>
            <pbcast.NAKACK max_xmit_size="60000"
                    use_mcast_xmit="false" gc_lag="0"
                    retransmit_timeout="300,600,1200,2400,4800"
                    down_thread="false" up_thread="false"
                    discard_delivered_msgs="true"/>
            <UNICAST timeout="300,600,1200,2400,3600"
                    down_thread="false" up_thread="false"/>
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                    down_thread="false" up_thread="false"
                    max_bytes="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="10000"
                    down_thread="false" up_thread="false"
                    join_retry_timeout="10000" shun="true"
                    view_bundling="true"/>
            <FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="false"/>
         </Config>
         *-->
 
2. Leave MPING section unchanged.
 
3. remove "comment out: TCPPing " <!--- before  <Config> *-->" after /<Config>
 
After the change
 
        <!--* TCP with TCPPING (TCP ping) config stack *-->
<!-- To use this config stack, uncoment it and replace 'TCPPING initial-hosts' with the list of host names in the cluster keeping the same format of hostx[17600] -->
<!-- Also coment out the UDP config stack above -->
         <Config>
            <TCP bind_addr="${jboss.bind.address}"
                 start_port="17600"
                 end_port="17799"
                 loopback="true"
                 tcp_nodelay="true"
                 recv_buf_size="20000000"
                 send_buf_size="640000"
                 discard_incompatible_packets="true"
                 enable_bundling="false"
                 max_bundle_size="64000"
                 max_bundle_timeout="30"
                 use_incoming_packet_handler="true"
                 use_outgoing_packet_handler="false"
                 down_thread="false" up_thread="false"
                 use_send_queues="false"
                 sock_conn_timeout="300"
                 skip_suspected_members="true"/>
            <TCPPING initial_hosts="host1[17800],host2[17800],host3[17800]" port_range="200"
                     timeout="10000"
                     down_thread="false" up_thread="false"
                     num_initial_members="3"/>
            <MERGE2 max_interval="200000"
                    down_thread="false" up_thread="false" min_interval="20000"/>
            <FD_SOCK down_thread="false" up_thread="false"/>
            <FD timeout="20000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
            <VERIFY_SUSPECT timeout="10000" down_thread="false" up_thread="false"/>
            <pbcast.NAKACK max_xmit_size="60000"
                           use_mcast_xmit="false" gc_lag="0"
                           retransmit_timeout="300,600,1200,2400,4800"
                           down_thread="false" up_thread="false"
                           discard_delivered_msgs="true"/>
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                           down_thread="false" up_thread="false"
                           max_bytes="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="10000"
                        down_thread="false" up_thread="false"
                        join_retry_timeout="10000" shun="true"
                        view_bundling="true"/>
            <pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="false"/>
         </Config>

4. find the string of "TCPPING initial_hosts"
 
before you change
 
<TCPPING initial_hosts="host1[17800],host2[17800],host3[17800]" port_range="200"
 
after the change
 
<TCPPING initial_hosts="BES50-Node2[17800],BES50-Node1[17800]" port_range="200"
 
Note: replace host1 with your real node1 name and replace host2 with your real node2 name and delete host3[17800] if you have two instance of BAS
 
That's end for Node1 bas-object-versioning-cache-service.xml file. For Node2, you just copy the file to node 2 and edit the oder of node name
 
<TCPPING initial_hosts="BES50-Node1[17800],BES50-Node2[17800]" port_range="200"
and save change of the file
 
After you made the change, shutdown the standby BES and wait till you can login to BAS on node1, then turn on the standby node and wait till you can login to BAS on node2
open task manager check memory size for process BAS-AS.exe, if it is greater than 310 KB, you should be able to BAS on the node for MR3 installed, 210 KB for BES 5.0 without MR.
 
If you need a complete working version of both files, please post request in comments section.
 
Thank you.
 
 
 

 

2 comments: