您可以设置 Parasoft Virtualize 服务器集群,以实现水平扩展和容错。水平扩展通常用于 优化性能测试和基于云的基础设施,以实现持续集成和持续交付。Fault tolerance 通常用于增加业务关键后端系统的正常运行时间和/或促进灾难恢复。
在本章节中
前提条件
- 两个或更多 Virtualize 服务器。服务器必须是完全相同的版本,包括相同的服务包(如果适用),并且所有服务器都应获得 Virtualize 命令行(virtualizecli)的许可。
- 两个或多个服务器以承载两个或多个 Virtualize 实例
- 支持源地址关联持久性的负载平衡器
- 访问源码系统
负载平衡器配置
配置负载平衡器以将负载路由到每个虚拟化服务器。如果您正在使用 Parasoft CTP 或通过与 Virtualize REST API 资产交互的任何其他工具),您需要执行以下部分中概述的附加配置。
以下说明适用于任何负载平衡器,但我们使用 F5 本地通讯报文管理器(LTM)作为示例,以提供关于负载平衡器配置的一般指导。
配置源地址关联持久性
本节描述如何为 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),通过启用 Match Across Services 和 Match Across Virtual Servers 选项配置源地址关联持久性。例如,可以使用默认的源地址配置文件或创建自定义配置文件来启用源地址关联持久性。下表显示了默认 source_addr 配置文件的设置和值。
设置 | 说明 | 默认值 |
---|---|---|
名称 | 为概要文件定义唯一名称。必需。 | 没有默认值 |
持久性类型 | 定义持久性概要文件的类型。必需。 | 源地址关联 |
跨服务匹配 | 指示从客户端 IP 地址到同一虚拟 IP 地址的所有持久连接也应到同一节点。 | 已启用 |
匹配跨虚拟服务器 | 指示来自同一客户端 IP 地址的所有持久连接都应指向同一节点 | 已启用 |
跨池匹配 | 指示 LTM 系统可以使用包含此持久性条目的任何池。 | 已禁用 |
超时时间 | 指示持久性条目超时的秒数。 | 180 |
掩码 | 定义 LTM 系统在与现有持久性条目匹配之前应该使用的掩码。 | 0.0.0.0 |
映射代理 | 启用或禁用代理映射。 | 已启用 |
使用基于优先级的成员激活
基于优先级的成员激活确保来自任何源的所有调用都将首先到达主机(如果可能的话)。要配置此功能,请将第一台机器设置为最高优先级。例如,下面是一个示例池配置文件,来自本地流量管理器的 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 }
Virtualize 配置
确保已配置负载平衡器,以便在为负载平衡配置 Virtualize 之前,更改仅传播到一个节点。
- 在集群中共享 VirtualAssets 项目及其所有相关内容(.pmpdd, .pvadd, .pjcdd, VirtualAssets.xml, .git, etc.)。我们建议使用
git fetch
命令作为提交后触发器来同步共享。 - 启用使用本机挂钩或轮询的刷新:
- 在用户界面中:
- 在 Virtualize 主菜单中选择 Window> Preference> General> Workspace 。
- 启用 Refresh using native hooks or polling 选项,重启服务器。
- 在命令行中:
- 打开 <INSTALL>/.metadata/.plugins/org.eclipse.core.runtime/.settings/ 目录中的 org.eclipse.core.resources.prefs 文件。
添加
refresh.enabled=true
属性,比如:eclipse.preferences.version=1 version=1 refresh.enabled=true
重启服务。
- 在用户界面中:
- 在集群中的所有节点上,将以下 Java 选项添加到启动命令中,以放置服务器。
-J-Dparasoft.auto.deploy.new=false
- 重启服务器。
Virtualize 集群中的部署最终将同步。当发送请求部署时,单个服务器处理请求,然后返回响应。文件系统将通知集群中的其他服务器,以进行一致性所需的更改。在某些情况下,这可能需要几秒钟。因此,可能会有一段时间,一些服务器还不知道在另一台服务器上发生了部署。
Parasoft 数据存储库配置
基于 MongoDB 的 Parasoft 数据存储库应该通过标识一个主数据存储库(其中包含您希望复制的数据),并创建一个复制集来配置集群。要做到这一点,请遵循以下步骤(从 MongoDB 文档中获取并修改):
- 停止所有您希望成为复制集一部分的数据存储库。
启动主存储库服务器:
./bin/mongod --port 2424 --dbpath repositories
如果 "repositories” 目录不存在,则应该创建一个。
连接到 mongo shell,并创建管理员数据库。
./bin/mongo --port 2424 use admin
运行以下命令,创建管理员用户:
db.createUser({user:"<username>",pwd:"<password>",roles:[{role:"root",db:"admin"}]});
如果因为用户已存在而导致命令行失败,请运行以下命令行:
db.grantRolesToUser('admin',[{role:"<role>"}])
- 停止主 mongo 服务器。
创建密匙文件。以下示例显示了基本命令:
openssl rand -base64 741 > mongodb-keyfile chmod 600 mongodb-keyfile
将密钥文件复制到复制集的每个成员。
使用以下命令启动复制集的每个成员:
./bin/mongod --replSet "rs0" --dbpath repositories --port 2424 --auth --keyFile <mongodb-keyfile>
在主服务器上,连接到 mongo shell,并在提示时提供密码。
./bin/mongo localhost:2424/admin -u <admin_user> -p
运行以下命令,验证凭据:
use admin db.auth("<siteRootAdmin>", "<password>");
这个 shell 应该返回
1
。使用以下命令初始化复制集:
rs.initiate()
使用以下命令验证复制集配置:
rs.conf()
如果主服务器的主机不正确,请使用以下命令更改主机:
cfg = rs.conf() cfg.members[0].host = "mongodb1.example.net:27017" rs.reconfig(cfg)
对于每个辅助服务器,在主服务器的 mongo shell 中运行以下命令:
rs.add("<secondary>:<port>")
其他信息
- CTP 和 Virtualize 桌面可以修改实时资产。当节点通过负载平衡器进行通信时,CTP 和 Virtualize 将集群视为单个服务器。发送到 CTP 的服务器名(在 Virtualize 服务器或 localsettings.properties 中配置)必须在所有节点上相同。
- 集群环境不支持录制。录制应该在资产提升之前的登台基础设施上执行。
- 所有 AUT 通讯报文都被发送到负载均衡器,并使用设置的粘性会话(请查阅 Configuring Source Address Affinity Persistence)。
- 确保报告仅发送到一台服务器。Virtualize 服务器的负载平衡器应配置为向群集中的单个节点发送配置/“更改”消息。应该为处理 Virtualize 桌面或 CTP 发送的“更改”的端口(默认为 9080/9443)和/或路径(/axis2 SOAP 或 /soavirt/api/ REST)执行此操作。
- 确保有状态资产的一致行为。Virutalize 服务器负载平衡器必须将单个会话的所有通讯报文定向到单个节点。
- 有状态资产的通讯报文应该只发送到一个节点。通讯报文不应该在“first available”中运行,模式以确保多个资产不会多次更改状态。
- 如果有状态的资产打算跨会话保存状态,那么节点需要将状态存储在同步数据源中,比如,数据存储库。但是,请注意,在数据存储库更新和随后的更新信息请求之间会有延迟。