k8s-负载均衡的会话亲和性探究

发布时间 2023-09-20 19:36:35作者: 万雨

1,背景概述

​ 我们平时在做一些高频查询时都会用到缓存用于加快查询速度,当前主要有服务自身本地缓存、集中式网络缓存等。

缓存 服务自身的本地缓存 网络缓存 数据库
响应速度 极快(无需网络交互) 快(需要网络交互) 较慢(需要网络交互)
数据一致性 不同节点更新不一致 最优
数据重复性 不同节点都会有重复数据 统一的数据(主从除外) 统一的数据(主从除外)

​ 我们使用缓存的核心目的就是解决高频查询的速度问题,所以我们如果在多节点服务背景下使用本地缓存,同时又将本地缓存的缺点解决就十分完美了!

2,解决思路

​ 外部的同一个会话访问,只会同步负载到相同的一个节点上,只需要这个节点存储这个会话的本地缓存数据,并且进行数据同步即可。

image-20230908151858063

​ 在负载均衡中是属于哈希一致性负载。

3,方案

3.1,nginx-ingress

nginx.ingress.kubernetes.io/affinity: cookie 
# 实现会话亲和的方式,目前只支持cookie
nginx.ingress.kubernetes.io/affinity-mode: persistent  
# 默认是balanced平衡的,伸缩应用时会重新分配一些session, 以确保每个pod处理的会话数均衡;persistent持续的, 保持最大限度的会话亲和
nginx.ingress.kubernetes.io/session-cookie-hash: sha1  # 
nginx.ingress.kubernetes.io/session-cookie-name: awesome-java  
# 自定义cookie名字, 默认为INGRESSCOOKIE

参考链接:

  1. k8s: 配置ingress的会话亲和 - varyuan - 博客园 (cnblogs.com)
  2. 官方文档