Nginx Ingress 支持一致性哈希算法,能够能够有效解决动态增删后端服务器带来的负载均衡震荡问题。本文为您介绍如何配置 Nginx Ingress 的一致性哈希算法。
Nginx Ingress 默认支持的源 IP Hash 方法使用的是线性的 Hash 空间,系统会根据源 IP 的 Hash 运算值来选取后端的目标服务器。保证相同的源 IP 总是被分配到相同的后端服务器上。
但这种方法存在一个问题,当添加或删除后端服务器时,所有源 IP 都需要重新进行 Hash 运算,以适配和重新路由到数量变化后的后端服务器。这会带来大面积的会话丢失或缓存失效。
为解决上述问题,Nginx Ingress 引入了一致性哈希算法来解决该问题。一致性哈希算法通过构建环状的 Hash 空间来替代普通的线性 Hash 空间,在增加或删除后端服务器时,仅需要重新路由一小部分数据(新增或删除服务器前面的数据),能够有效解决动态增删后端服务器带来的负载均衡震荡问题。
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 参数、文本值或任意组合,例如:
| 无 |
说明
更多说明,请参考 官方文档。