我知道JBoss 集群Default 的设定就是UDP(JGroups),但在实际环境中的网络环境时常不允许UDP,在这种情况下,我们就需要使用TCP。

JBoss 7/WildFly 中负责集群的主要模块是JGroups 跟 Infinispan,而控制Cluster里面的node跟集群中其他节点通信沟通的就是JGroups,所以,不管你今天用的是Standalone或是domain,只要找到jgroups的subsystem修改,就OK了,如下:

 

  • 将default-stack 由 udp 改为 tcp:

 

 

<subsystem default-stack="udp" xmlns="urn:jboss:domain:jgroups:1.1">
  .....
</subsystem>


改为 tcp

 

 

<subsystem default-stack="tcp" xmlns="urn:jboss:domain:jgroups:1.1">
  .....
</subsystem>

 

 

  • 将原先使用MPING 的设定移除

 

 

<subsystem default-stack="tcp" xmlns="urn:jboss:domain:jgroups:1.1">
  <stack name="udp">
     .....
  </stack>
  <stack name="tcp">
     <transport socket-binding="jgroups-tcp" type="TCP"></transport>
     <!--<protocol type="MPING" socket-binding="jgroups-mping"/>-->
  </stack>
 </subsystem>

 

 

  • 加上TCPPING的参数

 

 

<subsystem default-stack="tcp" xmlns="urn:jboss:domain:jgroups:1.1">
  <stack name="udp">
     .....
  </stack>
  <stack name="tcp">
     <transport socket-binding="jgroups-tcp" type="TCP"></transport>
     <protocol type="TCPPING">
        <property name="initial_hosts">172.16.1.77[7600],172.16.1.79[7600]</property>
        <property name="num_initial_members">2</property>
        <property name="port_range">0</property>
        <property name="timeout">2000</property>
     </protocol>
  </stack>
 </subsystem>


其中:

 

 

  • initial_hosts =所有你想要加入的集群机器IP与PORT号
  • num_initial_members = Cluster最多加入多少台机器数量
  • port_range = 你要搜寻机器可以Ping到port 的范围
  • timeout = 设定timeout时间(毫秒ms)

 

到此我们完成切换默认的UDP到TCP。