willning 发表于 2022-8-22 17:37:13

集群部署:二、更轻量,故障转移集群架构与搭建方案

本帖最后由 willning 于 2022-8-26 15:09 编辑

活字格内置有完整的智能集群解决方案,功能强大,但配置稍显复杂。如果你只希望解决故障转移问题,提升可用性,可以接受手动同步应用和配置,也可以参考本教程,构建最轻量的故障转移集群。学完本教程,你掌握的能力为“基于nginx配置服务器集群”,在活字格核心开发技能清单中属于通用能力L4级别。
推荐学员:
[*]有较强IT背景的活字格用户

前序课程:
[*]帮助文档:本地运行与调试
[*]帮助文档:安装活字格服务端到Linux系统

适用场景&集群能力本方案主要用于提升可用性。在压力分散方面,本方案基于nginx提供的ip哈希策略分发请求,负载均衡能力较差,尤其是在公网使用的场景下,因为公司内网大量客户端共享同一个公网IP,导致并发压力无法被分散到各应用服务器。
[*]应用场景:提升系统可用性,避免因单台服务器宕机导致系统服务中断
[*]集群能力:较高可用性(包含应用服务器的故障转出和故障迁回)

重要提示:考虑到外网、特别是移动网络的复杂性,同一个终端设备在网络切换(包括但不限于切换基站、热点)时,公网IP有可能发生变化。在本方案中,这种IP变动有一定概率会导致登录信息失效。所以,本方案更推荐应用于部署在局域网中的软件系统。
搭建方案本方案需要用到Linux、nginx、GlusterFS、MySQL/MariaDB/MSSQL(您可以在PostgreSQL、Oracle等数据库上开发业务功能,但仍需要使用这几款数据库来存储用户信息,支持的具体版本可参考活字格的环境要求,本教程以mysql为例)。在监控服务方面,局域网项目可采用Zabbix,互联网项目则推荐采用云服务商提供的监控服务(本教程以阿里云的云监控为例)。对上述技术的了解程度,很大程度上决定了您搭建出的集群的安全性、性能和可用性。

角色一览

[*]应用服务器:运行活字格应用,推荐安装在Linux(示例版本:Ubuntu 18.04,下同)上的活字格服务器管理器(示例版本:V8.0.4.0)
[*]反向代理服务:实现负载均衡等分发策略,安装在Linux上的nginx(示例版本:1.14)
[*]文件服务:存放活字格应用、用户上传文件等集群所需的文件,需要在多个应用服务器间共享,推荐安装在Linux上的GlusterFS(示例版本:3.13,2个节点)
[*]用户信息数据库:存放用户、角色、权限等基础数据,推荐安装在Linux上的MySQL(示例版本:5.7)
[*]业务数据库:存放活字格应用所使用的业务数据,推荐安装在Linux上的MySQL(示例版本:5.7)
[*]监控服务:确保第一时间能够发现服务器的故障,推荐阿里云的云监控服务

网络拓扑简图
本方案需要用到最少2台应用服务器,至少1台支持服务器(推荐视情况,将支持服务器中不同角色部署到不同的服务器上,包含nginx、mysql、glusterfs,共3个)、1台备用文件服务器和1个云监控服务。

步骤1:部署应用服务器
操作方法同活字格智能集群,点击了解

步骤2:部署和配置GlusterFS
操作方法同活字格智能集群,点击了解

步骤3:部署MySQL
操作方法同活字格智能集群,点击了解

步骤4:部署nginx
首先,在支持服务器上,更新apt-get源
sudo apt-get update然后,从apt-get安装nginxsudo apt-get install nginx
安装完毕后,可以通过修改/etc/nginx/nginx.conf,配置反向代理规则。以下的例子中有两台应用服务器,内网地址分别是172.31.12.135和172.31.12.228,两个应用app_a和app_b,端口分别是8101和8102。反向代理对外提供的端口统一为8100。搭建活字格智能集群,涉及到/etc/nginx/nginx.conf的http节点下upstream 和location。具体配置方法和示例文件如下。

upstream节点定义了每个活字格应用对应的应用服务器和服务器级别的处理策略。你需要为UserService和每一个应用分别配置一个upstream。# app_a:每个APP的后台端口不同,需要设置单独的upstream,下同
    upstreamhq-a-server {
       # 按客户端分配,一台机器上发来的请求都会被分配到同一台服务器。因为活字格默认不是无状态的,需要用这种方法,避免会话中断
       ip_hash;
       server 172.31.12.135:8101 max_fails=30 fail_timeout=20s;
       server 172.31.12.228:8101 max_fails=30 fail_timeout=20s;
    }
每个upstream对应了server下面的一个location。location会在发送到server中定义端口的请求中,按照URL的Path部分(不包含协议、主机名和端口,如http://xxx.com:2002/app/xxx?yyy=zzz的Path是/app/xxx?yyy=zzz)过滤出符合要求的请求,分发到upstream中。在活字格智能集群中,可以利用Path的第一段(UserService或应用名)作为查询条件。# 为每个应用做映射,下同
      location ^~ /app_a/ {

            #故障转移的条件:如果后端的服务器执行超时或发生错误(5xx不能视作不可用,需要转发给浏览器处理),自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。下同。
            proxy_next_upstream error timeout invalid_header ;
            proxy_send_timeout 5s;   # 代理发送超时时间,下同
            proxy_read_timeout 5s;    # 代理接收超时时间,下同

            proxy_pass http://hq-a-server/app_a/;
            proxy_redirect default;
      }
此外,在server节点上,你需要配置监听的端口,和HTTP HEADER的处理策略。
listen       8100;#应用服务和基础服务的页面和WebAPI,对外公开的端口统一成8100。统一端口可以避免浏览器的地址变化,也可以避免出现跨域请求
      server_namehq.commany.con;

      # 转发HTTP的HEADER,这是反向代理中的常见做法,主要是避免因修改过HEADER,带来的兼容性问题
      proxy_set_header   Upgrade $http_upgrade;
      proxy_set_header   Connection keep-alive;
      proxy_set_header   Host $host;
      proxy_cache_bypass $http_upgrade;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   X-Real-IP $remote_addr;
配置文件修改后,让nginx重新加载即可。
sudo nginx -s reload如果nginx基于云主机构建,需要开通以下入站/上行端口:
[*]8100:配置的服务端口号

步骤5:配置活字格的用户信息数据库和文件夹
完成上述环境准备后,我们需要依次登录应用服务的管理控制台站点(http://{应用服务器IP地址}:22345/UserService/ManagementPage/LoginPage),配置用户信息数据库和用户上传文件夹。

5.1 用户上传文件
分别在各应用服务器上,为mount了GlusterFS的本地路径(示例为/share)创建子文件夹upload。
分别登录各应用服务器的管理控制台,找到【设置】→【存储路径】→【终端用户上传文件的根目录】,设置为刚创建的文件夹,示例中为/share/upload


5.2 用户信息数据库
分别登录各应用服务器的管理控制台,找到【设置】→【存储路径】→【用户信息数据库配置】,将数据库类型选择为MySQL,数据库连接字符串指向即步骤3中搭建的MySQL上userservicedb数据库。


按照提示,重启服务即完成配置。需要注意的是,经过上述配置,活字格服务管理器依然运行在“有状态”的模式,会话缓存等数据存放在内存中。所以,在搭建集群时,该配置必须配合nginx的ip_hash策略才能正常工作。

步骤6:配置监控服务
操作方法同活字格智能集群,点击了解

使用方法1. 发布应用
与活字格智能集群不同,本方案中你需要手工将应用发布到各个应用服务器上。应用的升级耗时较长(主要取决的应用中包含的文件大小),如果恰好有用户访问,部署过程中的服务器因为返回码为4xx,而被nginx服务器识别为不可用,请求被自动分发到可用的应用服务器上,最终实现“升级部署不停服务”的目标。

2. 管理用户信息
多台应用服务器公用同一个用户信息数据库,你可以在任何一台应用服务器的管理控制台上,对用户、组、组织结构、第三方授权等数据进行查询和操作。这些操作均会影响到所有应用服务器。

3. 配置
与活字格智能集群不同,本方案中你需要分别登录各个应用服务器的管理控制台,手工调整各项配置,包括但不限于安全提供程序等。

常见问题同活字格智能集群,点击了解。



页: [1]
查看完整版本: 集群部署:二、更轻量,故障转移集群架构与搭建方案