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
用于在 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 的说明。
Akka 设置
用于分布式/有序订阅的 Akka 功能的设置:
Akka 设置
默认值
说明
DCPPort
2551
Akka 通信端口
AkkaNumberofShards
100
Akka 群集碎片总数 (应为群集中 ThingWorx 节点数的 10 倍)
AkkaEntityTimeout
7m
Akka 操作者空闲超时 (以分钟计:7m,或以秒计:540s)
AkkaSSLEnabled
false
Akka TLS 启用/禁用
AkkaKeyStore
Akka TLS keystore 路径
AkkaTrustStore
Akka TLS truststore 路径
AkkaKeyStorePassword
encrypt.akka.keystore.password
Akka TLS keystore 密码
AkkaTrustStorePassword
encrypt.akka.truststore.password
Akka TLS truststore 密码
AkkaTlsProtocolVersion
TLSv1.2
Akka TLS 协议版本
AkkaShardingHandoffTimeout
60s
Akka 碎片停止超时 - 使运行操作者在将碎片移至新节点之前完成 (以秒计:60s,或以分钟计:1m)
AkkaShardingBufferSize
100000
在碎片重新平衡期间启动新碎片或等待碎片停止并重新启动时缓冲的消息数。每次在新节点上启动/重新启动碎片后,将执行这些消息。
AkkaNumberOfSubscriptionThreads
DEFAULT
有序订阅的执行线程数。设置为所需的线程数,或设置为 DEFAULT,使每个处理器/内核一个线程。
缓存设置
本部分中提供了多个可用配置,但一般来说,除非要对环境进行调整,否则仅应更改以下内容:
设置
默认值
说明
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"
},
"ClusteredModeSettings": {
"CoordinatorConnectionTimeout": 10000,
"CoordinatorHosts": "localhost:2181",
"CoordinatorMaxRetries": 3,
"CoordinatorRetryTimeout": 3000,
"CoordinatorSessionTimeout": 90000,
"LoadBalancerBase64EncodedCredentials": "QWRtaW5pc3RyYXRvcjp0clVmNnl1ejI/X0d1Yg==",
"PlatformId": "platform1",
"ZKNamespace": "",
"MetricsCacheFrequency": "60000",
"ModelSyncPollInterval": "100",
"ModelSyncTimeout": "120000",
"ModelSyncMaxDBUnavailableErrors": "10",
"ModelSyncMaxCacheUnavailableErrors": "10",
"IgnoreInactiveInterfaces": true,
"IgnoreVirtualInterfaces": true,
"HostAddressFilter": "",
},
“AkkaSettings” : {
"DCPPort": 2551,
"AkkaNumberOfShards": 100,
"AkkaEntityTimeout": "7m",
"AkkaShardingHandoffTimeout": "60s",
"AkkaShardingBufferSize": 100000,
"AkkaNumberOfSubscriptionThreads": "DEFAULT",
"AkkaSSLEnabled": false,
"AkkaKeyStore":"C:/tempcerts/akka-keystore.jks",
"AkkaTrustStore":"C:/tempcerts/akka-keystore.jks",
"AkkaKeyStorePassword": "encrypt.akka.keystore.password",
"AkkaTrustStorePassword": "encrypt.akka.truststore.password",
"AkkaTlsProtocolVersion": "TLSv1.2"
},
"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"
}
}
}
这对您有帮助吗?