ThingWorx HA 的平台設定
如所有 ThingWorx 部署一樣,ThingWorx 叢集部署需要 platform-settings.json 檔案存在於 ThingworxPlatform 儲存位置中。每個伺服器都有自己的 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
none
叢集中每個節點的唯一識別元。此 ID 將會顯示在彙總的記錄檔中。它必須為字母數字且不得超過 32 個字元。它應該與模式 "^[a-zA-Z0-9]{1,32}$" 相符。
CoordinatorHosts
none
用來協調 ThingWorx 主導權選擇的 Apache ZooKeeper 伺服器的逗號分隔清單。字串模式是 IP:port。(例如,「127.0.0.1:2181, 127.0.0.2:2181」)。
ZKNamespace
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 服務收到 "heartbeat" 的時間長度 (以毫秒計)。
CoordinatorConnectionTimeout
10000
系統將等待與協調器連線的時間量 (以毫秒為單位)。
MetricsCacheFrequency
60000
系統會追蹤每個伺服器的指標,並針對叢集層級指標進行彙總。此值為更新叢集指標的頻率 (以毫秒為單位)。
IgnoreInactiveInterfaces
true
選用。啟用叢集模式後,我們會嘗試使用服務發現提供者將 ThingWorx 伺服器註冊為服務。欲執行此操作,我們要查看所有可用的轉接器及其位址,並嘗試尋找網站本機位址。如果找不到網站本機位址,我們會使用所發現的第一個不是網站本機位址的位址。此設定會影響此邏輯。當此設定為 true 時,會略過非使用中介面。
IgnoreVirtualInterfaces
true
選用。當此設定為 true 時,會略過虛擬介面。如需詳細資訊,請參閱上述有關 IgnoreInactiveInterfaces 的描述。
HostAddressFilter
none
選用。如果已指定,將根據常規運算式篩選位址;否則,不會套用篩選器。例如,指定 “10\\\\..” 將篩選以 10 開頭的位址,或指定 “^.:.*$” 將篩選包含 : 的位址。如需詳細資訊,請參閱上述有關 IgnoreInactiveInterfaces 的描述。
Akka 設定
分散式/已排序訂閱所使用的 Akka 功能設定:
Akka 設定
預設
描述
DCPPort
2551
Akka 通訊埠
AkkaNumberofShards
100
Akka 叢集分區的總數 (應為叢集中 ThingWorx 節點數的 10 倍)
AkkaEntityTimeout
7m
Akka Actor 的閒置逾時 (以分鐘為單位: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 分區停止逾時 – 可以使執行中的 Actor 在將分區移至新節點之前完成 (以秒為單位: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
none
針對 zookeeperaddress-resolver type,是用來協調 ThingWorx 主導權選擇的 Apache ZooKeeper 伺服器的逗號分隔清單。字串模式是 IP:port (例如 127.0.0.1:2181,127.0.0.2:2181)。
default-cache-mode
none
此項可設定為 REPLICATEDPARTITIONED。如果設定為 PARTITIONED,資料會分佈在叢集中,並會根據 backups 設定複製到其他伺服器。如果設定為 REPLICATED,所有快取中的全部資料會儲存在 Ignite 叢集的所有伺服器中。
您的設定取決於系統的 HA 需求與正在執行的 Ignite 伺服器數。
default-atomicity-mode
ATOMIC
快取不可部分完成性模式決定快取是維持完整的交易語義還是更輕量的不可部份完成行為。當不需要交易以及明確鎖定時,應使用 ATOMIC 模式。在 ATOMIC 模式下,快取會跨所有快取節點維持完整資料一致性。
default-backups
none
此設定僅在 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
none
必須設定為 "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"
}
}
}
這是否有幫助?