首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Weblogic 集群中的通信

Weblogic 实例在集群中使用 IP套接字和 IP 单播或者多播进行集群信息的传递。

IP套接字(socket)是集群服务器之间的点对点通信

IP 单播(unicast)或者多播(multicast)则是服务器实例用来广播服务可用性以及传递集群可用性心跳

Weblogic 服务支持两种集群信息协议:单播和多播

单播:使用点对点的TCP/IP 套接字协议,Weblogic 10.0 开始使用

多播:使用UDP 协议,自Weblogic 4.0开始在Weblogic 集群中使用。

多播是一种比较简单的广播技术,可以让众多的应用“订阅” 指定的IP,端口以获取消息。

多播地址是一个IP地址,范围从224.0.0.0 到239.255.255.255,在weblogic 中默认的地址是239.192.0.0,应该避免使用多播地址,以免冲突。UDP 的端口范围是0-65535,然而有些特定UDP端口会有特定的用途,也应该避免冲突使用。

默认情况下,Weblogic 设置TTL 为1,以限定多播消息只在一个子网内传播。

总的来说,多播是这样的:

使用非常有效率且可扩展的点对点模型,使得weblogic 实例只需要发送一次信息到网络中,然后让网络保证消息能传递到其他实例中。

在集群成员都在一个子网中的情况下,开箱可用,方便。

当集群成员不在一个子网中的情况下,需要配置其他参数,比如多播TTL

连续丢失集群心跳三次,心跳间隔10秒,则认为该成员GG,移除出集群

可以使用MulticastTest 工具进行测试

weblogic 在集群中使用多播进行一对多的通信,比如:在很多节点的集群里进行集群范围的JNDI更新,集群心跳。

集群在广域网(WAN)中的多播配置:

路由器对多播数据包传播的完全支持

低网络延迟,可确保让大部分消息能在10ms内到达

TTL 设置合适,能让多播数据包传递到集群成员手上,在config.xml上 进行设置:

Name="testcluster"

ClusterAddress="wanclust"

MulticastAddress="wanclust-multi"

MulticastTTL="3"

/>

注意:

1,防火墙可能隔断多播消息传递。

2,不要和其他应用共享多播地址

3,udp_max_buf 设置能有效降低 多播风暴,提高性能

使用单播进行一对多通信

weblogic单播协议使用TCP/IP套接字发送信息到集群成员,因为TCP/IP 协议是点对点的协议,因此集群成员能直接接收到信息。

为了限制因为集群成员增加导致的套接字数量增加,weblogic 使用组长的机制,在这个机制中:

weblogic 将集群成员分成固定数量的组

每个组有一个实例充当组长,当组长实例GG,会推举出另外一个组长。

集群成员发送消息时,只发给组长,然后组长再转发给组成员。

单播机制下,每次心跳检查间隔为15秒,失败一次则认为成员GG。

使用 ClusterMBean.setClusterMessagingMode 参数指定使用单播或者多播。

使用多播和单播的对比

使用IP套接字进行点对点通信

weblogic 集群服务实例使用IP套接字以:

访问在其他集群的服务实例上的非集群化对象

在主服务实例和辅助实例之间复制HTTP会话状态和有状态的EJB会话状态

访问驻留在远程服务器上的集群对象(通常只发生在多集群架构上)

正确的套接字配置对weblogic 集群的性能影响至关重要,有两个重要的因素决定了Weblogic 的套接字通信效率:

服务器实例使用 native 或 pure-java socket reader (这里实在不好翻译)

如果使用pure-java socket reader ,是否有足够的socket reader thread

建议使用 native 。一开始我也不知道为什么,后来明白了,看以下内容:

Native socket readers use far more efficient techniques to determine if there is data to read on a socket. With a native socket reader implementation, reader threads do not need to poll inactive sockets—they service only active sockets, and they are immediately notified (via an interrupt) when a given socket becomes active.

设置客户端的socket reader,在java 命令行中指定以下参数:

-Dweblogic.ThreadPoolSize=value

-Dweblogic.ThreadPoolPercentSocketReaders=value

在集群中启动受管服务器的时候,需要等待在 ClusterMBean 中指定的

MemberWarmupTimeoutSeconds 热身时间(默认30s)通过监听心跳信息确认在集群中的其他实例。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181221G1KKER00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券