Cluster avec Alfresco Community

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-15-2011 11:45 AM
Bonjour,
J'ai lu attentivement la page sur le wiki sur Alfresco en mode Cluster :
http://wiki.alfresco.com/wiki/Cluster_Configuration_V2.1.3_and_Later
Mais j'ai encore quelques interrogations qui subsistent dans mon esprit, nottament au niveau des emplacements où les données sont sauvegardées. Je vous expose le problème brièvement :
Actuellement, j'ai deux emplacements depuis lesquels j'utilise Alfresco. Un serveur sur le site 1 tourne avec une DB en locale, Et les utilisateurs du site 2 accèdent à ce serveur au travers du VPN. Le souçis, c'est que ce VPN est lent, et pour télécharger des fichiers depuis le site 2, ça rame. Je voudrais donc migrer vers une topologie comme celle présentée sur ce schéma :
[img]http://img836.imageshack.us/img836/5434/topologiegrappe.png[/img]
Cette topologie s'approcherait de celle présentée sur le wiki :
http://wiki.alfresco.com/current/images/9/91/Alfresco_LB_Diagram.png
Dans mes esprits, le comportement serait le suivant :
-Les utilisateurs se connectent à leur serveur Alfresco sur leurs sites.
-Ils accèdent à la DB commune à tous avec les fichiers communs à tous les sites
-Ils veulent un fichier, le téléchargent depuis le serveur Alfresco de leur site qui le possède en local, très rapidement donc.
-Si ils stockent des nouveaux fichiers, les fichiers sont uploadés sur le serveur Alfresco de leur site.
Ma question : qu'est-ce qu'il se passe avec la DB ? Sur le wiki il est écrit "L2 Cache Replication" et "Single, shared content store ". Pourtant actuellement les documents stockés se trouvent dans %Alfresco_root%/alf_data/ ! Où se trouveraient alors les documents dans une telle topologie ? L'idéal pour moi serait que les documents soient en deux endroits différents, synchronisés chaque nuit par exemple, ou quelque chose du genre. (La mise à l'échelle serait difficile avec une telle idée)
Enfin bref, c'est pas très clair dans ma tête et j'ai pas trop trouvé d'information sur ce comportement assez spécifique quand même. Enfin vous comprendrez que le souçis principal est d'avoir une copie locale à chaque site pour éviter les limitations du VPN !
je vous remercie de votre attention en tout cas !
Thibaut.
J'ai lu attentivement la page sur le wiki sur Alfresco en mode Cluster :
http://wiki.alfresco.com/wiki/Cluster_Configuration_V2.1.3_and_Later
Mais j'ai encore quelques interrogations qui subsistent dans mon esprit, nottament au niveau des emplacements où les données sont sauvegardées. Je vous expose le problème brièvement :
Actuellement, j'ai deux emplacements depuis lesquels j'utilise Alfresco. Un serveur sur le site 1 tourne avec une DB en locale, Et les utilisateurs du site 2 accèdent à ce serveur au travers du VPN. Le souçis, c'est que ce VPN est lent, et pour télécharger des fichiers depuis le site 2, ça rame. Je voudrais donc migrer vers une topologie comme celle présentée sur ce schéma :
[img]http://img836.imageshack.us/img836/5434/topologiegrappe.png[/img]
Cette topologie s'approcherait de celle présentée sur le wiki :
http://wiki.alfresco.com/current/images/9/91/Alfresco_LB_Diagram.png
Dans mes esprits, le comportement serait le suivant :
-Les utilisateurs se connectent à leur serveur Alfresco sur leurs sites.
-Ils accèdent à la DB commune à tous avec les fichiers communs à tous les sites
-Ils veulent un fichier, le téléchargent depuis le serveur Alfresco de leur site qui le possède en local, très rapidement donc.
-Si ils stockent des nouveaux fichiers, les fichiers sont uploadés sur le serveur Alfresco de leur site.
Ma question : qu'est-ce qu'il se passe avec la DB ? Sur le wiki il est écrit "L2 Cache Replication" et "Single, shared content store ". Pourtant actuellement les documents stockés se trouvent dans %Alfresco_root%/alf_data/ ! Où se trouveraient alors les documents dans une telle topologie ? L'idéal pour moi serait que les documents soient en deux endroits différents, synchronisés chaque nuit par exemple, ou quelque chose du genre. (La mise à l'échelle serait difficile avec une telle idée)
Enfin bref, c'est pas très clair dans ma tête et j'ai pas trop trouvé d'information sur ce comportement assez spécifique quand même. Enfin vous comprendrez que le souçis principal est d'avoir une copie locale à chaque site pour éviter les limitations du VPN !
je vous remercie de votre attention en tout cas !
Thibaut.
Labels:
- Labels:
-
Archive
6 REPLIES 6
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-15-2011 05:57 PM
Bonjour
Vous avez aussi la possibilité de faire de la réplication de d'espace documentaire à partir d'un serveur maitre sur un serveur distant. Solution proposé par alfresco pour mettre à disposition des données sur une filiale ne possédant pas un débit suffisant.
ATTENTION, les données repliquées sont uniquement en lecture seules, la synchronisation étant a définir lors de la mise en place de la replication.
Je vous renvoie sur le wiki pour plus d'information :
http://wiki.alfresco.com/wiki/Replication_Service
et sur la documentation en ligne :
http://docs.alfresco.com/3.4/index.jsp
Vous avez aussi la possibilité de faire de la réplication de d'espace documentaire à partir d'un serveur maitre sur un serveur distant. Solution proposé par alfresco pour mettre à disposition des données sur une filiale ne possédant pas un débit suffisant.
ATTENTION, les données repliquées sont uniquement en lecture seules, la synchronisation étant a définir lors de la mise en place de la replication.
Je vous renvoie sur le wiki pour plus d'information :
http://wiki.alfresco.com/wiki/Replication_Service
et sur la documentation en ligne :
http://docs.alfresco.com/3.4/index.jsp

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2022 01:41 PM
Bonjour , stp est ce possible d'integrer REDIS a ALFRESCO ?

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-16-2011 07:55 AM
Merci pour la réponse rapide ! Je file lire toutes ces informations et me renseigner sur les CMIS de ce pas alors.

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-17-2011 10:32 AM
Bonjour,
Je suis toujours en train d'essayer de trouver une solution à mon problème de BP qui impacterait le moins les utilisateurs. Il y a quelque chose que j'ai du mal à cerner en rapport avec ces options de réplications. Vous dites qu'il faudra un maître et un esclave, où les données seraient en lecture seule. Il n'est pas possible d'envisager une configuration de pair à pair où les deux serveurs fourniraient un contenu identique, avec alf_data et la DB synchronisés +/- en temps réel ?
J'ai essayé en environnement de test de mettre en oeuvre le scénario Maître/Esclave, avec deux Alfresco possédant chacun leurs BDD locale situés sur le même réseau. J'ai ajouté l'id dans share-config-custom.xml sur l'un de ces noeuds, et j'ai relancé les serveurs. J'ai ensuite été sur l'interface d'administration dans la section "Créer une tâche de réplication". Il m'est alors pas possible de sélectionner ma "Cible de transfert". Y-a-t-il un endroit où je dois spécifier explicitement qui est le Maître et qui est l'esclave, ou est-ce que spécifier "read-only" sur le serveur esclave suffit ?
Egalement, pour reprendre le schéma que j'ai introduit dans mon premier post, je n'arrive pas à déterminer comment spécifier l'accès à une DB commune sur les deux serveurs. J'ai cru comprendre qu'il n'était pas possible de donner accès à une unique DB à deux serveurs au même moment, car il n'était possible de binder 3306 qu'une seule fois. J'ai tenté de spécifier dans le fichier alfresco-global.properties d'un des serveurs l'utilisation de la DB de l'autre serveur déjà installé, mais sans surprise ça n'a pas fonctionné :
En imaginant l'utilisation d'outils "externes" qui synchroniseraient de manière brutale à la fois la DB et le répertoire des données, est-ce qu'on risquerait pas de voir des effets de bord indésirables apparaître ?
Je vous remercie en tout cas pour votre intérêt et pour avoir lu totu ce que j'avais à dire 🙂
Thibaut.
Pour information,
Je suis toujours en train d'essayer de trouver une solution à mon problème de BP qui impacterait le moins les utilisateurs. Il y a quelque chose que j'ai du mal à cerner en rapport avec ces options de réplications. Vous dites qu'il faudra un maître et un esclave, où les données seraient en lecture seule. Il n'est pas possible d'envisager une configuration de pair à pair où les deux serveurs fourniraient un contenu identique, avec alf_data et la DB synchronisés +/- en temps réel ?
J'ai essayé en environnement de test de mettre en oeuvre le scénario Maître/Esclave, avec deux Alfresco possédant chacun leurs BDD locale situés sur le même réseau. J'ai ajouté l'id dans share-config-custom.xml sur l'un de ces noeuds, et j'ai relancé les serveurs. J'ai ensuite été sur l'interface d'administration dans la section "Créer une tâche de réplication". Il m'est alors pas possible de sélectionner ma "Cible de transfert". Y-a-t-il un endroit où je dois spécifier explicitement qui est le Maître et qui est l'esclave, ou est-ce que spécifier "read-only" sur le serveur esclave suffit ?
Egalement, pour reprendre le schéma que j'ai introduit dans mon premier post, je n'arrive pas à déterminer comment spécifier l'accès à une DB commune sur les deux serveurs. J'ai cru comprendre qu'il n'était pas possible de donner accès à une unique DB à deux serveurs au même moment, car il n'était possible de binder 3306 qu'une seule fois. J'ai tenté de spécifier dans le fichier alfresco-global.properties d'un des serveurs l'utilisation de la DB de l'autre serveur déjà installé, mais sans surprise ça n'a pas fonctionné :
12:13:50,299 WARN [hibernate.cfg.SettingsFactory] Could not obtain connection metadataD'autant plus je pense que pour que cette topologie fonctionne correctement, il faudrait que les répertoires alf_data sur les deux serveurs soient parfaitement synchronisés.
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (null, message from server: "Host x.x.x.x' is not allowed to connect to this MySQL server")
En imaginant l'utilisation d'outils "externes" qui synchroniseraient de manière brutale à la fois la DB et le répertoire des données, est-ce qu'on risquerait pas de voir des effets de bord indésirables apparaître ?
Je vous remercie en tout cas pour votre intérêt et pour avoir lu totu ce que j'avais à dire 🙂
Thibaut.
Pour information,

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-20-2011 04:41 AM
Pour résumer rapidement l'affaire, il y a plusieurs options en effet :
* Si vous avez une instance "principale" (par exemple au siège), et une instance secondaire distante, et que vous voulez donner une copie lecture seule de quelques sous parties de l'arborescence aux utilisateurs du site secondaire, afin d'en accélérer la lecture/l'accès, le replication service est en effet tout a fait approprié.
Dans ce cas, vous avez deux instances indépendantes (2 contentstores, 2 bases de données, 2 jeu d'indexes lucene), et vous envoyez de manière régulière du contenu de l'un vers l'autre, via la définition de transfer targets et de jobs de réplication. Voir http://wiki.alfresco.com/wiki/Transfer_Service#Creating_a_new_Transfer_Target_Through_Alfresco_Share... à mon avis pour l'étape qui vous manque.
Cela suppose qu'il y ait bcp + de lectures que d'écritures sur le site secondaire pour etre bénéfique. les ecritures peuvent etre redirigées vers le serveur source si nécessaire.
* Si vous souhaitez que les 2 instances soient parfaitement synchronisées, et accessible en lecture / écriture des 2 cotés, des solutions de clustering peuvent être envisagées (http://wiki.alfresco.com/wiki/Cluster_Configuration_V2.1.3_and_Later#Scenarios), mais attention : ce n'est pas forcément adapté si les serveurs sont séparés par des grandes "distances". L'invalidation des caches ehcache à travers le cluster en pâtira.
En ce qui concerne la base de données, il y a confusion entre le port de bind 3306, qui est uniquement côté serveur, et les clients. En l'occurrence, il vous manque sans doute un GRANT ( voir http://dev.mysql.com/doc/refman/5.1/en/grant.html), pour autoriser l'accès par le réseau depuis le deuxième serveur. mais la encore, s'il y a une forte latence d'accès à la base depuis le deuxième site, les performances sur ce site en pâtiront.
N'oubliez pas également que chaque noeud doit posséder son propre jeu indépendant d'indexes lucene. Ceux ci sont reconstruit de chaque côté en suivant la table des transactions et en rejouant/réindexant périodiquement les noeuds concernés par les transactions non-locales.
Ces 2 solutions sont très différentes et répondent à des besoins différents. Et aucune des 2 ne dispense d'avoir des bons backups, indépendants, testés, planifiés, offline, etc (voir http://wiki.alfresco.com/wiki/Backup_and_Restore).
* Si vous avez une instance "principale" (par exemple au siège), et une instance secondaire distante, et que vous voulez donner une copie lecture seule de quelques sous parties de l'arborescence aux utilisateurs du site secondaire, afin d'en accélérer la lecture/l'accès, le replication service est en effet tout a fait approprié.
Dans ce cas, vous avez deux instances indépendantes (2 contentstores, 2 bases de données, 2 jeu d'indexes lucene), et vous envoyez de manière régulière du contenu de l'un vers l'autre, via la définition de transfer targets et de jobs de réplication. Voir http://wiki.alfresco.com/wiki/Transfer_Service#Creating_a_new_Transfer_Target_Through_Alfresco_Share... à mon avis pour l'étape qui vous manque.
Cela suppose qu'il y ait bcp + de lectures que d'écritures sur le site secondaire pour etre bénéfique. les ecritures peuvent etre redirigées vers le serveur source si nécessaire.
* Si vous souhaitez que les 2 instances soient parfaitement synchronisées, et accessible en lecture / écriture des 2 cotés, des solutions de clustering peuvent être envisagées (http://wiki.alfresco.com/wiki/Cluster_Configuration_V2.1.3_and_Later#Scenarios), mais attention : ce n'est pas forcément adapté si les serveurs sont séparés par des grandes "distances". L'invalidation des caches ehcache à travers le cluster en pâtira.
En ce qui concerne la base de données, il y a confusion entre le port de bind 3306, qui est uniquement côté serveur, et les clients. En l'occurrence, il vous manque sans doute un GRANT ( voir http://dev.mysql.com/doc/refman/5.1/en/grant.html), pour autoriser l'accès par le réseau depuis le deuxième serveur. mais la encore, s'il y a une forte latence d'accès à la base depuis le deuxième site, les performances sur ce site en pâtiront.
N'oubliez pas également que chaque noeud doit posséder son propre jeu indépendant d'indexes lucene. Ceux ci sont reconstruit de chaque côté en suivant la table des transactions et en rejouant/réindexant périodiquement les noeuds concernés par les transactions non-locales.
Ces 2 solutions sont très différentes et répondent à des besoins différents. Et aucune des 2 ne dispense d'avoir des bons backups, indépendants, testés, planifiés, offline, etc (voir http://wiki.alfresco.com/wiki/Backup_and_Restore).

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-20-2011 12:10 PM
J'ai mesuré la latence du réseau entre les deux sites en pleine journée, sur une mesure de cinq minutes j'ai 30.5ms de latence (71ms RTT), en imaginant mettre en oeuvre NTP il ne devrait pas y avoir de souçis à ce niveau là je pense, et les index devraient se synchroniser correctement.
J'ai continué à me documenter sur le sujet et un peu mieu cerné le mode de fonctionnement de Alfresco. J'estime que faire fonctionner Alfresco en Cluster serait la meilleur option disponible pour ce que je veux faire : Les utilisateurs pourront, de où qu'ils se trouvent, télécharger et uploader (deux activités équivalentes) ce qu'ils désirent sur le serveur, avec un débit acceptable (a compter du fait que la synchro sur les données s'est faite). L'exemple cité dans le wiki me semble donc très approprié, et je souhaiterais déjà le faire marcher en environnement de test. Bon comme beaucoup de choses en informatique, ça marche rarement du premier coup !
Pour situer rapidement le contexte, deux machines virtuelles tournent sous CentOS 5.6 à jour, sans serveur graphique, sur le même sous réseau IP.
L'installation est faite dans ce répertoire : /srv/alfresco-3.4.d/ et j'utilise MySQL comme DB (la DB fournie par défaut, encore une fois).
Tout premièrement, j'ai crée un répertoire que je considère comme contenant le contenu partagé sur chaque serveur à cet emplacement : /share/alfresco-3.4.d/alf_data/
Sur le serveur 192.168.0.162 j'ai monté le répertoir /share/alfresco-3.4.d/alf_data dans /share/alfresco-3.4.d/alf_data avec NFS :
/etc/exports
Une fois cette configuration de départ faite, j'ai suivit le wiki sur les configurations. A ce stage, les login, upload de fichiers marchent parfaitement sur chacun des serveurs. Les évènements sont loggés dans la db ( select * from alf_content_data ; ). Je commence donc avec ce premier fichier modifié pour spécifier la synchronisation des index lucenes :
/srv/alfresco-3.4.d/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/repository.properties
index.tracking.cronExpression=0/5 * * * * ?
index.recovery.mode=VALIDATE sur alfresco3
index.recovery.mode=FULL sur alfresco2
alfresco.cluster.name=alftest
J'ai ensuite modifié le second fichier spécifié dans le wiki pour la replication du contenu
/srv/alfresco-3.4.d/tomcat/shared/classes/alfresco/extension/replicating-content-services-context.xml
Les lignes qui me semblent importantes sur ce fichier :
<bean id="localDriveContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
==> <value>./alf_data/</value>
<bean id="networkContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
==> <value>/share/alfresco-3.4.d/alf_data/</value>
Une fois ces manipulations faites, j'ai renommé le fichier ehcache-custom.xml.sample.cluster en ehcache-custom.xml mais je n'ai pas touché à son contenu. Il spécifie l'@Mcast 230.0.0.1 mais c'est la@Mcast par défaut donc je suppose que de ne pas y toucher devrait aller.
/srv/alfresco-3.4.d/tomcat/shared/classes/alfresco/extension/ehcache-custom.xml
Une fois ces modifications faites, j'ai d'abord démarré alfresco3 où se trouve index.recovery.mode=VALIDATE, puis alfresco2 où se trouve index.recovery.mode=FULL. Une fois ce stade atteint, Un problème majeur se pose : Impossible d'utiliser aucun des connecteurs : ftp, webdav, http. Mes étapdes de troubleshoot :
J'obsèrve toutes les deux secondes une nouvelle ligne dans le log de tomcat, toujours la même. J'ai été vérifier la validité du fichier wcmqs-api.properties, qui semble correct à mes yeux (on y retrouve les deux secondes) :
/srv/alfresco-3.4.d/tomcat/webapps/wcmqs/WEB-INF/classes/alfresco/wcmqs-api.properties
En analysant étape par étape mes modification, je constate que l'erreur vient probablement du fichier replicating-content-services-context.xml car lorsque je le vire, et relance le serveur, ça remarche :
Après relecture des tutoriaux et mes maigres tentatives de compréhension des mécanismes en jeu, je n'arrive donc pas à mettre en place cette architecture. Est-ce que vous voyez une grosse bêtise dans mes démarches de configurations et plus particulièrement dans ce fichier replicating-content-services-context.xml ? Sachant que j'ai aussi essayé avec la configuration :
<bean id="localDriveContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
==> <value>/srv/alfresco-3.4.d/alf_data/</value>
Je vous remercie pour votre patience et intérêt en tout cas !
Thibaut.
Sources :
http://www.slideshare.net/alfresco/06192008-high-availability-clustering-with-alfresco
http://wiki.alfresco.com/wiki/Cluster_Configuration_V2.1.3_and_Later
J'ai continué à me documenter sur le sujet et un peu mieu cerné le mode de fonctionnement de Alfresco. J'estime que faire fonctionner Alfresco en Cluster serait la meilleur option disponible pour ce que je veux faire : Les utilisateurs pourront, de où qu'ils se trouvent, télécharger et uploader (deux activités équivalentes) ce qu'ils désirent sur le serveur, avec un débit acceptable (a compter du fait que la synchro sur les données s'est faite). L'exemple cité dans le wiki me semble donc très approprié, et je souhaiterais déjà le faire marcher en environnement de test. Bon comme beaucoup de choses en informatique, ça marche rarement du premier coup !
Pour situer rapidement le contexte, deux machines virtuelles tournent sous CentOS 5.6 à jour, sans serveur graphique, sur le même sous réseau IP.
OS : CentOS 5.6Sur chacunes, j'ai installé Alfresco Community 3.4.d, en gardant les paramètres par défaut et ne faisant pas de bidouilles particulières, installation standart donc.
Alfresco : Community 3.4.d
DB : MySQL
Réseau IP : 192.168.0.162 et 192.168.0.161, netmask : 255.255.255.224 (Netmask correspond au réseau 192.168.0.160 ==> 192.168.0.192)
Serveur A : 192.168.0.161 = "alfresco3"
Serveur B : 192.168.0.162 = "alfresco2"
L'installation est faite dans ce répertoire : /srv/alfresco-3.4.d/ et j'utilise MySQL comme DB (la DB fournie par défaut, encore une fois).
Tout premièrement, j'ai crée un répertoire que je considère comme contenant le contenu partagé sur chaque serveur à cet emplacement : /share/alfresco-3.4.d/alf_data/
Sur le serveur 192.168.0.162 j'ai monté le répertoir /share/alfresco-3.4.d/alf_data dans /share/alfresco-3.4.d/alf_data avec NFS :
/etc/exports
# fsid=0 signifie que c'est le repertoire root/share/ alfresco2/255.255.255.224(rw,fsid=0,root_squash,async)/share/alfresco-3.4.d/alf_data/ alfresco2/255.255.255.224(rw,root_squash,async)
==>[thibaut@alfresco3 ~]$ sudo mount -t nfs4 alfresco3:/alfresco-3.4.d/alf_data/ /share/alfresco-3.4.d/alf_data/
Une fois cette configuration de départ faite, j'ai suivit le wiki sur les configurations. A ce stage, les login, upload de fichiers marchent parfaitement sur chacun des serveurs. Les évènements sont loggés dans la db ( select * from alf_content_data ; ). Je commence donc avec ce premier fichier modifié pour spécifier la synchronisation des index lucenes :
/srv/alfresco-3.4.d/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/repository.properties
Repository configurationrepository.name=alfresco3# Directory configurationdir.root=./alf_datadir.contentstore=${dir.root}/contentstoredir.contentstore.deleted=${dir.root}/contentstore.deleteddir.auditcontentstore=${dir.root}/audit.contentstore# The location for lucene index filesdir.indexes=${dir.root}/lucene-indexes# The location for index backupsdir.indexes.backup=${dir.root}/backup-lucene-indexes# The location for lucene index locksdir.indexes.lock=${dir.indexes}/locks# Is the JBPM Deploy Process Servlet enabled?# Default is false. Should not be enabled in production environments as the# servlet allows unauthenticated deployment of new workflows.system.workflow.deployservlet.enabled=false# ######################################### ## Index Recovery and Tracking Configuration ## ######################################### ### Recovery types are:# NONE: Ignore# VALIDATE: Checks that the first and last transaction for each store is represented in the indexes# AUTO: Validates and auto-recovers if validation fails# FULL: Full index rebuild, processing all transactions in order. The server is temporarily suspended.index.recovery.mode=VALIDATE# FULL recovery continues when encountering errorsindex.recovery.stopOnError=falseindex.recovery.stopOnError=falseindex.recovery.maximumPoolSize=5# Set the frequency with which the index tracking is triggered.# For more information on index tracking in a cluster:# http://wiki.alfresco.com/wiki/High_Availability_Configuration_V1.4_to_V2.1#Version_1.4.5.2C_2.1.1_an...# By default, this is effectively never, but can be modified as required.# Examples:# Never: * * * * * ? 2099# Once every five seconds: 0/5 * * * * ?# Once every two seconds : 0/2 * * * * ?# See http://www.quartz-scheduler.org/docs/tutorials/crontrigger.htmlindex.tracking.cronExpression=0/5 * * * * ?index.tracking.adm.cronExpression=${index.tracking.cronExpression}index.tracking.avm.cronExpression=${index.tracking.cronExpression}# Other properties.index.tracking.maxTxnDurationMinutes=10index.tracking.reindexLagMs=1000index.tracking.maxRecordSetSize=1000index.tracking.maxTransactionsPerLuceneCommit=100index.tracking.disableInTransactionIndexing=false# Index tracking information of a certain age is cleaned out by a scheduled job.# Any clustered system that has been offline for longer than this period will need to be seeded# with a more recent backup of the Lucene indexes or the indexes will have to be fully rebuilt.# Use -1 to disable purging. This can be switched on at any stage.index.tracking.minRecordPurgeAgeDays=30# Reindexing of missing content is by default 'never' carried out.# The cron expression below can be changed to control the timing of this reindexing.# Users of Enterprise Alfresco can configure this cron expression via JMX without a server restart.# Note that if alfresco.cluster.name is not set, then reindexing will not occur.index.reindexMissingContent.cronExpression=* * * * * ? 2099# Change the failure behaviour of the configuration checkersystem.bootstrap.config_check.strict=true# The name of the cluster# Leave this empty to disable cluster entryalfresco.cluster.name=alftest[…]
Ce qui semble important à mes yeux dans ce fichier : index.tracking.cronExpression=0/5 * * * * ?
index.recovery.mode=VALIDATE sur alfresco3
index.recovery.mode=FULL sur alfresco2
alfresco.cluster.name=alftest
J'ai ensuite modifié le second fichier spécifié dans le wiki pour la replication du contenu
/srv/alfresco-3.4.d/tomcat/shared/classes/alfresco/extension/replicating-content-services-context.xml
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'><beans> <!– This file is not included in the application context by default. If you include this file, please ensure that you review the sample beans contained here. –> <bean id="localDriveContentStore" class="org.alfresco.repo.content.filestore.FileContentStore"> <constructor-arg> <value>./alf_data/</value> </constructor-arg> </bean> <bean id="networkContentStore" class="org.alfresco.repo.content.filestore.FileContentStore"> <constructor-arg> <value>/share/alfresco-3.4.d/alf_data/</value> </constructor-arg> </bean> <bean id="fileContentStore" class="org.alfresco.repo.content.replication.ReplicatingContentStore" > <property name="primaryStore"> <ref bean="localDriveContentStore" /> </property> <property name="secondaryStores"> <list> <ref bean="networkContentStore" /> </list> </property> <property name="inbound"> <value>true</value> </property> <property name="outbound"> <value>true</value> </property> <property name="retryingTransactionHelper"> <ref bean="retryingTransactionHelper"/> </property> </bean></beans>
Les lignes qui me semblent importantes sur ce fichier :
<bean id="localDriveContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
==> <value>./alf_data/</value>
<bean id="networkContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
==> <value>/share/alfresco-3.4.d/alf_data/</value>
Une fois ces manipulations faites, j'ai renommé le fichier ehcache-custom.xml.sample.cluster en ehcache-custom.xml mais je n'ai pas touché à son contenu. Il spécifie l'@Mcast 230.0.0.1 mais c'est la@Mcast par défaut donc je suppose que de ne pas y toucher devrait aller.
/srv/alfresco-3.4.d/tomcat/shared/classes/alfresco/extension/ehcache-custom.xml
<ehcache> <diskStore path="java.io.tmpdir"/> <!– The 'heartbeatInterval' property is the only one used for the JGroups-enabled implementation –> <cacheManagerPeerProviderFactory class="org.alfresco.repo.cache.AlfrescoCacheManagerPeerProviderFactory" properties="heartbeatInterval=5000, peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446" /> <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" /> <!– To control the cache peer URLs, replace the 'cacheManagerPeerListenerFactory' with the following and set the properties statically, in alfresco-global.properties or via java -D options. Only the hostName needs to be set as the others have sensible defaults. –>[…]
Une fois ces modifications faites, j'ai d'abord démarré alfresco3 où se trouve index.recovery.mode=VALIDATE, puis alfresco2 où se trouve index.recovery.mode=FULL. Une fois ce stade atteint, Un problème majeur se pose : Impossible d'utiliser aucun des connecteurs : ftp, webdav, http. Mes étapdes de troubleshoot :
[thibaut@alfresco3 ~]$ sudo lsof -nPi | grep java
java 2545 root 17u IPv6 12220 TCP *:52036 (LISTEN)
java 2545 root 38u IPv6 12222 TCP *:8080 (LISTEN)
java 2545 root 43u IPv6 13236 TCP 127.0.0.1:39121->127.0.0.1:8080 (ESTABLISHED)
java 2545 root 44u IPv6 13228 TCP 127.0.0.1:8080->127.0.0.1:39121 (ESTABLISHED)
java 2545 root 45u IPv6 12477 TCP *:8009 (LISTEN)
java 2545 root 117u IPv6 12478 TCP 127.0.0.1:8005 (LISTEN)
java 2545 root 237u IPv6 12274 TCP *:34828 (LISTEN)
java 2545 root 247u IPv6 12295 TCP 127.0.0.1:50500 (LISTEN)
java 2545 root 248u IPv6 12296 TCP *:50508 (LISTEN)
java 2545 root 251u IPv6 12342 TCP *:38940 (LISTEN)
java 2545 root 255u IPv6 12310 TCP 127.0.0.1:33378->127.0.0.1:3306 (ESTABLISHED)
java 2545 root 256u IPv6 12312 TCP 127.0.0.1:33379->127.0.0.1:3306 (ESTABLISHED)
java 2545 root 257u IPv6 12314 TCP 127.0.0.1:33380->127.0.0.1:3306 (ESTABLISHED)
java 2545 root 258u IPv6 12316 TCP 127.0.0.1:33381->127.0.0.1:3306 (ESTABLISHED)
java 2545 root 259u IPv6 12318 TCP 127.0.0.1:33382->127.0.0.1:3306 (ESTABLISHED)
java 2545 root 260u IPv6 12320 TCP 127.0.0.1:33383->127.0.0.1:3306 (ESTABLISHED)
java 2545 root 261u IPv6 12322 TCP 127.0.0.1:33384->127.0.0.1:3306 (ESTABLISHED)
[thibaut@alfresco3 ~]$ watch tail /srv/alfresco-3.4.d/tomcat/logs/catalina.out
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
WARN : org.alfresco.wcm.client.util.impl.GuestSessionFactoryImpl - WQS unable to connect to repository: Introuvable
J'obsèrve toutes les deux secondes une nouvelle ligne dans le log de tomcat, toujours la même. J'ai été vérifier la validité du fichier wcmqs-api.properties, qui semble correct à mes yeux (on y retrouve les deux secondes) :
/srv/alfresco-3.4.d/tomcat/webapps/wcmqs/WEB-INF/classes/alfresco/wcmqs-api.properties
## WCM QS configuration properties#wcmqs.api.alfresco=http://localhost:8080/alfrescowcmqs.api.user=adminwcmqs.api.password=*******wcmqs.api.alfresco.cmis=%{wcmqs.api.alfresco}/service/cmiswcmqs.api.alfresco.webscript=%{wcmqs.api.alfresco}/service/api/#Type of asset factory to use. Either "cmis" or "webscript" (case-sensitive)wcmqs.api.assetFactoryType=webscript#wcmqs.api.assetFactoryType=cmiswcmqs.api.repositoryPollMilliseconds=2000wcmqs.api.websiteCacheSeconds=300wcmqs.api.sectionCacheSeconds=60
En analysant étape par étape mes modification, je constate que l'erreur vient probablement du fichier replicating-content-services-context.xml car lorsque je le vire, et relance le serveur, ça remarche :
[thibaut@alfresco3 ~]$ sudo mv /srv/alfresco-3.4.d/tomcat/shared/classes/alfresco/extension/replicating-content-services-context.xml /srv/alfresco-3.4.d/tomcat/shared/classes/alfresco/extension/replicating-content-services-context.xml.sample=> connexion à http://alfresco3:8080/alfresco/ fonctionne correctement.
[thibaut@alfresco3 ~]$ /etc/init.d/alfresco restart
Après relecture des tutoriaux et mes maigres tentatives de compréhension des mécanismes en jeu, je n'arrive donc pas à mettre en place cette architecture. Est-ce que vous voyez une grosse bêtise dans mes démarches de configurations et plus particulièrement dans ce fichier replicating-content-services-context.xml ? Sachant que j'ai aussi essayé avec la configuration :
<bean id="localDriveContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
==> <value>/srv/alfresco-3.4.d/alf_data/</value>
Je vous remercie pour votre patience et intérêt en tout cas !
Thibaut.
Sources :
http://www.slideshare.net/alfresco/06192008-high-availability-clustering-with-alfresco
http://wiki.alfresco.com/wiki/Cluster_Configuration_V2.1.3_and_Later
