ThingWorx 고가용성 > 클러스터링용 ThingWorx Foundation 구성 > ThingWorx HA를 위한 플랫폼 설정
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 노드 엔트리를 저장하는 Ignite 폴더를 basePath 아래에 생성합니다. 여러 클러스터 인스턴스에 대해 하나의 ZooKeeper를 사용하는 경우 기본값을 Ignite 클라이언트 구성 및 Ignite 서버측의 /clusterXX/services로 변경합니다. 자세한 내용은 중앙 ZooKeeper 클러스터 구성을 참조하십시오.
* 
basePath 설정은 ThingWorx 9.3.0 이상에만 적용할 수 있습니다.
client-mode
true
포함된 Ignite를 클라이언트로 실행할지(기본값) 아니면 서버로 실행할지 여부를 결정합니다. 서버 모드에서는 이 클라이언트가 데이터 저장에 참여하며 더 많은 메모리를 사용합니다.
connection
없음
address-resolver typezookeeper인 경우 ThingWorx 리더 선택을 조정하기 위해 쉼표로 구분된 Apache ZooKeeper 서버 목록이 사용됩니다. 문자열 패턴은 IP:포트(예, 127.0.0.1:2181, 127.0.0.2:2181)입니다.
default-cache-mode
없음
REPLICATED 또는 PARTITIONED로 설정할 수 있습니다. PARTITIONED로 설정하면 데이터가 클러스터 주위에 분산되고 backups 설정에 따라 다른 서버에 복제됩니다. REPLICATED로 설정하면 모든 캐시의 모든 데이터가 Ignite 클러스터의 모든 서버에 저장됩니다.
시스템의 HA 요구 사항과 실행 중인 Ignite 서버 수에 따라 설정이 달라집니다.
default-atomicity-mode
ATOMIC
캐시 원자성 모드는 캐시가 전체 트랜잭션 의미 체계를 유지할지 아니면 경량 원자성 동작을 유지할지 여부를 결정 합니다. 트랜잭션 및 명시적 잠금이 필요하지 않은 경우 ATOMIC 모드를 사용해야 합니다. ATOMIC 모드에서 캐시는 모든 캐시 노드에 걸쳐 전체 데이터 일관성을 유지합니다.
default-backups
없음
이 설정은 cache-modePARTITIONED로 설정된 경우에만 적용됩니다. 데이터의 복사본을 유지할 서버 수를 정의합니다. HA 환경의 경우 1 이상으로 설정해야 합니다.
default-read-from-backup
false
포함 모드에서 실행하는 경우(client-modefalse로 설정), default-read-from-backuptrue로 설정하면 캐시가 로컬에서 읽고 성능이 향상됩니다.분산 모드에서 실행하는 경우, 항상 네트워크를 통해 다른 노드로 이동해야 하기 때문에 이 설정이 아무런 도움이 되지 않습니다. 이 경우에는 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 설정의 경우 RabbitMQ가 설치되는 동안 localhost 값을 ThingWorx Flow 설치의 실제 호스트 값으로 대체하십시오. 다른 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"
}
}
}
도움이 되셨나요?