问题描述</p>

HTTP 请求在 WebLogic 群集节点之间的负载平衡不均,即,群集中一个或多个节点接收和执行的 HTTP 请求比同一群集中的其它节点多。</td> </tr> </tbody> </table>


故障排除

请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。</p>

快速链接

为什么发生此问题?

在群集中出现的 HTTP 请求负载平衡不均问题具有以下特征:



由于 HTTP 会话分配不均造成 HTTP 请求的负载平衡不均

代理将不包含会话 cookie 的请求转发到基于 round-robin 负载平衡模式的群集节点,并在该节点上创建新会话。理想状态下,所有群集节点应当接收等量的 HTTP 会话。如果没有出现这种情况,则由于负载平衡策略的“粘性”特点,接收较多会话的节点将得到比其它节点数量更多的请求。最终结果是造成群集节点之间负载分配不均。

包含会话 cookie 的请求总是被转发到作为会话的“primary”主机的节点,这被称为粘性负载平衡或基于会话粘连的负载平衡。对不均匀负载平衡的探查不适用于此类型的请求。

含有会话 cookie 的请求在代理调试日志中有类似以下形式的日志条目:


Mon May 10  2004 Parsing cookie JSESSIONID=Af48B06Xe6BvewE8yCNWKz62dsiu028qlO9GvkS41bg3n53RbJ2Z!-2032354160!-457294087 </p>

Mon May 10 13:14:40 2004 getpreferredServersFromCookie: -2032354160!-457294087 

Mon May 10 13:14:40 2004 Hdrs from Client:[cookie]=[JSESSIONID=Af48B06Xe6BvewE8yCNWKz62dsiu028qlO9GvkS41bg3n53RbJ2Z!-

2032354160!-457294087]</td> </tr> </tbody> </table>


代理插件维护一个称为“常规服务器列表”的内存中列表,该列表包含在任一时间点已知处于良好运行状态 (Status:OK) 的群集节点。插件使用常规服务器列表来确定选择哪一个群集节点,以便转发不包含会话 cookie 的请求。如果没有出现任何问题,则常规服务器列表将与用插件配置的静态列表相同。

有一些情况(如下所述)会导致常规服务器列表收缩而成为静态列表的一个子集。当出现这种问题时,插件转发不包含会话 cookie 的请求的可用节点就会大大减少,结果 HTTP 会话的分配将变得不均。</td> </tr> </tbody> </table>

影响常规服务器列表的因素</p>
  1.  来自某个群集节点的响应流中的 X-WebLogic-Cluster-List HTTP 报头,该群集节点为特定请求提供服务。
<table style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; width: 615px; font-family: helvetica, arial, verdana, geneva, sans-serif; orphans: 2; letter-spacing: normal; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" cellspacing="2" cellpadding="2" 1?="1?" unselectable="on">
什么是 X-WebLogic-Cluster-List HTTP 报头?</p>

后端 Weblogic Server 通过响应流中的 HTTP 报头 X-WebLogic-Request-ClusterInfo 处理来自插件的请求,并将已知的活动群集成员列表返回在该点上的插件。只有在更改群集列表时才会返回该报头。

</td> </tr> </tbody> </table>

如果返回的群集列表被截断,在插件的常规服务器列表也将变成完整群集列表的子集。当后端群集节点在其自己的群集视图中有一个群集节点子集时,该节点将返回被截断的列表。

这是负载平衡问题的最常见原因。
  1. 当插件试图获取某个群集节点提供服务的请求时(即向某个群集节点发送 http 请求或从群集节点读取响应时),就会出现任何异常。
如果在此过程出现异常,则该群集节点将会被标记为错误,并被临时从常规服务器列表中删除。


返回页首



诊断</p>

  1. 配置代理插件以生成更多诊断数据。有关详细信息,请参考利用代理插件的问题常规诊断过程

    </li> </ol>

    1. 查看代理桥接器页面的常规服务器列表
    如果列表没有显示具有 Status: OK(状态: 正常)的所有群集节点,则常规服务器列表已经被截断以包含节点子集。
    </td> </tr> </tbody> </table>
    原始: </p>

    General Server List:

    1. Host: ‘172.18.137.50’ Port: 8001 Status: OK
    2. Host: ‘172.18.137.54’ Port: 8001 Status: OK

    被截断: 

    General Server List:

    1. Host: ‘172.18.137.50’ Port: 8001 Status: OK


    1. 下一步是确定哪一个因素,(a) 还是 (b),或者两个因素合在一起引起此问题。
    1. 被截断的 X-WebLogic-Cluster-List
    在代理日志中搜索 X-WebLogic-Cluster-List,并查看什么时候后端群集节点已经返回被截断的列表。通过跟踪同一请求的前一个日志条目,确定哪一个后端群集节点已经返回被截断的 X-WebLogic-Cluster-List。
    完整群集列表:</p>

    Mon May 10 13:14:30 2004 Hdrs from WLS:[X-WebLogic-Cluster-Hash]=[sUuYnuyhFpkhw6ty

    44bkNczWnaA]
     


    Mon May 10 13:14:30 2004 Hdrs from WLS:[X-WebLogic-Cluster-List]=[-2032354160!-1408071374!38625!-1|-457294087!-

    408071370!38625!-1]


    …………………


    Mon May 10 13:14:30 2004 Parsing cluster list: -2032354160!-1408071374!38625!-1|-457294087!-1408071370!38625!-1 


    Mon May 10 13:14:30 2004 Initializing lastIndex=0 for a list of length=2 


    Mon May 10 13:14:30 2004 ### Got a new Server List of length 2 ### 


    Mon May 10 13:14:30 2004 ###Response### : Srvr# [1] = [172.18.137.50:38625:65535] 


    Mon May 10 13:14:30 2004 ###Response### : Srvr# [2] = [172.18.137.54:38625:65535] 

      

    被截断的群集列表: 

    Tue May 11 12:22:01 2004 Hdrs from WLS:[X-WebLogic-Cluster-Hash]=[O2ukNQEbMOLzU+R2026DpZaYVtI] 


    Tue May 11 12:22:01 2004 Hdrs from WLS:[X-WebLogic-Cluster-List]=[848189891!-1408071374!38625!-1] 


    ………………… 


    Tue May 11 12:22:01 2004 Parsing cluster list: 848189891!-1408071374!38625!-1 


    Tue May 11 12:22:01 2004 Initializing lastIndex=0 for a list of length=1 


    Tue May 11 12:22:01 2004 ### Got a new Server List of length 1 ### 


    Tue May 11 12:22:01 2004 ###Response### : Srvr# [1] = [172.18.137.50:38625:65535]</td> </tr> </tbody> </table>

    1. 请求响应中的异常
    在代理桥接器页上查找“Runtime statistics”下的“Exception objects created”。如果计数大于 0,则已经出现了一些异常。
    还查找代理日志中的“Exception”。
    出现错误后的代理桥接器页:</p>

    requests: 6 


    Exception objects created: 1 


    CONNECTION_REFUSED exceptions: 1</p>

    </span>代理日志中的对应日志条目:

    Tue May 11 12:22:00 2004 attempt #0 out of a max of 5 


    Tue May 11 12:22:00 2004 trying connect to PRIMARY ‘172.18.137.54’/38625 /65535 at line 1138 for ‘/mywebapp/session.jsp’ 


    Tue May 11 12:22:00 2004 INFO: New NON-SSL URL 


    Tue May 11 12:22:00 2004 *******Exception type [CONNECTION_REFUSED] (172.18.137.54:38625 errno = 0) raised at line 1536 of URL.cpp</div> </td> </tr> </tbody> </table>

    返回页首

    解决方法 </p>

    1. 如果被发现的问题是返回被截断列表的 X-WebLogic-Cluster-List,那么查明哪一个群集节点返回该响应并突出该节点。绝大多数情况下,问题是由于组播造成群集不稳定引起的。有关组播问题的诊断,请参阅组播错误
    2. 如果代理桥接器页报告有一些异常,则查明出现了什么类型的异常。
    如果问题未能得到解决,并且由于上述一个或两个原因继续影响常规服务器列表,那么您可以设置<font face="Arial, Helvetica, sans-serif">DynamicServerList="OFF"</font>,以使常规服务器列表将一直按配置包含完整的群集节点列表(静态列表)。有关详细信息,请参考 General Parameters for Web Server Plug-Ins(Web 服务器插件的常规参数),并查看 DynamicServerList 的说明。<span style="font-family: 'times new roman'">但注意设置<span class="Apple-converted-space"> </span></span><font face="Arial, Helvetica, sans-serif">DynamicServerList="OFF"</font><span class="Apple-converted-space"> </span><span style="font-family: 'times new roman'">的含义。</span>

    外部资源</p>

    </u></b>

    </td> </tr> </tbody> </table>

    返回页首

      

    </div>

    是否需要更多帮助?</p>

    如果您已经理解这个模式,但仍需要其它帮助,您可以:

    1.  http://support.bea.com/ 上查询 AskBEA(例如使用“HTTP load balance problem”),以查找其它已发布的解决方案。
    2.  http://support.bea.com/ 上,向 BEA 的某个新闻组中提出更详细具体的问题。

      </li> </ol>

      如果这还不能解决您的问题,并且您拥有有效的技术支持合同,您可以通过登录以下网站来打开支持案例:http://support.bea.com/。</td> </tr> </tbody> </table>


      反馈

      请给我们提供您的意见,说明此支持诊断模式“使用代理插件时群集中的 HTTP 负载平衡问题”一文是否有所帮助,您需要的任何解释,以及对支持诊断模式的新主题的任何要求。</p>

      </font>

      </td> </tr> </tbody> </table>


      免责声明:

      依据 BEA 与您签署的维护和支持协议条款,BEA Systems, Inc. 在本网站上提供技术技巧和修补程序供您使用。虽然您可以将这些信息和代码与您获得 BEA 授权的软件一起使用,但 BEA 并不对所提供的技术技巧和修补程序做任何形式的担保,无论是明确的还是隐含的。

      本文档中引用的任何商标是其各自所有者的财产。有关完整的商标信息,请参考您的产品手册。

      转载请注明:WebLogic Android 博客 » 使用代理插件时群集中的 HTTP 负载平衡问题[转]