2017-05-12 2 views
1

L'exécution de l'application jgroups à l'intérieur des conteneurs docker. Les conteneurs traversent deux nœuds (A & B) et ils sont tous connectés à l'aide du réseau Overlay Swarm.JGroups ne forme pas un cluster lors de l'exécution à l'intérieur d'un docker sur plusieurs nœuds

j'ai parlé https://docs.docker.com/engine/swarm/networking/

Voici ce que je l'ai fait et observé.

  1. Jgroup adresse de liaison est réglé sur le réseau de recouvrement IP du récipient
  2. conteneurs en cours d'exécution à l'intérieur du même noeud forment un cluster.
  3. J'utilisé nslookup pour assurer que le réseau de recouvrement IP d'un conteneur en cours d'exécution dans le nœud A est accessible par une course de conteneurs dans l'affichage noeud B
  4. docker node ls correctement les noeuds et capables de programmer les instances conteneurs avec succès.

Docker Version: Version Docker 17.03.1-ce, construire c6d412e

OS: Ubuntu 16.04.2

Cloud: AWS (Port 7946 TCP/UDP et 4789 UDP sont ouverts)

JGroups: 3.6.6

JGroups XML:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="urn:org:jgroups" 
    xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups.xsd"> 
<TCP bind_port="7600" 
    recv_buf_size="${tcp.recv_buf_size:5M}" 
    send_buf_size="${tcp.send_buf_size:5M}" 
    max_bundle_size="64K" 
    max_bundle_timeout="30" 
    use_send_queues="true" 
    sock_conn_timeout="300" 

    timer_type="new3" 
    timer.min_threads="4" 
    timer.max_threads="10" 
    timer.keep_alive_time="3000" 
    timer.queue_max_size="500" 

    thread_pool.enabled="true" 
    thread_pool.min_threads="2" 
    thread_pool.max_threads="8" 
    thread_pool.keep_alive_time="5000" 
    thread_pool.queue_enabled="true" 
    thread_pool.queue_max_size="10000" 
    thread_pool.rejection_policy="discard" 

    oob_thread_pool.enabled="true" 
    oob_thread_pool.min_threads="1" 
    oob_thread_pool.max_threads="8" 
    oob_thread_pool.keep_alive_time="5000" 
    oob_thread_pool.queue_enabled="false" 
    oob_thread_pool.queue_max_size="100" 
    oob_thread_pool.rejection_policy="discard"/> 

<JDBC_PING connection_url="jdbc:mysql://${database.host:localhost}:3306/mydb" 
      connection_username="root" 
      connection_password="root" 
      connection_driver="com.mysql.jdbc.Driver" 
      initialize_sql="CREATE TABLE JGROUPSPING (
        own_addr varchar(200) NOT NULL, 
        bind_addr varchar(200) NOT NULL, 
        created timestamp NOT NULL, 
        cluster_name varchar(200) NOT NULL, 
        ping_data varbinary(5000) DEFAULT NULL, 
        PRIMARY KEY (`own_addr`,`cluster_name`))" 
    insert_single_sql="INSERT INTO JGROUPSPING (own_addr, bind_addr, created, cluster_name, ping_data) values (?, 
    '${jgroups.bind_addr:127.0.0.1}',now(), ?, ?)" 
    delete_single_sql="DELETE FROM JGROUPSPING WHERE own_addr=? AND cluster_name=?" 
    select_all_pingdata_sql="SELECT ping_data FROM JGROUPSPING WHERE cluster_name=?" 
/> 

<MERGE3 min_interval="10000" 
     max_interval="30000"/> 
<FD_SOCK/> 
<FD timeout="3000" max_tries="3" /> 
<VERIFY_SUSPECT timeout="1500" /> 
<BARRIER /> 
<pbcast.NAKACK2 use_mcast_xmit="false" 
       discard_delivered_msgs="true"/> 
<UNICAST3 /> 
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" 
       max_bytes="4M"/> 
<pbcast.GMS print_local_addr="true" join_timeout="2000" 
      view_bundling="true"/> 
<MFC max_credits="2M" 
    min_threshold="0.4"/> 
<FRAG2 frag_size="60K" /> 
<RSVP resend_interval="2000" timeout="10000"/> 
<pbcast.STATE_TRANSFER/> 

Toute aide est appréciée

+0

semble que réseau de recouvrement qui a été utilisé i encyted. Maintenant, j'ai supprimé Encrytion et ça marche maintenant. Pourtant, je ne sais pas comment le faire fonctionner avec le cryptage. –

+0

ancien poste, mais avez-vous eu ce travail finalement? – comfytoday

+0

Bonjour @comfytoday. Je ne suis pas encore en train de l'exécuter sans cryptage –

Répondre

0

Vous devez probablement utiliser hôte en réseau (--net=host) ou utiliser external_addr dans le transport en plus de bind_addr.

Une alternative si vous avez DNS disponible est DNS_PING [2].

Pour plus de détails, consultez [1].

[1] https://github.com/belaban/jgroups-docker

[2] http://www.jgroups.org/manual4/index.html#_dns_ping

+0

Le réseau hôte n'est pas une option car les nœuds s'étendent sur plusieurs hôtes. essayé avec external_addr aussi bien. –