![[17.0.0.1 and later]](../ng_v17001plus.gif)
Liberty 动态路由选择的路由规则
您可以在 Liberty 动态路由选择中使用路由规则,定制用于处理特定请求的服务器。
缺省情况下,动态路由选择会在可处理请求的所有服务器中均衡装入请求。要覆盖缺省行为,您必须配置路由规则。路由规则可以将请求路由到特定服务器资源,重新定向请求或拒绝请求。
- 如果将相同应用程序部署到两个不同集群,那么可使用路由规则将请求从一组特定客户机 IP 地址定向到其中一个集群,将剩余请求定向到另一个集群。
- 如果在多个集合体中部署相同应用程序,那么可使用路由规则,仅将请求发送到第一个集合体;如果第一个集合体中没有可用服务器,将请求发送到第二个集合体中的服务器。
匹配表达式和操作
路由规则提供匹配表达式和操作。匹配表达式适用于每个请求。请求与匹配表达式匹配时,会针对此请求执行规则指定的操作。匹配表达式检查请求的多个属性,例如,URI、头、cookie、参数和客户机 IP 地址。采取的操作为拒绝、重定向或允许请求。
每个路由规则都分配了一个顺序编号。从最低顺序编号到最高顺序编号评估规则。与请求匹配的第一个规则确定如何处理请求。如果没有匹配的规则,那么会在可处理请求的所有可用服务器中均衡请求。
如果规则的操作类型是拒绝请求,那么指定适用 HTTP 返回码。拒绝代码必须为 Web 服务器支持的其中一种拒绝代码。
如果规则的操作类型是重定向请求,那么指定重定向位置。
如果规则的操作类型是允许请求,那么指定可向其发送请求的目标。目标指定对请求进行负载均衡时要选择的包含所有服务器的集合。目标集中,仅使用可最佳处理请求的服务器。还可指定故障转移目标。仅当主要目标中的所有服务器不可用时,才使用故障转移目标中的服务器。可以将目标指定为集群或服务器。
缺省情况下,请求具有会话亲缘关系时,会基于亲缘关系选择服务器。如果找到亲缘关系服务器,那么不会使用路由规则。要启用路由规则以覆盖亲缘关系选择,可以将 overrideAffinity 属性添加到 server.xml 文件的 <routingRules> 元素。请参阅为 Liberty 动态路由选择配置路由规则。
集群目标
使用集合体名称和集群名称指定集群目标。集群目标的任一部分均可使用通配符 (*)。例如,如果将集群目标指定为 cluster=collective1,*,那么可以使用 collective1 中任何集群内的服务器。如果将集群目标指定为 cluster=*,cluster1,那么可以使用任何集合体中 cluster1 内的服务器。
服务器目标
使用集合体名称、主机名、用户目录和服务器名称指定服务器目标。服务器目标的所有部分都可使用通配符。例如,如果将服务器目标指定为 server=collective1,*,那么可以使用 collective1 中的任何服务器。如果将服务器目标指定为 server=*,server1,那么可以使用任何集合体中的 server1。
路由规则评估
应用任何路由规则之前,Web 服务器智能管理确定一组最佳目标来处理请求。此组最佳目标是具有 Web 应用程序的服务器,这些应用程序的虚拟主机、上下文根和 servlet 映射与请求最佳匹配。路由规则可将用于路由的目标重定向到完整最佳目标集的子集。使用路由规则,导致无法选择原始最佳目标集之外的目标。
例如,假设存在以下条件:
- ApplicationA 具有上下文根 /A/* 且安装在 clusterA 上。
- ApplicationAB 具有上下文根 /A/B/* 且安装在 clusterAB 上。
在这些条件下,路由规则按如下所示评估请求:
- 这两个应用程序都可处理请求 /A/B/myservlet。但是,由于相比 /A/* 上下文根,/A/B/* 上下文根与 /A/B/myservlet 更为匹配,因此针对 /A/B/myservlet 的请求始终路由到 clusterAB。
- 可以使用与 /A/B/myservlet 的请求匹配的路由规则,将目标限制为 clusterAB 中服务器子集,但无法用于选择 clusterA 中的服务器,clusterA 永远不会选作此请求的匹配项。