本主题提供关于如何配置 Parasoft Virtualize 服务器集群的建议,以实现以下好处:

  • Horizontal scaling (horsepower): 通常用于优化性能测试和基于云的基础设施,以实现持续集成/持续交付。
  • Fault tolerance: 通常用于增加业务关键后端系统的正常运行时间和/或促进灾难恢复。

本主题的章节包括:

前提条件

  • 多个 Virtualize 服务器,所有服务器都具有完全相同的版本(如果适用,包括相同的服务包),并且都授权 Virtualize 命令行(virtualizecli)。可部署容器的Virtualize 服务器不支持集群。
  • 共享文件系统
  • 承载多个 Virtualize 实例的多个服务器

负载均衡器硬件和软件配置

在所有情况下,都需要配置您的负载均衡器,以到达每个 Virtualize 服务器。

如果您正在使用 Parasoft CTP(或通过 Virtualize REST API 提供/复制/修改/…资产的任何其他工具),您还需要执行以下部分中概述的附加配置。

注意,以下指令适用于任何负载平衡器。本文提供了 F5 LTM (Local Traffic Manager) 示例,让您了解如何在特定的负载平衡器上执行这些通用指南。

配置源地址关联持续性

本节解释如何为 Parasoft CTP 配置源关联持续性。同样的原则也可以应用于配置其他任何通过 Virtualize REST API 提供/复制/修改/…资产的工具。

源地址关联持续性将确保来自 Parasoft CTP 的所有调用都指向同一个节点。这种会话关联也称为“粘性会话”。

您需要为以下端口启用源地址关联持续性(会话粘性):

  • 9080 - Virtualize 默认的 HTTP 连接器(必需)
  • 9443 - Virtualize 默认的 SSL 连接器(必需)
  • 2424 - 数据资源库(如果数据资源库存在于该节点上,则必需)
  • 9617 – 内置的事件监视器提供程序服务(Active MQ)
  • 9618 – 内置的服务器点击统计提供程序服务
  • 9619 – 内置的 JDBC 提供程序服务

使用 F5 Local Traffic Manager (LTM),通过启用 
“跨服务匹配”和“跨虚拟服务器匹配”来配置源地址关联持续性。例如,如果希望使用 F5s LTM 实现源地址关联持续性,则可以使用默认的 source_addr 概要文件或创建自定义概要文件。下表显示了默认 source_addr 配置文件的设置和值。

设置说明 默认值
Name为概要文件定义唯一名称。必需。没有默认值
Persistence Type定义持续性概要文件的类型。必需。源地址关联
Match Across Services指示从客户端 IP 地址到同一虚拟 IP 地址的所有持续连接也应指向同一节点。已启用
Match Across Virtual Servers指示来自同一客户端 IP 地址的所有持续连接都应指向同一节点已启用
Match Across Pools指示 LTM 系统可以使用包含此持续性条目的任何池。已禁用
Timeout指示持续性条目超时的秒数。180
Mask定义 LTM 系统在与现有持续性条目匹配之前应该使用的掩码。0.0.0.0
Map Proxies启用或禁用代理映射。已启用

使用基于优先级的会员激活

基于优先级的会员激活可确保所有调用将首先到达主机(如果可能)。要配置此功能, 请将第一台机器的优先级设置为最高。例如,下面是一个示例池配置文件,来自本地通讯报文管理器的 F5 文档:

pool my_pool {
         lb_mode fastest
         min active members 2
member 10.12.10.7:80 priority 3
member 10.12.10.8:80 priority 3
member 10.12.10.9:80 priority 3
member 10.12.10.4:80 priority 2
member 10.12.10.5:80 priority 2
member 10.12.10.6:80 priority 2
member 10.12.10.1:80 priority 1
member 10.12.10.2:80 priority 1
member 10.12.10.3:80 priority 1
}

Parasoft Virtualize 配置

在开始配置 Virtualize 以实现负载平衡之前,请确保配置了负载平衡器,以便只将“更改”传播到一个节点。

接下来,执行以下操作以确保更改随后通过共享文件系统(SAN 和/或 NAS)同步到其他节点:

  1. 在集群中共享 VirtualAssets 项目及其所有相关内容(.pmpdd, .pvadd, .pjcdd, VirtualAssets.xml, .git, etc.)。一个典型的设置是将 NFS 文件夹挂载为集群每个节点中的 VirtualAssets 项目。



  2. 启用使用本机挂钩或轮询的刷新:
    • 在用户界面中:导航到 Window> Preference> General> Workspace,选择 Refreshusing native hooks or polling,然后重启服务器。



    • 在命令行中(针对无数据头启动):添加 refresh.enabled=true 到 /.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs 文件,然后重启服务器。例如:

      eclipse.preferences.version=1 
      version=1
      refresh.enabled=true
  3. 将服务器置于“集群模式”:
    1. 在集群中的所有节点上,将以下 Java 选项添加到启动命令中。

      -J-Dparasoft.auto.deploy.new=false

    2. 重启服务器。

注意,Virtualize 集群中的部署最终将是一致的。当发送请求部署时,单个服务器处理请求,然后返回响应。文件系统将通知集群中的其他服务器,以进行一致性所需的更改。在某些情况下,这可能需要几秒钟。因此,可能会有一段时间,一些服务器还不知道在另一台服务器上发生了部署。

Parasoft 数据存储库配置

基于 MongoDB 的 Parasoft 数据存储库应该通过标识一个主数据存储库(其中包含您希望复制的数据),并创建一个副本集来配置集群。要做到这一点,请遵循以下步骤(从 MongoDB 文档中获取并修改):

  1. 停止所有您希望成为副本集一部分的数据存储库。
  2. 创建密钥文件,副本集的每个成员将使用它们来对服务器进行相互身份验证。
    若要生成用于密钥文件的伪随机数据,请发出以下 openssl 命令:

    openssl rand -base64 741 > mongodb-keyfile 
    chmod 600 mongodb-keyfile

    您可以使用您选择的任何方法生成密钥文件。始终确保密钥文件中存储的密码很长,并且包含大量的平均信息量。以这种方式使用 openssl 有助于生成这样一个密钥。

  3. 将 mongodb-keyfile 密钥文件复制到副本集的每个成员。将这些文件的权限设置为 600,以便只有文件的所有者才能读取或编写此文件,以防止系统上的其他用户访问共享机密。
  4. 从主数据存储库开始,使用 -keyFile 和 -replSet 命令行选项启动副本集的每个成员(分别指定密钥文件和副本集的名称)。若要添加这些选项,请编辑数据存储库的 server.sh 或 server.bat 脚本文件(在调用 mongodb 的行上)。  例如:

    mongod --keyFile /mysecretdirectory/mongodb-keyfile --replSet "rs0"
  5. 连接到主数据存储库,并作为管理用户进行身份验证,该管理员用户由 server.sh 或 server.bat 脚本中的 M_USER 变量创建:

    "rs.add("mongodb1.example.net:2424")
  6. (可选)如果希望增加副本集的编写安全性,请修改主数据存储库的编写关注点。使用默认设置,当一个成员确认写入时,客户端返回;您可以更改此设置,以便大多数人必须承认该编写操作。有关更多详情,请查阅 MongoDB 文档。
  7. 在主数据存储库上,使用 rs.initiate() 初始化副本集:

    rs.initiate()

    这将启动一个由当前成员组成的集合,该集合使用默认的副本集配置。

  8. 在主数据存储库上,使用 rs.conf() 验证初始 replica set 配置,以显示 replica set configuration 对象:

    rs.conf() 

    副本集配置对象应类似如下:

    {
        "_id" : "rs0",
        "version" : 1,
        "members" : [
           {
               "_id" : 1,
               "host" : "mongodb0.example.net:27017"
           }
         ]
    }
  9. 使用 rs.add() 方法将剩余的副本集成员添加到副本集。必须连接到主数据存储库,才能将成员添加到副本集。
    在某些情况下,rs.add() 可以触发一个筛选机制/条件。如果连接到的数据存储库成为辅助存储库,则需要将 mongo shell 连接到新的主存储库,以便继续添加新的副本集成员。使用 rs.status() 来标识副本集中的主节点。
    下面的例子添加了两个成员:

    rs.add("mongodb1.example.net")
    rs.add("mongodb2.example.net")

    完成后,您就拥有了一个功能齐全的副本集。新的副本集将选择一个主节点。

  10. 使用 rs.status() 操作检查副本集的状态:

    rs.status()

技巧提示

Provisioning

  • CTP 和 Virtualize 桌面可以修改实时资产。当节点通过负载平衡器进行通信时,CTP 和 Virtualize 将集群视为单个服务器。注意,发送到 CTP 的服务器名(在 Virtualize 服务器或 localsettings.properties 中配置)在所有节点上都必须相同。
  • 集群环境不支持录制。应该在资产提升之前,在分段基础设施上进行录制。。

资产提升

  • 使用源代码控制存储“生产级”资产和版本信息。将资产检出到共享文件系统中,以便进行初始节点配置。

消耗

  • 所有 AUT 通讯报文都被发送到负载均衡器,并使用 负载均衡器硬件和软件配置中提到的设置进行适当的过滤。
  • 为了确保更改只发送到一个服务器,应该配置 Virtualize 服务器的负载平衡器,使用 负载均衡器硬件和软件配置中定义的技术将配置消息或“更改”消息发送到集群中的单个节点。应该为处理 Virtualize 桌面或 CTP 发送的“更改”的端口(默认为 9080/9443)和/或路径(/axis2 SOAP 或 /soavirt/api/ REST)执行此操作。
  • 为了确保有状态资产的一致行为, Virutalize 服务器负载平衡器必须将单个会话的所有通讯报文定向到单个节点。注意:
    • 有状态资产的通讯报文应该只发送到一个节点。换句话说,它不应该在“first available”中运行,以确保多个资产不会多次更改状态。
    • 如果有状态的资产打算跨会话保存状态,那么节点将需要将状态存储在同步数据源中(比如,数据存储库)。
  • No labels