确保上游高可用性
当 API7 网关将 API 请求发送到上游(Upstream)时,如果这些上游系统发生故障,就会出现可用性和可靠性问题。本指南介绍了实现上游依赖高可用性的几种策略。
前提条件
添加多个上游节点
使用多个上游节点可以防止单节点故障。在某个网关组中对上游节点所做的修改不会影响已发布到其他网关组的同一服务版本。
- 控制台(Dashboard)
- Ingress Controller
- 从侧边导航栏选择你的网关组下的 已发布服务(Published Services),然后点击你要修改的服务,例如版本为
1.0.0的httpbin。 - 在该已发布服务下,从侧边导航栏选择 上游(Upstreams)。
- 点击 节点(Nodes) > 添加节点(Add Node)。
- 在对话框中,执行以下操作:
- 在 主机(Host) 和 端口(Port) 字段中,输入另一个 API 端点。
- 在 权重(Weight) 字段中,输入与第一个节点相同的
100。 - 点击 添加(Add)。
创建一个指向多个上游服务的路由的 Kubernetes 资源清单文件:
- Gateway API
- APISIX CRD
multiple-upstream-nodes.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: api7
name: multiple-upstream-nodes
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: upstream1
port: 80
- name: upstream2
port: 80
multiple-upstream-nodes.yaml
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
namespace: api7
name: httpbin
spec:
ingressClassName: apisix
http:
- name: httpbin
match:
paths:
- /*
backends:
- serviceName: upstream1
servicePort: 80
- serviceName: upstream2
servicePort: 80
将配置应用到你的集群:
kubectl apply -f multiple-upstream-nodes.yaml
修改负载均衡类型
负载均衡负责将网络请求分配到多个节点上。对于处理高流量的系统来说,这至关重要,它可以提高性能、可扩展性和可靠性。
API7 网关支持多种负载均衡算法:
- 带权重的轮询(Weighted Round Robin,WRR)
- 一致性哈希(Consistent Hash)
- 指数加权移动平均(Exponentially Weighted Moving Average,EWMA)
- 最小连接数(Least Connection)
默认情况下,API7 网关使用 WRR 算法。该算法根据节点的权重以循环的方式将传入请求分配给一组节点。
- 控制台(Dashboard)
- Ingress Controller
- 从侧边导航栏选择你的网关组下的 已发布服务(Published Services),然后点击你要修改的服务,例如版本为
1.0.0的httpbin。 - 在该已发布服务下,从侧边导航栏选择 上游(Upstreams)。
- 在 上游配置(Upstream Configuration) 字段中,点击 编辑(Edit)。
- 在对话框中,将 负载均衡类型(Load Balancing Type) 修改为
最少连接数(Least Connection)。 - 点击 保存(Save)。
创建一个 Kubernetes 资源清单文件来配置负载均衡算法:
- Gateway API
- APISIX CRD
upstream-lb.yaml
apiVersion: apisix.apache.org/v1alpha1
kind: BackendTrafficPolicy
metadata:
namespace: api7
name: httpbin
spec:
targetRefs:
- name: httpbin
kind: Service
group: ""
loadbalancer:
type: least_conn
upstream-lb.yaml
apiVersion: apisix.apache.org/v2
kind: ApisixUpstream
metadata:
namespace: api7
name: httpbin
spec:
ingressClassName: apisix
loadbalancer:
type: least_conn
将配置应用到你的集群:
kubectl apply -f upstream-lb.yaml
启用健康检查
健康检查是一种机制,它根据上游节点的响应能力来判断节点是健康还是不健康的。配置了健康检查后,API7 企业版只会将请求转发给被认为是健康的上游节点,而不会将请求转发给被认为是不健康的节点。
健康检查一般分为两种方式:
- 主动健康检查:通过主动探测节点来判断上游节点的健康状况。
- 被动健康检查:根据节点对用户请求的响应情况来判断上游节点的健康状况,不会发起额外的探测。被动检查必须与主动检查结合使用,不能单独使用。
API7 企业版同时支持七层(L7,HTTPS 和 HTTP)和四层(L4,TCP)的健康检查。
默认情况下,上游的健康检查是在全局范围启用的:
config.yaml
apisix:
disable_upstream_healthcheck: false
按照以下步骤配置健康检查的详细信息。
信息
在继续之前,请确保你的 API 后端已经实现了用于健康检查的端点(Endpoint)。
- 控制台(Dashboard)
- Ingress Controller
- 从侧边导航栏选择你的网关组下的 已发布服务(Published Services),然后点击你要修改的服务,例如版本为
1.0.0的httpbin。 - 在该已发布服务下,从侧边导航栏选择 上游(Upstreams)。
- 在 健康检查(Health Check) 字段中,点击 启用(Enable)。
- 配置 主动健康检查(Active Health Check),并可选择配置 被动健康检查(Passive Health Check)。
在使用被动健康检查时,API7 企业版要求必须配置主动健康检查。当上游服务变得不健康时,主动健康检查会定期探测该上游服务是否已经恢复。
查看配置上游健康检查以了解更多关于配置和行为的信息。
查看配置上游健康检查中的 Ingress Controller 选项卡,以了解有关配置和行为的信息。