我知道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。