金蝶Web集群方案

环境准备

新建3台中科方德服务器虚拟机

金蝶中间件安装完成,应用相关配置文件修改完成。

方案选择

参考连接:
本操作参考来源于: 金蝶Apusic应用服务器软件-V9.0-用户手册

39.3.1.5. Web 集群方案
前端,采用第三方软件负载均衡器;后端,部署多台 Apusic 应用服务器。

配置高可用

文件目录下

1
%DOMAIN_HOME%\config\apusic.conf

添加

1
2
3
4
5
<SERVICE CLASS="com.apusic.cluster.ClusterService">
<ATTRIBUTE NAME="ClusterName" VALUE="SzbCluster"/>
<ATTRIBUTE NAME="LoadWeight" VALUE="100"/>
<ATTRIBUTE NAME="ServerName" VALUE="SZB1"/>
</SERVICE>

其中属性 ClusterName 为集群的名称,多个节点如果想加入到同一个集群中,ClusterName 必须相同。
ServerName 为当前节点的名称,必须唯一,如果存在相同名称的节点,则后加入的节点会加不到集群中。
默认的 ServerName 为当前 Domain 的名称,AutoReConnect 属性,用于集群节点断开重连。

同时,需要设定 SessionService 的 Distributable 和 Replicable 属性为 True,示例如下:

1
2
3
4
5
6
7
8
<SERVICE CLASS="com.apusic.servlet.http.session.SessionService">
<ATTRIBUTE NAME="DefaultSessionTimeout" VALUE="3600"/>
<ATTRIBUTE NAME="MaxSessionsInCache" VALUE="1024"/>
<ATTRIBUTE NAME="SessionInvalidateCheckInterval" VALUE="60"/>
<ATTRIBUTE NAME="Distributable" VALUE="True"/>
<ATTRIBUTE NAME="Replicable" VALUE="True"/>
<ATTRIBUTE NAME="SessionStick" VALUE="True"/>
</SERVICE>

设置完成之后启动程序之后,即可看到集群是否加入。

注意:在 linux 下以上配置都正确的情况下,出现节点不能正确加入集群,请设置 etc/hosts 文件的地址为局域网内部地址。

系统无法正常加载集群还有一种可能,IP端口没有打开,目前的做法:关闭防火墙

由于 Apusic 默认 Session 复制策略为配对复制的,如果用户想使用 Session 多点复制,需要设定 ClusterService 的配置属性:

1
2
<ATTRIBUTE NAME="ReplicationPolicy" VALUE="all"/> 
<!-- ReplicationPolicy 默认为"pair",即配对复制。-->

配置httpd

中科方德服务器httpd所在路径

1
/etc/httpd/conf

在文件httpd.conf文件中添加以下内容(中科方德系统自带已经设置完成,不需要在进行设置)

1
2
3
4
5
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

处于开启状态。同时在文件末尾加入如下配置:

其中 80 端口是用户安装时配置的 http 协议监听端口,确认是否为 80 端口,可以查看 Listen 选项。
BalancerMember 为后置机节点,后面的值为后置机的地址和端口。Loadfactor 为负载权重。

1
2
3
4
5
6
7
8
9
<VirtualHost *:80>
ProxyRequests off
ProxyPass / balancer://test/
<Proxy balancer://test>
BalancerMember http://172.16.44.140:6888 loadfactor=1
BalancerMember http://172.16.44.141:6888 loadfactor=1
BalancerMember http://172.16.44.142:6888 loadfactor=1
</Proxy>
</VirtualHost>

当用户想 使用会话粘滞(Session-Stick),可以在 ProxyPass/balancer://test/后面加入 stickysession=JSESSIONID,同时在每个 BalancerMember 最后面加入 route=RouteName; 若用户想使用失效转移时还要在后面加入 nofailover=off,。最终的配置形式如下:

1
2
3
4
5
6
7
8
9
<VirtualHost *:80>
ProxyRequests off
ProxyPass / balancer://test/ stickysession=JSESSIONID nofailover=off
<Proxy balancer://test>
BalancerMember http://172.16.44.140:6888 loadfactor=1 route=SZBR0
BalancerMember http://172.16.44.141:6888 loadfactor=1 route=SZBR1
BalancerMember http://172.16.44.142:6888 loadfactor=1 route=SZBR2
</Proxy>
</VirtualHost>

配置 Session 粘滞

当想使用 Session Stick 时,不仅需要在 apusic.conf 文件中的 SessionService 中配置如下属性 :

1
<ATTRIBUTE NAME="SessionStick" VALUE="true"/>

还需要在 Apusic 应用服务器的 vm.options(位置在%DOMAIN_HOME%/config 目录下)文件中设置属性:

1
2
3
….
com.apusic.jvm.route=%RouteName%
….

其中,这里的%RouteName%为在第 1 步<Proxy balancer://test>中配置的与此 Apusic 应用服务器节点相对应的 BalancerMember 后面的 route 属性。

route=SZBR0、SZBR1、SZBR2

问题修改

1、输入httpd服务器IP地址之后,IP地址重定向到了应用服务器

解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost *:80>
#ServerName www.szb.com
ServerAlias szb
ProxyPreserveHost On
ProxyRequests off
ProxyPass / balancer://test/ stickysession=JSESSIONID nofailover=off
<Proxy balancer://test>
BalancerMember http://172.16.44.140:6888 loadfactor=1 route=SZBR0
BalancerMember http://172.16.44.141:6888 loadfactor=1 route=SZBR1
BalancerMember http://172.16.44.142:6888 loadfactor=1 route=SZBR2
</Proxy>
</VirtualHost>

金蝶Web集群方案
http://yuanql.top/2023/04/07/00_项目经历/信创项目/金蝶中间件/金蝶Web集群方案/
作者
Qingli Yuan
发布于
2023年4月7日
许可协议