HAProxy - URL 基于负载均衡的路由 - 使用 listen 和 use-server
HAProxy - URL Based routing with load balancing - using listen and use-server
我需要配置HAProxy将不同路径的请求转发到不同的后端,其中一些后端需要做负载均衡。所以我遇到了 this question,那里提供的解决方案确实有效,但由于我们的约定,我需要使用 listen
和 use-server
而不是 frontend
和 use_backend
.
所以现在我有这样的东西:
listen poq [url]:[port]
acl has_cool_url path_beg -i /cool
use-server cool if has_cool_url
server cool [ip]:[port] check
server default [ip]:[port] check
我不能用这个:
listen poq [url]:[port]
acl has_cool_url path_beg -i /cool
use_backend cool if has_cool_url
use_backend notcool if !has_cool_url
backend cool
balance roundrobin
server first [ip]:[port] check
server second [ip]:[port] check
backend notcool
server third [ip]:[port] check
因为我们的惯例告诉我们要在 listen
块中定义所有内容。
所以我的问题是:有没有这样的:
listen poq [url]:[port]
acl has_cool_url path_beg -i /cool
use-server {first, second} if has_cool_url
server first [ip]:[port] check
server second [ip]:[port] check
server default [ip]:[port] check
first
和 second
是使用循环法进行负载平衡的吗?
您的约定是武断的并且限制了您的功能。 listen
块在功能上类似于具有相同名称的单个 frontend
和 backend
块,以及从前端指向后端的隐式 default_backend
。 listen
块旨在用于简单配置。
后端的意义在于后端中的所有服务器都提供相同的服务。 use-server
允许您 select 恰好一台服务器。
只有你可以用listen
做的事情是平衡一组默认服务器,加上一个或多个单独的服务器,使用条件匹配单独寻址,但是他们无法平衡。
listen poq [url]:[port]
acl has_warm_url path_beg -i /warm
use-server warm-server if has_warm_url
acl has_hot_url path_beg -i /hot
use-server hot-server if has_hot_url
server warm-server [ip]:[port] check weight 0
server hot-server [ip]:[port] check weight 0
server default1 [ip]:[port] check
server default2 [ip]:[port] check
在此配置中,/warm 转到 warm-server,/hot 转到 hot-server。这两个服务器的权重为 0,以防止它们处理任何其他请求。
其他一切都在 default1 和 default2 之间平衡。
这是 listen
的所有灵活性,因为 HAProxy 只为每个后端执行一组平衡,并且如上所述,listen
部分是以下功能的隐式组合一组匹配的 frontend
和 backend
.
我需要配置HAProxy将不同路径的请求转发到不同的后端,其中一些后端需要做负载均衡。所以我遇到了 this question,那里提供的解决方案确实有效,但由于我们的约定,我需要使用 listen
和 use-server
而不是 frontend
和 use_backend
.
所以现在我有这样的东西:
listen poq [url]:[port]
acl has_cool_url path_beg -i /cool
use-server cool if has_cool_url
server cool [ip]:[port] check
server default [ip]:[port] check
我不能用这个:
listen poq [url]:[port]
acl has_cool_url path_beg -i /cool
use_backend cool if has_cool_url
use_backend notcool if !has_cool_url
backend cool
balance roundrobin
server first [ip]:[port] check
server second [ip]:[port] check
backend notcool
server third [ip]:[port] check
因为我们的惯例告诉我们要在 listen
块中定义所有内容。
所以我的问题是:有没有这样的:
listen poq [url]:[port]
acl has_cool_url path_beg -i /cool
use-server {first, second} if has_cool_url
server first [ip]:[port] check
server second [ip]:[port] check
server default [ip]:[port] check
first
和 second
是使用循环法进行负载平衡的吗?
您的约定是武断的并且限制了您的功能。 listen
块在功能上类似于具有相同名称的单个 frontend
和 backend
块,以及从前端指向后端的隐式 default_backend
。 listen
块旨在用于简单配置。
后端的意义在于后端中的所有服务器都提供相同的服务。 use-server
允许您 select 恰好一台服务器。
只有你可以用listen
做的事情是平衡一组默认服务器,加上一个或多个单独的服务器,使用条件匹配单独寻址,但是他们无法平衡。
listen poq [url]:[port]
acl has_warm_url path_beg -i /warm
use-server warm-server if has_warm_url
acl has_hot_url path_beg -i /hot
use-server hot-server if has_hot_url
server warm-server [ip]:[port] check weight 0
server hot-server [ip]:[port] check weight 0
server default1 [ip]:[port] check
server default2 [ip]:[port] check
在此配置中,/warm 转到 warm-server,/hot 转到 hot-server。这两个服务器的权重为 0,以防止它们处理任何其他请求。
其他一切都在 default1 和 default2 之间平衡。
这是 listen
的所有灵活性,因为 HAProxy 只为每个后端执行一组平衡,并且如上所述,listen
部分是以下功能的隐式组合一组匹配的 frontend
和 backend
.