Aerospike Hearbeat通话停留在TIME_WAIT

问题描述 投票:1回答:1

我正在尝试在GCP上设置Aerospike集群。我正在使用Core OS和Docker运行Aerospike守护程序。

我在aerospike.conf中遵循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_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_WAIT状态中有数百个此类呼叫。

我无法弄清楚为什么这些调用被卡在TIME_WAIT中并且没有被转发到Docker容器。

docker google-cloud-platform aerospike
1个回答
0
投票

看来您正在两个不同的节点上运行两个容器。并在aerospike.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,则可能需要运行外部键值存储(例如consul等)以通过覆盖网络进行发现。

https://www.aerospike.com/docs/deploy_guides/docker/networking/index.html

https://docs.docker.com/network/overlay-standalone.swarm/

https://docs.docker.com/network/overlay/

© www.soinside.com 2019 - 2024. All rights reserved.