本主题提供关于如何配置 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)同步到其他节点:
- 在集群中共享 VirtualAssets 项目及其所有相关内容(.pmpdd, .pvadd, .pjcdd, VirtualAssets.xml, .git, etc.)。一个典型的设置是将 NFS 文件夹挂载为集群每个节点中的 VirtualAssets 项目。
- 启用使用本机挂钩或轮询的刷新:
- 在用户界面中:导航到 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
- 在用户界面中:导航到 Window> Preference> General> Workspace,选择 Refreshusing native hooks or polling,然后重启服务器。
- 将服务器置于“集群模式”:
- 在集群中的所有节点上,将以下 Java 选项添加到启动命令中。
-J-Dparasoft.auto.deploy.new=false
- 重启服务器。
- 在集群中的所有节点上,将以下 Java 选项添加到启动命令中。
注意,Virtualize 集群中的部署最终将是一致的。当发送请求部署时,单个服务器处理请求,然后返回响应。文件系统将通知集群中的其他服务器,以进行一致性所需的更改。在某些情况下,这可能需要几秒钟。因此,可能会有一段时间,一些服务器还不知道在另一台服务器上发生了部署。
Parasoft 数据存储库配置
基于 MongoDB 的 Parasoft 数据存储库应该通过标识一个主数据存储库(其中包含您希望复制的数据),并创建一个副本集来配置集群。要做到这一点,请遵循以下步骤(从 MongoDB 文档中获取并修改):
- 停止所有您希望成为副本集一部分的数据存储库。
创建密钥文件,副本集的每个成员将使用它们来对服务器进行相互身份验证。
若要生成用于密钥文件的伪随机数据,请发出以下 openssl 命令:openssl rand -base64 741 > mongodb-keyfile chmod 600 mongodb-keyfile
您可以使用您选择的任何方法生成密钥文件。始终确保密钥文件中存储的密码很长,并且包含大量的平均信息量。以这种方式使用 openssl 有助于生成这样一个密钥。
- 将 mongodb-keyfile 密钥文件复制到副本集的每个成员。将这些文件的权限设置为 600,以便只有文件的所有者才能读取或编写此文件,以防止系统上的其他用户访问共享机密。
从主数据存储库开始,使用 -keyFile 和 -replSet 命令行选项启动副本集的每个成员(分别指定密钥文件和副本集的名称)。若要添加这些选项,请编辑数据存储库的 server.sh 或 server.bat 脚本文件(在调用 mongodb 的行上)。 例如:
mongod --keyFile /mysecretdirectory/mongodb-keyfile --replSet "rs0"
连接到主数据存储库,并作为管理用户进行身份验证,该管理员用户由 server.sh 或 server.bat 脚本中的 M_USER 变量创建:
"rs.add("mongodb1.example.net:2424")
- (可选)如果希望增加副本集的编写安全性,请修改主数据存储库的编写关注点。使用默认设置,当一个成员确认写入时,客户端返回;您可以更改此设置,以便大多数人必须承认该编写操作。有关更多详情,请查阅 MongoDB 文档。
在主数据存储库上,使用 rs.initiate() 初始化副本集:
rs.initiate()
这将启动一个由当前成员组成的集合,该集合使用默认的副本集配置。
在主数据存储库上,使用
rs.conf()
验证初始 replica set 配置,以显示 replica set configuration 对象:rs.conf()
副本集配置对象应类似如下:
{ "_id" : "rs0", "version" : 1, "members" : [ { "_id" : 1, "host" : "mongodb0.example.net:27017" } ] }
使用 rs.add() 方法将剩余的副本集成员添加到副本集。必须连接到主数据存储库,才能将成员添加到副本集。
在某些情况下,rs.add() 可以触发一个筛选机制/条件。如果连接到的数据存储库成为辅助存储库,则需要将 mongo shell 连接到新的主存储库,以便继续添加新的副本集成员。使用 rs.status() 来标识副本集中的主节点。
下面的例子添加了两个成员:rs.add("mongodb1.example.net") rs.add("mongodb2.example.net")
完成后,您就拥有了一个功能齐全的副本集。新的副本集将选择一个主节点。
使用 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”中运行,以确保多个资产不会多次更改状态。
- 如果有状态的资产打算跨会话保存状态,那么节点将需要将状态存储在同步数据源中(比如,数据存储库)。