Alta disponibilidad de ThingWorx > Configuración de ThingWorx Foundation para la agrupación > Configuración de plataforma para la alta disponibilidad de ThingWorx
Configuración de plataforma para la alta disponibilidad de ThingWorx
Como ocurre con todas las implementaciones de ThingWorx, una implementación de agrupación de ThingWorx requiere que el fichero platform-settings.json exista en la ubicación de almacenamiento ThingworxPlatform. Cada servidor tendrá su propia carpeta ThingworxPlatform y el fichero platform-settings.json de cada servidor tendrá diferencias menores.
Para obtener más información sobre la configuración de platform-settings.json y ver un ejemplo de fichero platform-settings.json genérico, consulte Detalles de la configuración de platform-settings.json.
En el caso de un sistema agrupado, la configuración más pertinente se describe a continuación:
Configuración básica
Configuración básica
Por defecto
Descripción
EnableClusteredMode
false
Permite determinar si ThingWorx se ejecutará como un clúster (la configuración es true) o un servidor independiente (la configuración es false).
Configuración de la directiva de importación de paquetes de extensión
Configuración de la directiva de importación de paquetes de extensión
Por defecto
Descripción
haCompatibilityImportLevel
WARN
Al ejecutar ThingWorx en modo de clúster, se puede restringir la importación de extensiones a solo aquellas que tengan el señalizador haCompatibility definido en verdadero en los metadatos de la extensión. La configuración por defecto es WARN, que permite la importación, pero genera un mensaje de aviso. La configuración se puede cambiar a DENY. En este caso, la importación falla y se genera un error.
Configuración de modo agrupado
Configuración específica para la ejecución de ThingWorx en modo de clúster. Toda la configuración se desestima si la opción EnableClusteredMode anterior se define en false.
Configuración del modo agrupado
Por defecto
Descripción
PlatformId
ninguno
Un identificador único para cada nodo del clúster. Este ID se mostrará en registros agregados. Debe ser alfanumérico y no puede superar los 32 caracteres. Debe coincidir con el patrón "^[a-zA-Z0-9]{1,32}$".
CoordinatorHosts
ninguno
Una lista delimitada por comas de los servidores de Apache ZooKeeper utilizados para coordinar la elección de la prioridad de ThingWorx. El patrón de la cadena es IP:puerto. (por ejemplo, "127.0.0.1:2181, 127.0.0.2:2181").
ZKNamespace
ThingWorx
* 
En ThingWorx 9.3.0 o versiones posteriores, la configuración del modo agrupado cambia a ninguno.
La ruta del nodo raíz que se utiliza para realizar el seguimiento de la información en Zookeeper para el clúster. Se requiere cuando se ejecutan varios clústeres utilizando el mismo Zookeeper. Se aplican las limitaciones de asignación de nombres de Zookeeper, consulte http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#ch_zkDataModel.
ModelSyncPollInterval
100
Frecuencia en milisegundos con la que el modelo se sincroniza entre los servidores del clúster. Cada servidor verificará los cambios de modelo con esta frecuencia y aplicará los que encuentre.
ModelSyncWaitPeriod
3000
En la comunicación a través de WebSockets, el tráfico se rutea de manera round robin entre servidores. Si se realiza un cambio de modelo a través de WebSockets, la siguiente solicitud esperará hasta que haya transcurrido el tiempo especificado en milisegundos para que el modelo se sincronice en el servidor de destino. Si no se produce ninguna sincronización antes de que se agote el tiempo de espera, la solicitud fallará con un error de tiempo de espera.
ModelSyncTimeout
120000
La cantidad de tiempo que se debe esperar (en milisegundos) para cada reintento.
ModelSyncMaxDBUnavailableErrors
10
Número de errores de sincronización consecutivos de la conectividad de base de datos perdida que se permiten antes de que se cierre el servidor. El plazo en milisegundos es aproximadamente ModelSyncPollInterval * este valor.
ModelSyncMaxCacheUnavailableErrors
10
Número de errores de sincronización consecutivos de la conectividad de caché perdida que se permiten antes de que se cierre el servidor. El plazo en milisegundos es aproximadamente ModelSyncPollInterval * este valor.
CoordinatorMaxRetries
3
En caso de que se produzca un fallo en la comunicación con el coordinador, se volverá a intentar n veces antes de fallar.
CoordinatorSessionTimeout
90000
La cantidad de tiempo que ThingWorx espera (en milisegundos) sin recibir un "latido" del servicio Apache ZooKeeper que se utiliza para coordinar la prioridad de ThingWorx.
CoordinatorConnectionTimeout
10000
La cantidad de tiempo (en milisegundos) que el sistema esperará una conexión con el coordinador.
MetricsCacheFrequency
60000
Se realiza un seguimiento de las métricas por servidor y se agregan para las métricas de nivel de clúster. Este valor es la frecuencia (en milisegundos) con la que se actualizan las métricas del clúster.
IgnoreInactiveInterfaces
verdadero
Opcional. Cuando se activa el modo de clúster, se intenta registrar el servidor de ThingWorx como un servicio en un proveedor de detección de servicios. Para ello, se examinan todos los adaptadores disponibles y sus direcciones, y se intenta encontrar una dirección local del sitio. Si no se encuentra ninguna, se utiliza la primera dirección que se encuentra que no es local del sitio. Esta configuración afecta a la lógica. Cuando esta configuración es true, las interfaces inactivas se desestiman.
IgnoreVirtualInterfaces
verdadero
Opcional. Cuando esta configuración es true, las interfaces virtuales se desestiman. Para obtener más información, consulte la descripción de IgnoreInactiveInterfaces más arriba.
HostAddressFilter
ninguno
Opcional. Si se especifica, las direcciones se filtran según la expresión regular; de lo contrario, no se aplica ningún filtro. Por ejemplo, especifique “10\\\\..” para filtrar las direcciones que empiecen por 10, o “^.:.*$” para filtrar las direcciones que contengan :. Para obtener más información, consulte la descripción de IgnoreInactiveInterfaces más arriba.
Configuración de la caché
En esta sección hay varias configuraciones disponibles, pero, en general, solo se deben cambiar los siguientes elementos, a menos que se realice un ajuste para un entorno:
Configuración
Por defecto
Descripción
basePath
/services
Ignite creará una carpeta de Ignite en basePath en la que se almacenan las entradas del nodo de Ignite para la detección de servicios. Si se utiliza un ZooKeeper para múltiples instancias del clúster, cambie el valor por defecto a /clusterXX/services en la configuración del cliente de Ignite y en el servidor de Ignite. Para obtener más información, consulte Configuración de un clúster central de ZooKeeper.
* 
La configuración basePath solo se aplica a ThingWorx 9.3.0 y versiones posteriores.
client-mode
true
Permite determinar si la instancia integrada de Ignite se ejecuta como cliente (por defecto) o como servidor. En el modo de servidor, participa en el almacenamiento de datos y utilizará más memoria.
connection
ninguno
Para un elemento address-resolver type de zookeeper, una lista delimitada por comas de los servidores de Apache ZooKeeper que se utilizan para coordinar la elección principal de ThingWorx. El patrón de la cadena es IP:puerto (por ejemplo, 127.0.0.1:2181, 127.0.0.2:2181).
default-cache-mode
ninguno
Se puede definir en REPLICATED o PARTITIONED. Si se define en PARTITIONED, los datos se propagan alrededor del clúster y se replican en otros servidores según la configuración de backups. Si se define en REPLICATED, todos los datos de todas las cachés se almacenan en todos los servidores del clúster de Ignite.
La configuración depende de los requisitos de alta disponibilidad del sistema y del número de servidores de Ignite que se ejecuten.
default-atomicity-mode
ATOMIC
El modo de atomicidad de la caché permite determinar si la caché conserva la semántica total transaccional o un comportamiento atómico más ligero. El modoATOMIC se debe utilizar cuando no se necesitan transacciones ni bloqueo explícito. En el modo ATOMIC, la caché conservará la coherencia total de los datos en todos los nodos de la caché.
default-backups
ninguno
Esta configuración solo se aplica si cache-mode se define en PARTITIONED. Permite definir el número de servidores que conservarán una copia de los datos. Para un entorno de alta disponibilidad, se debe definir en 1 o más.
default-read-from-backup
falso
Cuando se ejecuta en modo integrado (client-mode se define en false), defina default-read-from-backup en true para que la caché lea localmente y aumente el rendimiento.Cuando se ejecuta en modo distribuido, esta configuración no tiene ningún beneficio, ya que siempre se debe pasar por la red a otro nodo. En ese caso, se debe definir en false.
default-write-sync-mode
PRIMARY_SYNC
Esta configuración se puede cambiar por la siguiente:
FULL_ASYNC
Ignite no esperará a las respuestas de escritura o confirmación de los nodos participantes. Por lo tanto, los nodos remotos pueden obtener su estado actualizado una vez que se hayan completado los métodos de escritura en caché o el método Transaction.commit().
FULL_SYNC
Ignite debe esperar las respuestas de escritura o confirmación de todos los nodos.
PRIMARY_SYNC
Esta configuración solo es para los modos CacheMode.PARTITIONED y CacheMode.REPLICATED.
FULL_ASYNC
No se recomienda. Permite garantizar que no haya posibilidad de perder datos tras un fallo del sistema, pero ralentizará el rendimiento de la escritura.
provider-type
ninguno
Debe definirse en "com.thingworx.cache.ignite.IgniteCacheProvider", que activa la caché distribuida.
Configuración de ThingWorx Flow
Copie la sección OrchestrationSettings en el fichero platform-settings.json del ordenador de instalación de ThingWorx Flow.
Para la configuración de QueueHost, reemplace el valor de localhost por el valor de host real de instalación de ThingWorx Flow durante el que se ha instalado RabbitMQ. Para obtener más información sobre otras configuraciones de ThingWorx Flow, consulte Detalles de la configuración de platform_settings.json.
Si se instala alta disponibilidad en Ubuntu 22.04 o superior, añada el parámetro “basePath” : “/services” en el fichero platform-settings.json del bloque:
"cache": {
"provider-type": "com.thingworx.cache.ignite.IgniteCacheProvider",
"ignite": {
Ejemplo
{
"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"
}
}
}
¿Fue esto útil?