ThingWorx HA 的平台设置
与所有 ThingWorx 部署一样,ThingWorx 群集部署需要使用 ThingworxPlatform 存储位置中的 platform-settings.json 文件。每台服务器都有其自己的 ThingworxPlatform 文件夹,且每台服务器的 platform-settings.json 文件都有细微差别。
有关 platform-settings.json 设置以及查看通用 platform-settings.json 文件示例的详细信息,请参阅 platform-settings.json 配置详细信息
对于群集系统,最相关的设置如下所述:
基本设置
基本设置
默认值
说明
EnableClusteredMode
false
用于确定 ThingWorx 将作为群集 (设置为 true) 还是独立服务器 (设置为 false) 运行。
扩展包导入策略设置
扩展包导入策略设置
默认值
说明
haCompatibilityImportLevel
WARN
在群集模式下运行 ThingWorx 时,您可以将扩展的导入限制为仅导入那些 haCompatibility 标志在扩展元数据中设置为 true 的扩展。默认设置为 WARN,此设置允许导入但会生成一条警告消息。可以将设置更改为 DENY;在这种情况下,导入将失败并会生成错误。
群集模式设置
在群集模式下运行 ThingWorx 时的特定设置。如果将上方的 EnableClusteredMode 设置为 false,则会忽略所有设置。
群集模式设置
默认值
说明
PlatformId
群集中每个节点的唯一标识符。此 ID 将在聚合日志中显示。它必须是字母数字且不能超过 32 个字符。应符合 "^[a-zA-Z0-9]{1,32}$" 模式。
CoordinatorHosts
用于协调 ThingWorx 领导选举的 Apache ZooKeeper 服务器的逗号分隔列表。字符串模式为 IP:端口。(例如,"127.0.0.1:2181, 127.0.0.2:2181")。
ZKNamespace
ThingWorx
* 
对于 ThingWorx 9.3.0 及更高版本,群集模式设置更改为 none
用于在 ZooKeeper 中跟踪群集信息的根节点路径。使用同一 ZooKeeper 运行多个群集时需要此项。ZooKeeper 命名限制适用;请参阅 http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#ch_zkDataModel
ModelSyncPollInterval
100
群集中服务器之间模型同步的频率 (以毫秒为单位)。每台服务器都将以此频率检查模型更改,并会应用找到的更改。
ModelSyncWaitPeriod
3000
当通过 Websocket 进行通信时,流量将在服务器之间进行循环传送。如果通过 Websocket 对模型进行更改,则下一个请求将等待指定时间 (以毫秒为单位),以使模型在其所在的服务器上同步。如果在超时之前未发生同步,则请求将失败,并显示超时错误。
ModelSyncTimeout
120000
每次重试所需等待的时间 (以毫秒为单位)。
ModelSyncMaxDBUnavailableErrors
10
允许在失去数据库连接后连续同步失败的次数,达到此次数后服务器会关闭。时间范围 (以毫秒为单位) 近似为 ModelSyncPollInterval * 此值。
ModelSyncMaxCacheUnavailableErrors
10
允许在失去缓存连接后连续同步失败的次数,达到此次数后服务器会关闭。时间范围 (以毫秒为单位) 近似为 ModelSyncPollInterval * 此值。
CoordinatorMaxRetries
3
如果与协调器通信失败,它将在失败前重试 n 次。
CoordinatorSessionTimeout
90000
ThingWorx 在没有收到用于协调 ThingWorx 领导的 Apache ZooKeeper 服务的“心跳”的情况下等待的时间 (以毫秒为单位)。
CoordinatorConnectionTimeout
10000
与协调器建立连接之前将等待的时间 (以毫秒为单位)。
MetricsCacheFrequency
60000
将按服务器跟踪指标并针对群集级指标聚合这些指标。此值是群集指标的更新频率 (以毫秒为单位)。
IgnoreInactiveInterfaces
true
可选。启用群集模式后,我们会尝试通过服务发现提供工具将 ThingWorx 服务器注册为服务。为此,我们将查看所有可用的适配器及其地址,并尝试查找站点本地地址。如果未找到,则会使用所找到的第一个不是站点本地地址的地址。此设置会影响此逻辑。当设置为 true 时,将忽略非启用状态的接口。
IgnoreVirtualInterfaces
true
可选。当设置为 true 时,将忽略虚拟接口。有关详细信息,请参阅上面有关 IgnoreInactiveInterfaces 的说明。
HostAddressFilter
可选。如果已指定,则根据正则表达式筛选地址;否则,将不会应用任何筛选器。例如,指定 “10\\\\..” 将筛选以 10 开头的地址,或者,指定 “^.:.*$” 可筛选包含 : 的地址。有关详细信息,请参阅上面有关 IgnoreInactiveInterfaces 的说明。
缓存设置
本部分中提供了多个可用配置,但一般来说,除非要对环境进行调整,否则仅应更改以下内容:
设置
默认值
说明
basePath
/services
Ignite 将在用于为服务发现存储 Ignite 节点条目的 basePath 下创建一个 Ignite 文件夹。如果将 ZooKeeper 用于多个群集实例,请在 Ignite 客户端配置和 Ignite 服务器端将默认值更改为 /clusterXX/services。有关详细信息,请参阅配置中央 ZooKeeper 群集
* 
basePath 设置仅适用于 ThingWorx 9.3.0 及更高版本。
client-mode
true
确定嵌入式 Ignite 将作为客户端 (默认) 还是作为服务器运行。在服务器模式下,它参与存储数据,且会使用更多内存。
connection
对于 zookeeperaddress-resolver type,用于协调 ThingWorx 主导节点选择的 Apache ZooKeeper 服务器的逗号分隔列表。字符串模式为 IP:port (例如,127.0.0.1:2181, 127.0.0.2:2181)。
default-cache-mode
可将其设置为 REPLICATEDPARTITIONED。如果设置为 PARTITIONED,则数据将分布在群集中,并根据 backups 设置复制到其他服务器。如果设置为 REPLICATED,则所有缓存中的所有数据将存储在 Ignite 群集中的所有服务器上。
您的设置取决于系统的 HA 要求和正在运行的 Ignite 服务器的数量。
default-atomicity-mode
ATOMIC
缓存原子性模式用于确定缓存是保持完整的事务语义,还是具有更轻量化的原子行为。当不需要事务处理和显式锁定时,应使用 ATOMIC 模式。在 ATOMIC 模式下,缓存将在所有缓存节点保持完整数据一致性。
default-backups
只有将 cache-mode 设置为 PARTITIONED 时,此设置才适用。此设置用于定义将保留数据副本的服务器的数量。对于 HA 环境,必须将其设置为 1 或更多。
default-read-from-backup
false
在嵌入模式下 (client-mode 设置为 false) 运行时,将 default-read-from-backup 设置为 true,以使缓存仅本地读取,从而提高性能。在分布式模式下运行时,此设置不会带来任何好处,因为始终必须跨网络访问另一个节点。在这种情况下,应将其设置为 false
default-write-sync-mode
PRIMARY_SYNC
您可以将此设置更改为如下所示:
FULL_ASYNC
Ignite 不会等待参与节点的写入或提交响应;因此,远程节点可能会在缓存写入方法完成后或在 Transaction.commit() 方法完成后更新其状态。
FULL_SYNC
Ignite 应等待来自所有节点的写入或提交回复。
PRIMARY_SYNC
此设置仅适用于 CacheMode.PARTITIONEDCacheMode.REPLICATED 模式。
FULL_ASYNC
不建议。它确保系统失败时不可能丢失数据,但会降低写入性能。
provider-type
必须设置为 "com.thingworx.cache.ignite.IgniteCacheProvider",这将启用分布式缓存。
ThingWorx Flow 设置
ThingWorx Flow 安装计算机复制 platform-settings.json 文件中的 OrchestrationSettings 部分。
对于 QueueHost 设置,将 localhost 值替换为 ThingWorx Flow 安装 (期间安装了 RabbitMQ) 的实际主机值。有关其他 ThingWorx Flow 设置的信息,请参阅 platform_settings.json 配置详细信息
如果在 Ubuntu 22.04 或更高版本上安装 HA,请在 platform-settings.json 文件的块中添加 “basePath” : “/services” 参数:
"cache": {
"provider-type": "com.thingworx.cache.ignite.IgniteCacheProvider",
"ignite": {
示例
{
"PlatformSettingsConfig": {
"BasicSettings": {
"BackupStorage": "/ThingworxBackupStorage",
"EnableBackup": false,
"EnableClusteredMode": true,
"EnableSystemLogging": true,
"Storage": "/ThingworxStorage"
},
"ExtensionPackageImportPolicy": {
"importEnabled": true,
"allowJarResources": true,
"allowJavascriptResources": true,
"allowCSSResources": true,
"allowJSONResources": true,
"allowWebAppResources": true,
"allowEntities": true,
"allowExtensibleEntities": true
"haCompatibilityImportLevel":"WARN"
},
"OrchestrationSettings": {
"EnableOrchestration": true,
"QueueHost": "<RabbitMQ_Host>",
"QueuePort": 5672,
"QueueName": "256mb",
"QueueUsername": "flowuser",
"QueuePassword": "encrypt.queue.password",
"QueueVHost": "orchestration"
"TurnOffScopesApprovalPopup": true
},
"ClusteredModeSettings": {
"PlatformId": "platform1",
"CoordinatorHosts": "localhost:2181",
"ModelSyncPollInterval": 100
},
"AdministratorUserSettings": {
"InitialPassword": "YOU MUST SET A DEFAULT PASSWORD"
}
},
"PersistenceProviderPackageConfigs": {
"PostgresPersistenceProviderPackage": {
"ConnectionInformation": {
"jdbcUrl": "jdbc:postgresql://localhost:5432/thingworx",
"password": "thingworx",
"username": "thingworx"
}
}
},
"cache": {
"provider-type": "com.thingworx.cache.ignite.IgniteCacheProvider",
"ignite": {
"instance-name": "twx-core-server",
"default-cache-mode": "PARTITIONED",
"default-atomicity-mode": "ATOMIC", // never change
"default-backups": 1, // set based on failure tolerance
"default-write-sync-mode": "PRIMARY_SYNC", // never change
"default-read-from-backup": false, // only change to true if running 2 node embedded
"client-mode": true, // only false for embedded mode
"metrics-log-frequency": 0,
"address-resolver" : {
"type": "zookeeper",
"connection": "localhost:2181"
},
"ssl-active": "true",
"igniteKeyStoreFilePath": "/certs/ignite.pfx",
"igniteKeyStorePassword": "mykeystorepassword"
}
}
}
这对您有帮助吗?