gpt4 book ai didi

docker - JGroups 在跨多个节点的 docker 内运行时不会形成集群

转载 作者:行者123 更新时间:2023-12-02 20:15:11 25 4
gpt4 key购买 nike

我在 docker 容器中运行 jgroups 应用程序。容器跨两个节点(A 和 B)运行,它们都使用 docker swarm 模式覆盖网络连接。

我提到了https://docs.docker.com/engine/swarm/networking/

这是我所做和观察到的。

  • jgroup绑定(bind)地址设置为容器的overlay网络IP
  • 在同一节点内运行的容器正在形成一个集群。
  • 我用了nslookup确保节点 A 中运行的容器的覆盖网络 IP 可以被节点 B 中运行的容器访问
  • docker node ls正确显示节点并能够成功调度容器实例。

  • Docker 版本:Docker 版本 17.03.1-ce,构建 c6d412e

    操作系统:Ubuntu 16.04.2

    云:AWS(开放 7946 TCP/UDP 和 4789 UDP 端口)

    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/>

    任何帮助表示赞赏

    最佳答案

    您可能需要使用主机网络( --net=host )或使用 external_addr在运输中除了bind_addr .

    如果您有可用的 DNS,另一种选择是 DNS_PING [2]。

    有关详细信息,请查看 [1]。

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

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

    关于docker - JGroups 在跨多个节点的 docker 内运行时不会形成集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943701/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com