You need to enable JavaScript to run this app.
容器服务

容器服务

复制全文
Nginx Ingress
Nginx Ingress 使用一致性哈希均衡负载
复制全文
Nginx Ingress 使用一致性哈希均衡负载

Nginx Ingress 支持一致性哈希算法,能够能够有效解决动态增删后端服务器带来的负载均衡震荡问题。本文为您介绍如何配置 Nginx Ingress 的一致性哈希算法。

背景说明

Nginx Ingress 默认支持的源 IP Hash 方法使用的是线性的 Hash 空间,系统会根据源 IP 的 Hash 运算值来选取后端的目标服务器。保证相同的源 IP 总是被分配到相同的后端服务器上。
alt

但这种方法存在一个问题,当添加或删除后端服务器时,所有源 IP 都需要重新进行 Hash 运算,以适配和重新路由到数量变化后的后端服务器。这会带来大面积的会话丢失或缓存失效。

alt

为解决上述问题,Nginx Ingress 引入了一致性哈希算法来解决该问题。一致性哈希算法通过构建环状的 Hash 空间来替代普通的线性 Hash 空间,在增加或删除后端服务器时,仅需要重新路由一小部分数据(新增或删除服务器前面的数据),能够有效解决动态增删后端服务器带来的负载均衡震荡问题。

alt

前提条件

操作步骤

Nginx Ingress 支持通过 Annotation 配置一致性哈希算法实现负载均衡,示例和说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress # 路由规则的名称
  annotations:
    nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"
spec:
  ingressClassName: nginx # 指定 Ingress Controller
  rules:
  - host: example.com # 转发规则域名
    http:
      paths:
      - backend:
          service:
            name: service-demo # 请求被转发到的目标服务名称
            port:
              number: 80 # 请求被转发到的目标服务开放端口号
        path: / # 访问路径
        pathType: ImplementationSpecific

Annotation 说明如下表所示。

Key类型是否必须描述默认值

nginx.ingress.kubernetes.io/upstream-hash-by

String

一致性哈希规则。支持 nginx 参数、文本值或任意组合,例如:

  • $request_uri:表示按照请求 URI 进行 Hash。
  • $request_uri$host:表示按照请求 URI 和域名进行 Hash。
  • ${request_uri}-text-value:表示按照请求 URL 和文本值进行 Hash。

说明

更多说明,请参考 官方文档

最近更新时间:2023.12.26 19:38:55
这个页面对您有帮助吗?
有用
有用
无用
无用