IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Activemq clustering kahadb zookeeper


Sujet :

Développement Web en Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Activemq clustering kahadb zookeeper
    Bonjour à tous,
    Je suis novice en la matière et je tente d'implémenter une solution Apache ActiveMQ 5.14.1 couplée avec Zookeeper 3.4.9. Mon problème : configurer un cluster ActiveMQ avec kahadb puisque les autres solutions sont aujourd'hui dépréciées d'après le site d'apache lui même. Je tente donc de suivre la documentation officielle (qui semble avoir un bug au niveau de l'affichage de ha.xml puisqu'il ne s'affiche pas
    The actual contents of the configuration file follows:
    Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20
    :/) : http://activemq.apache.org/kahadb-master-slave.html

    J'ai trois VM activemq01, activemq02 et activemq03 sur lesquelles j'ai installé une instance d'activemq et une instance de zookeeper. J'ai donc :
    activemq01 : activemq-a et zookeeper-a
    activemq02 : activemq-b et zookeeper-b
    activemq03 : activemq-c et zookeeper-c
    L'objectif étant bien sur de faire de la haute dispo pour qu'en cas de crash d'une instance d'activemq une autre prenne le relais. Au niveau de zookeeper, j'ai fais mes tests, l'une des trois instances est leader et les deux autres follower et si le leader tombe un des follower est bien élu comme leader, pas de problème. Par contre, impossible de clusteriser les instances d'activemq...

    Je démarre mes trois instances activemq sans problème, mais les queues et topics existants sur activemq-a ne se répliquent pas sur -b et -c. J'ai bien mes trois fichiers de configuration : ha.xml, ha-broker.xml et activemq.xml mais j'ai un gros doute sur ha.xml et ha-broker.xml (que j'ai nommé ha-activemq-a.xml/ha-activemq-c.xml/ha-activemq-c.xml puisque le site d'apache n'en donne pas d'exemples. Je vous les mets à la suite pour avoir votre avis.

    activemq.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <!-- START SNIPPET: example -->
    <beans
      xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
    
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <value>file:${activemq.conf}/credentials.properties</value>
            </property>
        </bean>
        <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
              lazy-init="false" scope="singleton"
              init-method="start" destroy-method="stop">
        </bean>
        <broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-a" persistent="true">
            <destinationPolicy>
                <policyMap>
                  <policyEntries>
                    <policyEntry topic=">" >
                      <pendingMessageLimitStrategy>
                        <constantPendingMessageLimitStrategy limit="1000"/>
                      </pendingMessageLimitStrategy>
                    </policyEntry>
                  </policyEntries>
                </policyMap>
            </destinationPolicy>
            <managementContext>
                <managementContext createConnector="false"/>
            </managementContext>
            <persistenceAdapter>
                <kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
            </persistenceAdapter>
              <systemUsage>
                <systemUsage>
                    <memoryUsage>
                        <memoryUsage percentOfJvmHeap="70" />
                    </memoryUsage>
                    <storeUsage>
                        <storeUsage limit="2 gb"/>
                    </storeUsage>
                    <tempUsage>
                        <tempUsage limit="1 gb"/>
                    </tempUsage>
                </systemUsage>
            </systemUsage>
            <transportConnectors>
                <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
                <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            </transportConnectors>
            <shutdownHooks>
                <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
            </shutdownHooks>
        </broker>
        <import resource="jetty.xml"/>
    
    </beans>
    <!-- END SNIPPET: example -->
    Le même sur -b et -c avec les noms de broker qui vont bien.

    ha-broker.xml (j'ai ajouté la propriété start, et supprimé le bloc persistanceAdaptater comme indiqué sur le site d'apache) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <!-- START SNIPPET: example -->
    <beans
      xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <value>file:${activemq.conf}/credentials.properties</value>
            </property>
        </bean>
        <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
              lazy-init="false" scope="singleton"
              init-method="start" destroy-method="stop">
        </bean>
        <broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-a" persistent="true" start="false">
            <destinationPolicy>
                <policyMap>
                  <policyEntries>
                    <policyEntry topic=">" >
                      <pendingMessageLimitStrategy>
                        <constantPendingMessageLimitStrategy limit="1000"/>
                      </pendingMessageLimitStrategy>
                    </policyEntry>
                  </policyEntries>
                </policyMap>
            </destinationPolicy>
            <managementContext>
                <managementContext createConnector="false"/>
            </managementContext>
              <systemUsage>
                <systemUsage>
                    <memoryUsage>
                        <memoryUsage percentOfJvmHeap="70" />
                    </memoryUsage>
                    <storeUsage>
                        <storeUsage limit="2 gb"/>
                    </storeUsage>
                    <tempUsage>
                        <tempUsage limit="1 gb"/>
                    </tempUsage>
                </systemUsage>
            </systemUsage>
            <transportConnectors>
                <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
                <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            </transportConnectors>
            <shutdownHooks>
                <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
            </shutdownHooks>
        </broker>
        <import resource="jetty.xml"/>
    </beans>
    <!-- END SNIPPET: example -->
    Et enfin le ha.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
      <kahadbReplicationBroker xmlns="http://activemq.apache.org/schema/kahadb">
            <replicationService>
             <kahadbReplication
              directory="/opt/activemq/data/kahadb"
              brokerURI="xbean:ha-activemq-a.xml"
              uri="kdbr://localhost:6001"
              minimumReplicas="0">
    
            <cluster>
              <zookeeperCluster uri="zk://DNS_activemq01:2181;zk://DNS_activemq02:2181/;zk://DNS_activemq03:2181">
            </cluster>
    
            </kahadbReplication>
           </replicationService>
      </kahadbReplicationBroker>
    </beans>
    Mes connaissances sur le sujet s'arrêtant là, j'ai grandement besoin d'un coup de main (un p'tit miracle de Noël ?!). Merci d'avance à vous et bonnes fêtes de fin d'année.
    HappyBlue.

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Effectivement la solution zookeeper + leveldb en persistence shared a des soucis et ne semble pas être dans les priorités des devs.

    Comme alternative, tu peux mettre ton kahadb sur un nfs partagé entre les 3, mais il devient donc un single point of failure, sinon peut être avec une db relationelle via jdbc qui supporte la réplication temps réél.
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  3. #3
    Candidat au Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Pas de miracle alors...
    Citation Envoyé par yildiz-online Voir le message
    Effectivement la solution zookeeper + leveldb en persistence shared a des soucis et ne semble pas être dans les priorités des devs.

    Comme alternative, tu peux mettre ton kahadb sur un nfs partagé entre les 3, mais il devient donc un single point of failure, sinon peut être avec une db relationelle via jdbc qui supporte la réplication temps réél.
    Merci pour ta réponse yildiz-online. Le partage ne me convient pas en effet je cherche bien à mettre en place de la haute disponibilité. Je vais voir pour une réplication via jdbc/oracle du coup, mais il me semble avoir lu de part et d'autre que les performances n'étaient pas les meilleures avec ce système.

    Bonne année et encore merci.

  4. #4
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Si tu ne veux pas de partage, toujours pas de miracle mais tu peux avoir un kahadb par node du cluster, qui lui est partagé entre plusieurs activemq master-slave, tu relies les nodes via un network of broker, et tu as haute dispo en actif actif(pour les perfs), par contre si une node complète tombe, faut attendre son redémarrage pour consommer les messages.
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  5. #5
    Candidat au Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut I am getting error when starting the activemq
    Hi Happyblue,

    I am also having the similar requirement to try the KahaDB replication.
    When i tried your procedure, I am getting the error when starting the activemq due to the un-availability of the xmlns 'http://activemq.apache.org/schema/kahadb"'

    Can you pls post the entire content of the ha.xml.

  6. #6
    Candidat au Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Since i changed everything
    Citation Envoyé par mgkrishnan Voir le message
    Hi Happyblue,

    I am also having the similar requirement to try the KahaDB replication.
    When i tried your procedure, I am getting the error when starting the activemq due to the un-availability of the xmlns 'http://activemq.apache.org/schema/kahadb"'

    Can you pls post the entire content of the ha.xml.
    Hi,
    (i apologize, although my English isn't too bad I am prone to make mistakes).
    I'm so sorry but i changed all my conf since i wrote this post.
    Now i use a shared directory "/app/activemq/data/kahadb" (with mount, and i declare it in my two server in activemq.conf) to stock my kahadb. Like this my two instances of activemq can read&write in the same directory and they can be master/slave.

    In my activemq.conf :
    <persistenceAdapter>
    <kahaDB directory="yourshareddirectoryhere"/>
    </persistenceAdapter>

    I hope this had helps you.
    Have an happy happy blue day

  7. #7
    Candidat au Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Thank you happy blue
    Hi Happy blue,

    Thanks you so much for your response.
    Unfortunately i do not have the option to use the shared option!.

    Need to explore the JDBC option, however this may not be as performant as KahaDB.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Peut-on faire du cluster avec winXP ?
    Par wikers dans le forum Windows XP
    Réponses: 37
    Dernier message: 02/06/2009, 11h13
  2. Cluster, base de données et schéma
    Par jarrux dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 31/12/2004, 04h12
  3. Définition du clustering
    Par abdou.sahraoui dans le forum Administration
    Réponses: 5
    Dernier message: 04/05/2004, 09h31
  4. Cluster sous Débian 3.0 (Woody)
    Par regular dans le forum Développement
    Réponses: 3
    Dernier message: 06/08/2003, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo