[]
        
(Showing Draft Content)

第四十九章 负载均衡

负载均衡(Load Balance)是一种将工作任务分摊到多个操作单元上进行执行的技术,是集群技术(Cluster)的一种应用。通过将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,可以提高并发处理能力,从而提高应用处理性能。

负载均衡技术的基本原理是通过运行在前端的负载均衡服务器,根据执行的负载均衡算法,将流量分配到后端服务器上,从而提高整个系统的扩展能力,实现服务的并行扩展,同时,负载均衡技术还可以起到对外网屏蔽内网服务器,从而提高系统的可用性。

活字格负载均衡架构

在K8S系统下,活字格的负载均衡架构如下图所示。

不同活字格服务器(Pod的不同副本如Replicas1和Replicas2)共享文件存储,数据库和Redis。

活字格服务器通过统一的路由对外暴露端口(Forguncy Router,默认端口号80),路由将所有请求到端口80的流量路由到不同的App以及UserService。

活字格负载均衡基于会话保持功能,需要开启K8S中Ingress和Service的会话保持配置。

image

重要概念

  • 路由

    活字格路由服务屏蔽了内部不同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"