关于WebLogic集群多播地址方面的问题解决
WebLogic集群依靠多播地址来探测集群节点的“心跳”,多播地址默认一般是239.139.0.0,端口7001。那不同集群的多播地址能否重复呢?答案是:一定不能重复,必须保证“多播地址+端口”的唯一性。下面列举实际应用中多播地址重复的几个问题:
假定场景:有A、B两个WebLogic集群,并且多播地址+端口设置相同。A集群中有a1、a2两个被管server;B集群中有b1、b2两个被管server。A、B集群各通过Apache转发。
案例1:
访问集群A的应用时,不时出现会话丢失现象,分析后是request所带的jsessionid找不到对应的JVM。 这个用httpWatch工具可以跟踪到jsessionid,也可以打开weblogic的apache插件日志,能够看到相应的错误。
原因:由于多播地址重复,集群A收到了集群B中节点的心跳信息,干扰了集群A的动态服务列表更新,丢失了a1或者a2的信息,使得本来转发到a1或a2节点的请求找不到相应的JVM,其实后台Session是在的。
案例2:
假定集群A和集群B的集群名称都为myCluster,本来两个集群,名称是可以相同的。但在多播地址重复的情况下,假定B集群已启动,此时启动A,可能会报出集群myCluster名称重复的ERROR信息。
下面简单说明一下,在WebLogic集群环境下,如何利用多播来检测集群环境各节点都是正常的。如下:
java -cp .:/……/server/lib/weblogic.jar weblogic.cluster.MulticastMonitor <UdpAddress> <UdpPort> <domainName> <clusterName>
说明:
<XXX>代表参数,实际输入不要写 <> 。
(1)UdpAddress:多播地址
(2)UdpPort:多播端口
(3)domainName:WebLogic domain的名称
(4)clusterName:WebLogic集群名称
(5)标注的红色字体部分根据weblogic.jar的实际路径填写。
执行:
在WebLogic集群的每台机器上都执行一下,如果正常的话,每个机器上都能收到各节点的反馈信息。
(1)假设有2台机器,每台机器上部署了2个集群节点,那在每台机器上执行都能够收到4条UDP消息(分别对应4个节点)
(2)如果收到了集群外部的UDP消息,说明和其他集群多播配置有重复,需要更改多播地址。