Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker Aerospike Hearbeat呼叫卡在时间上\u等待_Docker_Google Cloud Platform_Aerospike - Fatal编程技术网

Docker Aerospike Hearbeat呼叫卡在时间上\u等待

Docker Aerospike Hearbeat呼叫卡在时间上\u等待,docker,google-cloud-platform,aerospike,Docker,Google Cloud Platform,Aerospike,我正试图在GCP上设置Aerospike群集。我正在使用核心操作系统和Docker运行Aerospike守护进程 在as-node-01 service { service-threads 10 } network { service { address any port 3000 access-add

我正试图在GCP上设置Aerospike群集。我正在使用核心操作系统和Docker运行Aerospike守护进程

as-node-01

    service {
        service-threads 10

    }               

    network {                

        service {
            address any
            port 3000
            access-address as-node-01
        }           
        fabric {
            address any
            port 3001

        }            
        info {
            address any
            port 3003
        }              
        heartbeat {
            mode mesh
            address as-node-01
            port 3002
            mesh-seed-address-port as-node-02 3002
            mesh-seed-address-port as-node-01 3002

        }         
    }


    logging {
        console { 
            context any info
        }
    }               


    namespace rte {       
    memory-size 4G           
        replication-factor 1     
        high-water-memory-pct 60 

        stop-writes-pct 90       
        default-ttl 0            

        storage-engine memory    
    }
下面是as-node-02的

    service {
        service-threads 10

    }               

    network {                

        service {
            address any
            port 3000
            access-address as-node-02
        }           
        fabric {
            address any
            port 3001

        }            
        info {
            address any
            port 3003
        }              
        heartbeat {
            mode mesh
            address as-node-01
            port 3002
            mesh-seed-address-port as-node-01 3002
            mesh-seed-address-port as-node-02 3002

        }         
    }


    logging {
        console { 
            context any info
        }
    }               


    namespace rte {       
    memory-size 4G           
        replication-factor 1     
        high-water-memory-pct 60 

        stop-writes-pct 90       
        default-ttl 0            

        storage-engine memory    
    }
我正在使用带有以下命令的
aerospike:4.6.0.4
docker图像

docker run -d -v `pwd`:/opt/aerospike/etc --name aerospike -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike asd --foreground --config-file /opt/aerospike/etc/aerospike.conf
当我在两个节点上启动守护进程时,我在日志内容中看到以下内容

Nov 02 2019 07:20:23 GMT: WARNING (socket): (socket.c:959) (repeated:67) Error while connecting socket to 10.160.0.14:3002
Nov 02 2019 07:20:23 GMT: WARNING (hb): (hb.c:4882) (repeated:67) could not create heartbeat connection to node {10.160.0.14:3002}
Nov 02 2019 07:20:23 GMT: WARNING (socket): (socket.c:900) (repeated:67) Error while connecting: 111 (Connection refused)
然后,我尝试使用
netstat
查看出了什么问题,我看到心跳调用卡在
TIME\u WAIT
状态

tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39890        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:38662        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39998        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39878        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39716        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39252        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39872        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39776        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:38796        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:38668        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:38844        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39668        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39120        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39138        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39174        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:38740        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39614        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39000        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39318        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:38982        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39584        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39420        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:38758        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39656        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39866        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39482        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39222        TIME_WAIT  
tcp6       0      0 as-node-01.asia-so:3002 172.17.0.2:39818        TIME_WAIT  
TIME\u WAIT
状态下有数百个这样的调用


我无法理解为什么这些调用被卡在时间等待中,无法转发到docker容器。

看起来您在两个不同的节点上运行两个容器。 并使用
aerospeck.conf
中的节点(主机)名称

heartbeat {
            mode mesh
            address as-node-01
            port 3002
            mesh-seed-address-port as-node-01 3002
            mesh-seed-address-port as-node-02 3002
}
  • address as-node-01
    指向一个接口,如果容器不在主机网络上,该接口将无法在容器内访问。这就是为什么
    --network=host
    为您工作的原因
  • 如果未使用
    --net=host
    ,则默认情况下容器位于专用网络上,无法ping其他主机(节点)或连接到其他主机上的容器
因此,为了解决这个问题,您可能需要一个覆盖网络(例如 多主机网络)。然后,您可以简单地使用容器的 aerospike
mesh
配置中的专用IP

你可以试试docker swarm。如果不是docker swarm,您可能需要运行一个外部键值存储(如
concur
等),以便使用覆盖网络进行发现


除了@SP Kesan所说的

看起来您对指向as-node-01的两个节点使用了相同的地址绑定。(地址as-node-01)最佳做法是使用接口名称(即:eth0或eth1等)。这也适用于覆盖网络,并允许您指定覆盖网络的接口名称

请参阅:

如果容器驻留在同一主机上,则仅更改地址绑定应该有助于解决此问题。由于容器位于不同的主机上,您可以使用覆盖网络进行节点间通信,也可以使用--net主机并利用主机的网络接口


        service {
            address any
            port 3000
            access-address as-node-01
        }           
     ...     
        heartbeat {
            mode mesh
            address as-node-01
            port 3002


看起来两个hb地址绑定都指向地址as-node-01。可能希望改用接口的名称。ie:地址eth0或地址ens01,或者您希望aerospike为容器中的心跳绑定到哪个接口名称。这是一个复制粘贴错误。但我会尝试将其更改为eth0。@lvolmar我为docker容器将网络更改为主机(
--net host
),然后事情开始对我起作用。我不太清楚为什么端口
3000
在默认网桥网络上工作,而不是
3002
。将其更改为eth0也有帮助吗?或者是-net主机的改变迫使容器使用您的主机接口比-net主机更好的解决方案可能是使用覆盖网络在物理节点之间进行通信。请看

 service {
            address any
            port 3000
            access-address as-node-02
        }           
...            
        heartbeat {
            mode mesh
            address as-node-01
            port 3002