Haute disponibilité ThingWorx > Configuration de ThingWorx Foundation pour le clustering > Paramètres de la plateforme pour la haute disponibilité ThingWorx
Paramètres de la plateforme pour la haute disponibilité ThingWorx
Comme pour tous les déploiements de ThingWorx, un déploiement de cluster ThingWorx exige que le fichier platform-settings.json se trouve dans l'emplacement de stockage ThingworxPlatform. Chaque serveur disposera de son propre dossier ThingworxPlatform et le fichier platform-settings.json sera adapté pour chacun d'entre eux.
Pour obtenir plus d'informations sur les paramètres de platform-settings.json et consulter un exemple de fichier platform-settings.json générique, consultez la rubrique Détails de la configuration du fichier platform-settings.json.
Pour un système en cluster, les paramètres les plus pertinents sont décrits ci-dessous :
Paramètres de base
Paramètre de base
Par défaut
Description
EnableClusteredMode
false
Détermine si ThingWorx s'exécutera en tant que cluster (paramètre true) ou en tant que serveur autonome (paramètre false).
Paramètres de la politique d'importation des packages d'extension
Paramètre de la politique d'importation des packages d'extension
Par défaut
Description
haCompatibilityImportLevel
WARN
Lorsque vous exécutez ThingWorx en mode cluster, vous pouvez limiter l'importation des extensions à celles dont le marqueur haCompatibility est défini sur true dans les métadonnées des extensions. Le paramètre par défaut WARN permet l'importation, mais génère un message d'avertissement. Vous pouvez définir le paramètre sur DENY ; dans ce cas, l'importation échoue et une erreur est générée.
Paramètres du mode cluster
Paramètres spécifiques à l'exécution de ThingWorx en mode cluster. Tous les paramètres sont ignorés si le paramètre EnableClusteredMode est défini sur false.
Paramètre du mode cluster
Par défaut
Description
PlatformId
Aucune
Identificateur unique pour chaque noeud du cluster. Cet ID sera affiché dans les journaux agrégés. Il doit être alphanumérique et contenir moins de 32 caractères. Il doit correspondre au modèle "^[a-zA-Z0-9]{1,32}$".
CoordinatorHosts
Aucune
Liste délimitée par des virgules des serveurs Apache ZooKeeper utilisés pour coordonner la priorité de ThingWorx. Le modèle de chaîne est IP:port (par exemple, "127.0.0.1:2181, 127.0.0.2:2181").
ZKNamespace
ThingWorx
* 
Pour ThingWorx 9.3.0 et versions antérieures, le paramètre du mode cluster passe à aucun.
Chemin du noeud racine utilisé pour effectuer le suivi des informations dans ZooKeeper pour le cluster. Il est requis lors de l'exécution de plusieurs clusters utilisant le même ZooKeeper. Les limitations de dénomination de ZooKeeper s'appliquent (reportez-vous à la page http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#ch_zkDataModel).
ModelSyncPollInterval
100
Fréquence de synchronisation (en millisecondes) du modèle entre les serveurs du cluster. Chaque serveur recherche selon cet intervalle les modifications apportées au modèle et applique toutes les modifications détectées.
ModelSyncWaitPeriod
3000
Lors de la communication via des WebSockets, le trafic est routé de manière cyclique sur plusieurs serveurs. Si une modification du modèle est effectuée via des WebSockets, la demande suivante attendra que la durée spécifiée en millisecondes passe pour que le modèle soit synchronisé sur le serveur sur lequel il se trouve. Si aucune synchronisation ne se produit avant le délai d'inactivité, la requête échoue avec une erreur de délai d'inactivité.
ModelSyncTimeout
120000
Délai d'attente (en millisecondes) pour chaque nouvelle tentative.
ModelSyncMaxDBUnavailableErrors
10
Nombre d'échecs de synchronisation consécutifs dus à une perte de connectivité de la base de données autorisés avant l'arrêt du serveur. La période en millisecondes correspond approximativement à ModelSyncPollInterval * cette valeur.
ModelSyncMaxCacheUnavailableErrors
10
Nombre d'échecs de synchronisation consécutifs dus à une perte de connectivité du cache autorisés avant l'arrêt du serveur. La période en millisecondes correspond approximativement à ModelSyncPollInterval * cette valeur.
CoordinatorMaxRetries
3
En cas d'échec de communication avec le coordinateur, le système effectue n nouvelles tentatives avant d'échouer.
CoordinatorSessionTimeout
90000
Délai d'attente par ThingWorx (en millisecondes) d'une pulsation du service Apache ZooKeeper utilisé pour coordonner la priorité de ThingWorx.
CoordinatorConnectionTimeout
10000
Durée (en millisecondes) pendant laquelle le système attend une connexion au coordinateur.
MetricsCacheFrequency
60000
Les mesures sont suivies par serveur et agrégées pour les mesures de niveau de cluster. Cette valeur correspond à la fréquence (en millisecondes) de mise à jour des mesures du cluster.
IgnoreInactiveInterfaces
vrai
Facultatif. Lorsque le mode cluster est activé, nous tentons d'enregistrer le serveur ThingWorx en tant que service auprès d'un fournisseur de découverte de service. Pour ce faire, nous examinons tous les adaptateurs disponibles et leurs adresses et tentons de trouver une adresse locale au site. Si nous n'en trouvons pas, nous utilisons la première adresse non locale au site que nous trouvons. Ce paramètre modifie cette logique. Lorsque ce paramètre est défini sur vrai, les interfaces inactives sont ignorées.
IgnoreVirtualInterfaces
vrai
Facultatif. Lorsque ce paramètre est défini sur vrai, les interfaces virtuelles sont ignorées. Pour plus d'informations, consultez la description sur IgnoreInactiveInterfaces ci-dessus.
HostAddressFilter
Aucune
Facultatif. S'il est spécifié, nous filtrons les adresses en fonction de l'expression régulière. Dans le cas contraire, aucun filtre n'est appliqué. Par exemple, spécifiez “10\\\\..” pour filtrer les adresses qui commencent par 10 ou “^.:.*$” pour filtrer les adresses contenant :. Pour plus d'informations, consultez la description sur IgnoreInactiveInterfaces ci-dessus.
Paramètres de cache
Plusieurs configurations sont possibles dans cette section. Cependant, il est recommandé de ne modifier que les éléments suivants, sauf si vous adaptez les paramètres à un environnement :
Paramètre
Par défaut
Description
basePath
/services
Ignite va créer un dossier Ignite sous basePath lequel stocke les entrées de noeud Ignite pour la découverte de services. Si vous utilisez un seul ZooKeeper pour plusieurs instances de cluster, définissez la valeur par défaut sur /clusterXX/services pour la configuration du client Ignite et côté serveur Ignite. Pour plus d'informations, consultez la rubrique Configuration d'un cluster ZooKeeper central.
* 
Le paramètre basePath s'applique uniquement à ThingWorx 9.3.0 et versions ultérieures.
client-mode
vrai
Détermine si la base de données Ignite intégrée s'exécute sous la forme d'un client (par défaut) ou d'un serveur. En mode serveur, il participe au stockage des données et utilise plus de mémoire.
connection
Aucune
Pour un address-resolver type dont la valeur est zookeeper, une liste séparée par une virgule des serveurs Apache Zookeeper utilisés pour coordonner l'élection d'un noeud leader ThingWorx. Le format de la chaîne est le suivant : IP:port (par exemple, 127.0.0.1:2181, 127.0.0.2:2181).
default-cache-mode
Aucune
Peut être défini sur REPLICATED ou PARTITIONED. S'il est défini sur PARTITIONED, les données sont réparties dans le cluster et répliquées sur d'autres serveurs en fonction du paramètre backups. Si ce paramètre est défini sur REPLICATED, toutes les données de tous les caches sont stockées sur tous les serveurs du cluster Ignite.
Vos paramètres dépendent des exigences de haute disponibilité du système et du nombre de serveurs Ignite exécutés.
default-atomicity-mode
ATOMIC
Le mode d'atomicité du cache détermine si le cache conserve une sémantique transactionnelle complète ou un comportement atomique plus léger. Le mode ATOMIC doit être utilisé lorsque les transactions et le verrouillage explicite ne sont pas nécessaires. En mode ATOMIC, le cache conservera la cohérence totale des données sur tous les noeuds du cache.
default-backups
Aucune
Ce paramètre s'applique uniquement si cache-mode est défini sur PARTITIONED. Il définit le nombre de serveurs qui conserveront une copie des données. Pour un environnement haute disponibilité, la valeur minimale est 1.
default-read-from-backup
faux
Lorsque vous exécutez l'application en mode intégré (client-mode défini sur faux), définissez default-read-from-backup sur true afin d'effectuer l'écriture du cache pour améliorer les performances.Lorsque vous exécutez l'application en mode distribué, ce paramètre n'offre aucun avantage puisque vous devez toujours passer par le réseau pour aller vers un autre noeud. Dans ce cas, ce paramètre doit être défini sur false.
default-write-sync-mode
PRIMARY_SYNC
Vous pouvez définir ce paramètre sur les valeurs suivantes :
FULL_ASYNC
Ignite n'attendra pas de réponses d'écriture ou de validation des noeuds participants. Par conséquent, l'état des noeuds distants peut être mis à jour une fois les méthodes d'écriture dans le cache terminées ou une fois la méthode Transaction.commit() terminée.
FULL_SYNC
Ignite doit attendre les réponses d'écriture ou de validation de tous les noeuds.
PRIMARY_SYNC
Ce paramètre n'est applicable qu'aux modes CacheMode.PARTITIONED et CacheMode.REPLICATED.
FULL_ASYNC
Non recommandé. Vous êtes assuré de ne perdre aucune donnée en cas d'échec du système, mais les performances d'écriture sont ralenties.
provider-type
Aucune
Doit être défini sur "com.thingworx.cache.ignite.IgniteCacheProvider", ce qui active le cache distribué.
Paramètres dans ThingWorx Flow
Copiez la section OrchestrationSettings dans le fichier platform-settings.json de la machine d'installation ThingWorx Flow.
Pour le paramètre QueueHost, remplacez la valeur localhost par la valeur d'hôte réelle de l'installation de ThingWorx Flow au cours de laquelle RabbitMQ a été installé. Pour plus d'informations sur les autres paramètres ThingWorx Flow, consultez la rubrique Détails de la configuration du fichier platform-settings.json.
Dans le cas d'une installation haute disponibilité sur Ubuntu 22.04 ou version ultérieure, ajoutez le paramètre “basePath” : “/services” dans le fichier platform-settings.json dans le bloc :
"cache": {
"provider-type": "com.thingworx.cache.ignite.IgniteCacheProvider",
"ignite": {
Exemple
{
"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"
}
}
}
Est-ce que cela a été utile ?