对于Data1下面的输出,我想创建一个正则表达式,可以帮助我识别POOLNAME2与KNOWNSERVER2相关联。 POOLNAME1与KNOWNSERVER2无关。 POOLNAME1与KNOWNSERVER1相关联。
ltm pool POOLNAME1 {
load-balancing-mode least-connections-member
members {
KNOWNSERVER1
ltm pool POOLNAME2 {
load-balancing-mode least-connections-member
members {
KNOWNSERVER2
这个正则表达式有效:
match = re.findall( r'ltm pool POOLNAME2.*KNOWNSERVER', data1, re.DOTALL )
但是这个正则表达式不能按照我想要的方式工作(这应该提供与前一个相同的结果):
match = re.findall( r'ltm pool .*KNOWNSERVER', data1, re.DOTALL )
相反,它会给我下面的整个字符串......
ltm pool POOLNAME1 { load-balancing-mode least-connections-member 成员{ KNOWNSERVER1 ltm pool POOLNAME2 { load-balancing-mode least-connections-member 成员{ KNOWNSERVER2
相关的匹配是POOLNAME2而不是POOLNAME1。
答案 0 :(得分:1)
我不确定我理解这个问题?我理解你的问题是,你有一个定义的虚拟IP地址, 两个名为POOLNAME1和POOLNAME2的池,使用的负载均衡算法最少。
我预测,您有多个服务器被分组为服务不同的请求。我推荐的是 你把第一组服务器放在一个池中并给它们一个名字,例如:POOLNAME1,第二组服务器将被放入 在POOLNAME2的第二个池中。
===>为了回答我认为这个问题的主要核心,我建议你使用i-Rule并将i-Rule与 与使用这两个池关联的虚拟服务器,i-Rule将提供选择适当池所需的逻辑 以及更多融合的灵活性。我给了你两个i-Rules的示例。下面是一个 解释i-Rules的作用。
when HTTP_REQUEST {
set URI [string tolower [HTTP::uri]]
if { $URI starts_with "/<uri-name"}{
pool <POOL_NAME>
} else {reject}
}
此i-Rule满足http请求,并且如果作为请求字符串一部分的URI由以下内容组成的URI,则会将请求发送到特定的池名称 定义的名称。在这种情况下,脚本中的名称是通用的(uri-name)。
因此,假设您访问了网址http://pptesting.kno.agc.com/chico
上面的请求中的(uri-name)将替换“chico”,因此i-Rule会将请求发送到池中的服务器 命名POOLNAME1(脚本中的POOL_NAME)并在此之后拒绝任何其他请求。我假设这是你问题中的逻辑。
下面的第二个i-Rule为逻辑流程增加了一点。
when HTTP_REQUEST {
if {([ string tolower [HTTP::uri]] starts_with "/<uri>" ) } { pool POOLNAME1 }
else { pool POOLNAME2 }
此i-Rule满足http请求,并将请求发送到名为POOLNAME1的主池,如果此池不可用,它会将请求发送到 POOLNAME2。仅当“uri”以定义的字符串开头时,才会引用池。在这种情况下,“uri”将类似于上面示例中的“chico”
我希望我能回答你的问题,如果你打算传达不同的推理,请告诉我。