集群

Version 23.4.8843


集群


集群可以让多个知行之桥 EDI 平台协同工作,用相同的配置处理相同的数据。工作负载被水平分布在知行之桥集群中,以提高可扩展性和可用性。

概述

为了支持知行之桥中的高可用性和故障转移功能,应将应用程序安装在同一服务器集群的不同系统上。负载均衡器会在承载 EDI 实例的多个系统之间分配传入的流量。

Cluster behind a load balancer

当配置集群时,服务器集群中的每个 EDI 系统都使用相同的应用程序配置,处理磁盘上相同配置的数据,并将事务记录在相同的数据库表中。

因此,应用程序的多个实例表现得就像是一个实例,并且任何一个实例的关闭不会破坏集群的性能。

配置知行之桥进行集群

在集群内的每个节点都安装知行之桥后,每个安装都应该配置使用相同的应用程序数据库应用程序数据目录

应用程序数据库

知行之桥使用数据库来记录交易历史和发生在应用程序中的所有错误。知行之桥的每个实例都应该配置使用同一个应用程序数据库来确保所有处理的文件最终可以合并到数据库中。

Windows 版本

在 Windows 版本中配置应用程序数据库,AppDb 环境变量的配置必须包括正确的 connection string 和 provider。为此,修改安装目录 “www” 文件夹中的 Web.Config 文件,在此文件中有个被注释掉的 XML 元素 connectionStrings 例如:

<!-- connectionStrings>
  <add 
    name="AppDb" 
    connectionString="server=SQLSERVER_LOCATION;database=DATABASE_NAME;uid=USER_ID;password=PASSWORD;" 
    providerName="System.Data.SqlClient"
  />
</connectionStrings -->

取消 connectionStrings 的注释,将 “connectionString” 和 “providerName” 属性设置为所需数据库的连接参数。如果知行之桥可以成功地使用这个连接字符串建立连接,那么将使用这个数据库作为应用程序数据库。

内置 Java 服务器

将 Java 版本与内置 Jetty 服务器一起使用时,将在安装目录下“webapp”文件夹中的 arc.xml 文件中配置应用程序数据库。在此服务器配置文件中,必须将 APP_DB 环境变量配置的 JDBC 连接字符串,并包含所需数据库的连接参数。例如:

<Call name="setInitParameter">
  <Arg>APP_DB</Arg>
  <Arg>jdbc:mysql:Server=MySQLServer;Port=3306;Database=mysql;User=user;Password=password</Arg>
</Call>

如果知行之桥可以成功与 APP_DB 连接字符串建立连接,那么将使用这个数据库作为应用程序数据库。

外部 Java 服务器

将 Java 版本与外部 Java servlet(应用程序内置 Jetty 服务器以外的任何服务器)一起使用时,配置应用程序数据库的细节取决于使用的特定 servlet。使用适用于特定 servlet 的语法,在配置服务器时,应使用以下其中一项方法:

  • 定义一个包括目标数据库连接属性的 JNDI 数据源。
  • 为 JDBC 连接字符串设置 APP_DB 环境变量。

如果知行之桥可以使用一个 JDNI 数据源或 APP_DB 连接字符串来连接数据库,那么将使用该数据库作为应用程序数据库。

应用程序数据目录

知行之桥将所有的配置数据和应用程序数据储存在磁盘上一个叫数据目录的文件夹。当使用集群时,知行之桥的每个实例都应该配置为同一个数据目录。这确保了所有实例处理相同的文件并使用相同的配置。

Windows 版本

在 Windows 版本中配置应用程序数据目录,必须将 AppDirection 环境变量设置为创建目录的路径。为此,请修改安装目录下 “www” 文件夹下的 Web.Config 文件。在此文件中,有一个被注释掉的 XML 元素 AppDirectory,可以在其中指定自定义数据目录位置:

<!-- appSettings>
  <add key="AppDirectory" value="C:\\directory\\subdirectory\\subdirectory\\" />
</appSettings -->

取消 appSettings 的注释,将 AppDirectory 键值设置为磁盘上数据目录的路径。如果知行之桥可以成功地找到该路径,并且具有读写权限,它将在指定目录下创建数据文件夹。

内置 Java 服务器

将 Java 版本与内置 Jetty 服务器一起使用时,将在安装目录下“webapp”文件夹中的 arc.xml 文件中配置应用程序数据库。在此服务器配置文件中,必须将 AppDirctory 环境变量设置为所需目录的路径。以下示例演示将数据目录设置为已安装驱动器上的共享文件夹时的情况:

<Call name="setInitParameter">
  <Arg>AppDirectory</Arg>
  <Arg>/mnt/shared/arc</Arg>
</Call>

如果知行之桥可以成功地找到该路径,并且具有读写权限,它将在指定目录内创建数据文件夹。

外部 Java 服务器

当使用外部 Java servlet (除了任何包含在应用程序中的 Jetty 服务器),配置应用程序数据库的细节取决于使用的特定的 servlet。使用适用于特定 servlet 的语法,AppDirectory 环境变量必须设置为所需的目录。

如果知行之桥成功地找到 AppDirectory 路径,并且具有读写权限,它将在指定目录内创建数据文件夹。

锁定与并发

知行之桥使用锁定功能来确保多个实例不会互相干扰并且不会处理同一个文件两次。在一个集群环境下,有效的锁定对于维持吞吐量和预防冲突至关重要。

数据库锁定

当应用程序数据库设置为 MySQL 或 SQL Server 时,知行之桥可以使用数据库来实现锁定。启用后,一张特定的数据表将用于保存记录,这些记录充当由应用程序计划处理的每个文件的互斥量。

以数据库为中心的锁定方法替代了默认的以文件为基础的锁定。数据库锁定拥有高性能并且可以避免任何潜在的和文件系统延迟有关的问题。因此,十分推荐在知行之桥集群部署时使用 MySQL 或 SQL Server 数据库,以使用数据库锁定功能。

启用数据库锁定

启用数据库锁定,应用程序数据库必须设置为 MySQL 或 SQL Server 数据库,除此之外,UserDatabaseLock profile 必须设置为 true

Profile 设置在应用程序数据目录下的 “profile.cfg” 中。该数据文件夹已经在应用程序数据目录节当中配置,或者在它默认的位置:

Windows: C:\Program Files\CData\CData Arc\data
Java: ~/arc/data

在 “profile.cfg” 文件里,在 [Application] 节下增加如下行:

UseDatabaseLock = true