[]
负载均衡(Load Balance)是一种将工作任务分摊到多个操作单元上进行执行的技术,是集群技术(Cluster)的一种应用。通过将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,可以提高并发处理能力,从而提高应用处理性能。
负载均衡技术的基本原理是通过运行在前端的负载均衡服务器,根据执行的负载均衡算法,将流量分配到后端服务器上,从而提高整个系统的扩展能力,实现服务的并行扩展,同时,负载均衡技术还可以起到对外网屏蔽内网服务器,从而提高系统的可用性。
在K8S系统下,活字格的负载均衡架构如下图所示。
不同活字格服务器(Pod的不同副本如Replicas1和Replicas2)共享文件存储,数据库和Redis。
活字格服务器通过统一的路由对外暴露端口(Forguncy Router,默认端口号80),路由将所有请求到端口80的流量路由到不同的App以及UserService。
活字格负载均衡基于会话保持功能,需要开启K8S中Ingress和Service的会话保持配置。
路由
活字格路由服务屏蔽了内部不同APP的端口差异,对外统一提供一个(或多个,默认一个80)端口,通过自动注册发现功能维护内部APP列表。
共享路径
活字格负载均衡服务基于共享文件的方式实现,不同服务器访问的是同一份文件数据,文件目录及说明如下。
使用共享存储的路径,必须使用共享文件服务器做持久化存储,防止POD漂移或重启时数据丢失。
共享存储以外的路径,请不要用来保存数据(如需要保存数据,请将路径挂载到共享文件服务器)。
容器内部路径 | 存储数据说明 | 路径可修改 | 共享或本机 | 说明 |
---|---|---|---|---|
/opt/ForguncyAttach | 所有用户上传的附件保存路径 | NO | 共享存储 | 存储必须持久化 |
/opt/ForguncyLogs | 系统日志保存路径 | NO | 共享存储 | 存储必须持久化 |
/opt/ForguncyRestore | 系统备份数据保存路径 | NO | 共享存储 | 存储必须持久化 |
/opt/ForguncySites | APP应用数据保存路径 | NO | 共享存储 | 存储必须持久化 |
/opt/ForguncySitesBin | APP程序运行路径 | NO | 共享存储 | 存储必须持久化 |
/opt/ForguncyServer | 程序运行文件路径,存在于镜像内 | NO | 本机 | 镜像内路径,请勿用于保存数据 |
/opt/ForguncyServerLBCache | 插件缓存路径 | NO | 本机 | 重启数据会丢失,请勿用于保存数据 |
其他 | 容器内部路径 | - | 本机 | 重启数据会丢失,请勿用于保存数据 |
Redis
活字格负载均衡使用Redis用来处理数据同步,消息交互,分布式锁,SignalR,共享Session等,请使用最新Linux版Redis,不支持老版Redis以及Windows版Redis。
数据库
因为内建Sqlite数据库无法被不同的服务器同时进行读写,所有活字格负载均衡下的数据库,必须使用外连库,不支持内建Sqlite数据库。
会话保持
活字格的一些服务需要会话保持功能,请开启K8S服务中Ingress和Service的会话保持选项(Service已在安装脚本中默认配置,Ingress需要手动添加)。如Ingress增加基于Cookie的注解:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"