TarsCloud / Tars

Tars is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented hosting-service via flexible schedule.
BSD 3-Clause "New" or "Revised" License
9.78k stars 2.08k forks source link

【问题】:我在局域网的另一台机器76部署了tarsnode,在57:3000的节点列表无法联通76 #898

Closed Lands-1203 closed 7 months ago

Lands-1203 commented 7 months ago

image image 我应该怎么排查这个问题

#57的主节点配置
version: "3"
services:

  tars-mysql:
    image: mysql:5.6
    network_mode: "host"
    environment:
      MYSQL_ROOT_PASSWORD: "xxx"
      MYSQL_TCP_PORT: 3310
    restart: always
    volumes:
      - ~/app/tars/framework-mysql:/var/lib/mysql
      - /etc/localtime:/etc/localtime

  tars-framework:
    image: tarscloud/framework:v3.0.1
    network_mode: "host"
    environment:
      MYSQL_HOST: "10.10.141.57"
      MYSQL_ROOT_PASSWORD: "xxx"
      MYSQL_PORT: 3310
      TZ: "Asia/Shanghai"  # 设置容器内时区为亚洲/上海时区
      REBUILD: "false"
      INET: enp2s0
      SLAVE: "false"
    restart: always
    volumes:
      - ~/app/tars/framework:/data/tars
      - /etc/localtime:/etc/localtime
    depends_on:
      - tars-mysql

tarsnode是使用docker-compose安装的

# 76的node配置
version: "3"
services:
  tars-node:
    image: tarscloud/tars-node:latest
    network_mode: "host"
    environment:
      INET: enp2s0
      WEB_HOST: "http://10.10.141.57:3000"
    restart: always
    volumes:
      - ~/app/tars:/data/tars
      - /etc/localtime:/etc/localtime
ruanshudong commented 7 months ago

虚拟网络, 跨机器了?

Lands-1203 commented 7 months ago

虚拟网络, 跨机器了?

我这个是虚拟机网络吗? 我是两台局域网的实体机

ruanshudong commented 7 months ago

docker虚拟网络, 不同机器不通, 你可以先了解一下docker, 如果有多台机器, 不如就用--net=host

Lands-1203 commented 7 months ago

network_mode: "host"

我的这个docker-compose配置是使用的host模式吧?

Lands-1203 commented 7 months ago

并且我并没有使用docker开启虚拟网段

ruanshudong commented 7 months ago

你这个ip是机器实际的ip么?

Lands-1203 commented 7 months ago

tars主节点局域网IP:10.10.141.57 mysql和framework都在这个机器的docker node节点局域网IP:10.10.145.76

Lands-1203 commented 7 months ago

image image

ruanshudong commented 7 months ago

那不应该不通, 只能检查一下tarsnode日志看看

Lands-1203 commented 7 months ago

这个是tarsnode的docker日志

docker logs dedd4ac314b8
--2023-11-22 10:28:08--  http://10.10.141.57:3000/get_tarsnode?ip=&runuser=root&registryAddress=
Connecting to 10.10.141.57:3000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3458 (3.4K) [text/plain]
Saving to: 'get_tarsnode.sh'

     0K ...                                                   100% 2.47G=0s

2023-11-22 10:28:08 (2.47 GB/s) - 'get_tarsnode.sh' saved [3458/3458]

get_tarsnode.sh: --------------------------------------------------------
#!/bin/bash

#/**
# * Tencent is pleased to support the open source community by making Tars available.
# *
# * Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved.
# *
# * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
# * in compliance with the License. You may obtain a copy of the License at
# *
# * https://opensource.org/licenses/BSD-3-Clause
# *
# * Unless required by applicable law or agreed to in writing, software distributed
# * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
# * CONDITIONS OF ANY KIND, either express or implied. See the License for the
# * specific language governing permissions and limitations under the License.
# */

echo "runuser: root, webHost:http://10.10.141.57:3000, machine_ip:10.10.145.76, registryAddress:tcp -h 10.10.141.57 -p 17890"

OSNAME=`uname`
OS=1

if [[ "$OSNAME" == "Darwin" ]]; then
    OS=2
elif [[ "$OSNAME" == "Windows_NT" ]]; then
    OS=3
else
    OS=1
fi

if [ $OS != 3 ]; then
    TARS_PATH=/usr/local/app/tars
else
    TARS_PATH=c:/tars-install/tars
fi

if [ $OS != 3 ]; then
    if [ ! -d "/usr/local/app" ]; then
        echo "create tars base path: "
        mkdir -p /data/app
        ln -s /data/app /usr/local/app
    fi
fi

mkdir -p ${TARS_PATH}

rm -rf tarsnode.tgz

curl -O http://10.10.141.57:3000/files/tarsnode.tgz

#休息1s, 避免下载的文件没有写成功
sleep 1

if [ ! -f "tarsnode.tgz" ]; then
    echo "Tars node download error: http://10.10.141.57:3000/files/tarsnode.tgz"
    exit
fi

if [ 'tcp -h 10.10.141.57 -p 17890' == '' ]; then
    echo "registryAddress is empty."
    exit
fi

if [ '10.10.145.76' == '' ]; then
    echo "machine_ip is empty."
    exit
fi

tar zxf tarsnode.tgz

if [ $OS != 3 ]; then
    if [ -f ${TARS_PATH}/tarsnode/util/stop.sh ]; then
        ${TARS_PATH}/tarsnode/util/stop.sh
    fi
else
    if [ -f ${TARS_PATH}/tarsnode/util/stop.bat ]; then
        ${TARS_PATH}/tarsnode/util/stop.bat
    fi
fi

cp -rf tarsnode ${TARS_PATH}/

cd ${TARS_PATH}

echo "local machine ip:[10.10.145.76] succ"

echo "tars registry:" tcp -h 10.10.141.57 -p 17890

sed -i "s/localip.tars.com/10.10.145.76/g" ${TARS_PATH}/tarsnode/conf/tars.tarsnode.config.conf

sed -i "s/registryAddress/tcp -h 10.10.141.57 -p 17890/g" ${TARS_PATH}/tarsnode/conf/tars.tarsnode.config.conf

if [ $OS != 3 ]; then
    sed -i "s/registryAddress/tcp -h 10.10.141.57 -p 17890/g" ${TARS_PATH}/tarsnode/util/execute.sh
    sed -i "s/localip.tars.com/10.10.145.76/g" ${TARS_PATH}/tarsnode/util/execute.sh
else
    sed -i "s/registryAddress/tcp -h 10.10.141.57 -p 17890/g" ${TARS_PATH}/tarsnode/util/execute.bat
    sed -i "s/localip.tars.com/10.10.145.76/g" ${TARS_PATH}/tarsnode/util/execute.bat
fi
echo "install tarsnode succ, start tarsnode"

if [ $OS != 3 ]; then
    id -u root &>/dev/null
    if [ $? != 0 ]; then
        useradd root
    fi
    chown -R root:root /usr/local/app/*;

    ${TARS_PATH}/tarsnode/util/stop.sh

    uid=`whoami`
    if [ "$uid" != "root" ] && [ "root" != "" ]; then
        echo "su $runuser: now uid:$uid, runuser:$runuser"
        su - $runuser -c "sh ${TARS_PATH}/tarsnode/util/start.sh"
    else
        sh ${TARS_PATH}/tarsnode/util/start.sh
    fi
else
    ${TARS_PATH}/tarsnode/util/start.bat
fi

INFO=`ps -e | grep tarsnode`

if [[ "${INFO}" != "" ]]; then
    echo 'Tars node installed success'
else
    echo 'Tars node installed failed'
fi
runuser: root, webHost:http://10.10.141.57:3000, machine_ip:10.10.145.76, registryAddress:tcp -h 10.10.141.57 -p 17890
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1323k    0 1323k    0     0  92.3M      0 --:--:-- --:--:-- --:--:-- 92.3M
cp: cannot overwrite non-directory '/usr/local/app/tars/tarsnode/data' with directory 'tarsnode/data'
local machine ip:[10.10.145.76] succ
tars registry: tcp -h 10.10.141.57 -p 17890
install tarsnode succ, start tarsnode
start /usr/local/app/tars/tarsnode/bin/tarsnode --nodeid=10.10.145.76 --config=/usr/local/app/tars/tarsnode/conf/tars.tarsnode.config.conf
Tars node installed success
tarsnode.conf: --------------------------------------------------------
<tars>
    <application>
        enableset=n
        setdivision=NULL
        <client>
            async-invoke-timeout=5000
            refresh-endpoint-interval=60000
            report-interval=60000
            stat=tars.tarsstat.StatObj
            property=tars.tarsproperty.PropertyObj
            modulename=tars.tarsnode
            locator=tars.tarsregistry.QueryObj@tcp -h 10.10.141.57 -p 17890
            sync-invoke-timeout=6000
            asyncthread=3
        </client>
        <server>
            logsize=10M
            config=tars.tarsconfig.ConfigObj
            notify=tars.tarsnotify.NotifyObj
            deactivating-timeout=3000
            app=tars
            server=tarsnode
            localip=10.10.145.76
            local=tcp -h 127.0.0.1 -p 19387 -t 10000
            basepath=/usr/local/app/tars/tarsnode/data
            datapath=/usr/local/app/tars/tarsnode/data
            logpath=/usr/local/app/tars/app_log
            logLevel=DEBUG
            <NodeAdapter>
                endpoint=tcp -h 10.10.145.76 -p 19385 -t 60000
                allow
                maxconns=1024
                threads=5
                queuecap=10000
                queuetimeout=4000
                servant=tars.tarsnode.NodeObj
            </NodeAdapter>
            <ServerAdapter>
                endpoint=tcp -h 10.10.145.76 -p 19386 -t 60000
                allow
                maxconns=1024
                threads=5
                queuecap=10000
                queuetimeout=4000
                servant=tars.tarsnode.ServerObj
            </ServerAdapter>
        </server>
    </application>
    <node>
            registryObj=tars.tarsregistry.RegistryObj
            <keepalive>
                heartTimeout=45
                monitorInterval=3
                synStatInterval=60
            </keepalive>
            <hashmap>
                file=serversCache.dat
                minBlock=500
                maxBlock=500
                factor=1
                size=10M
            </hashmap>
    </node>
</tars>
install tarsnode succ, check tarsnode alive
--2023-11-22 10:33:24--  http://10.10.141.57:3000/get_tarsnode?ip=&runuser=root&registryAddress=
Connecting to 10.10.141.57:3000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3458 (3.4K) [text/plain]
Saving to: 'get_tarsnode.sh'

     0K ...                                                   100% 2.18G=0s

2023-11-22 10:33:24 (2.18 GB/s) - 'get_tarsnode.sh' saved [3458/3458]

get_tarsnode.sh: --------------------------------------------------------
#!/bin/bash

#/**
# * Tencent is pleased to support the open source community by making Tars available.
# *
# * Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved.
# *
# * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
# * in compliance with the License. You may obtain a copy of the License at
# *
# * https://opensource.org/licenses/BSD-3-Clause
# *
# * Unless required by applicable law or agreed to in writing, software distributed
# * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
# * CONDITIONS OF ANY KIND, either express or implied. See the License for the
# * specific language governing permissions and limitations under the License.
# */

echo "runuser: root, webHost:http://10.10.141.57:3000, machine_ip:10.10.145.76, registryAddress:tcp -h 10.10.141.57 -p 17890"

OSNAME=`uname`
OS=1

if [[ "$OSNAME" == "Darwin" ]]; then
    OS=2
elif [[ "$OSNAME" == "Windows_NT" ]]; then
    OS=3
else
    OS=1
fi

if [ $OS != 3 ]; then
    TARS_PATH=/usr/local/app/tars
else
    TARS_PATH=c:/tars-install/tars
fi

if [ $OS != 3 ]; then
    if [ ! -d "/usr/local/app" ]; then
        echo "create tars base path: "
        mkdir -p /data/app
        ln -s /data/app /usr/local/app
    fi
fi

mkdir -p ${TARS_PATH}

rm -rf tarsnode.tgz

curl -O http://10.10.141.57:3000/files/tarsnode.tgz

#休息1s, 避免下载的文件没有写成功
sleep 1

if [ ! -f "tarsnode.tgz" ]; then
    echo "Tars node download error: http://10.10.141.57:3000/files/tarsnode.tgz"
    exit
fi

if [ 'tcp -h 10.10.141.57 -p 17890' == '' ]; then
    echo "registryAddress is empty."
    exit
fi

if [ '10.10.145.76' == '' ]; then
    echo "machine_ip is empty."
    exit
fi

tar zxf tarsnode.tgz

if [ $OS != 3 ]; then
    if [ -f ${TARS_PATH}/tarsnode/util/stop.sh ]; then
        ${TARS_PATH}/tarsnode/util/stop.sh
    fi
else
    if [ -f ${TARS_PATH}/tarsnode/util/stop.bat ]; then
        ${TARS_PATH}/tarsnode/util/stop.bat
    fi
fi

cp -rf tarsnode ${TARS_PATH}/

cd ${TARS_PATH}

echo "local machine ip:[10.10.145.76] succ"

echo "tars registry:" tcp -h 10.10.141.57 -p 17890

sed -i "s/localip.tars.com/10.10.145.76/g" ${TARS_PATH}/tarsnode/conf/tars.tarsnode.config.conf

sed -i "s/registryAddress/tcp -h 10.10.141.57 -p 17890/g" ${TARS_PATH}/tarsnode/conf/tars.tarsnode.config.conf

if [ $OS != 3 ]; then
    sed -i "s/registryAddress/tcp -h 10.10.141.57 -p 17890/g" ${TARS_PATH}/tarsnode/util/execute.sh
    sed -i "s/localip.tars.com/10.10.145.76/g" ${TARS_PATH}/tarsnode/util/execute.sh
else
    sed -i "s/registryAddress/tcp -h 10.10.141.57 -p 17890/g" ${TARS_PATH}/tarsnode/util/execute.bat
    sed -i "s/localip.tars.com/10.10.145.76/g" ${TARS_PATH}/tarsnode/util/execute.bat
fi
echo "install tarsnode succ, start tarsnode"

if [ $OS != 3 ]; then
    id -u root &>/dev/null
    if [ $? != 0 ]; then
        useradd root
    fi
    chown -R root:root /usr/local/app/*;

    ${TARS_PATH}/tarsnode/util/stop.sh

    uid=`whoami`
    if [ "$uid" != "root" ] && [ "root" != "" ]; then
        echo "su $runuser: now uid:$uid, runuser:$runuser"
        su - $runuser -c "sh ${TARS_PATH}/tarsnode/util/start.sh"
    else
        sh ${TARS_PATH}/tarsnode/util/start.sh
    fi
else
    ${TARS_PATH}/tarsnode/util/start.bat
fi

INFO=`ps -e | grep tarsnode`

if [[ "${INFO}" != "" ]]; then
    echo 'Tars node installed success'
else
    echo 'Tars node installed failed'
fi
runuser: root, webHost:http://10.10.141.57:3000, machine_ip:10.10.145.76, registryAddress:tcp -h 10.10.141.57 -p 17890
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1323k    0 1323k    0     0  92.3M      0 --:--:-- --:--:-- --:--:-- 92.3M
cp: cannot overwrite non-directory '/usr/local/app/tars/tarsnode/data' with directory 'tarsnode/data'
local machine ip:[10.10.145.76] succ
tars registry: tcp -h 10.10.141.57 -p 17890
install tarsnode succ, start tarsnode
start /usr/local/app/tars/tarsnode/bin/tarsnode --nodeid=10.10.145.76 --config=/usr/local/app/tars/tarsnode/conf/tars.tarsnode.config.conf
Tars node installed success
tarsnode.conf: --------------------------------------------------------
<tars>
    <application>
        enableset=n
        setdivision=NULL
        <client>
            async-invoke-timeout=5000
            refresh-endpoint-interval=60000
            report-interval=60000
            stat=tars.tarsstat.StatObj
            property=tars.tarsproperty.PropertyObj
            modulename=tars.tarsnode
            locator=tars.tarsregistry.QueryObj@tcp -h 10.10.141.57 -p 17890
            sync-invoke-timeout=6000
            asyncthread=3
        </client>
        <server>
            logsize=10M
            config=tars.tarsconfig.ConfigObj
            notify=tars.tarsnotify.NotifyObj
            deactivating-timeout=3000
            app=tars
            server=tarsnode
            localip=10.10.145.76
            local=tcp -h 127.0.0.1 -p 19387 -t 10000
            basepath=/usr/local/app/tars/tarsnode/data
            datapath=/usr/local/app/tars/tarsnode/data
            logpath=/usr/local/app/tars/app_log
            logLevel=DEBUG
            <NodeAdapter>
                endpoint=tcp -h 10.10.145.76 -p 19385 -t 60000
                allow
                maxconns=1024
                threads=5
                queuecap=10000
                queuetimeout=4000
                servant=tars.tarsnode.NodeObj
            </NodeAdapter>
            <ServerAdapter>
                endpoint=tcp -h 10.10.145.76 -p 19386 -t 60000
                allow
                maxconns=1024
                threads=5
                queuecap=10000
                queuetimeout=4000
                servant=tars.tarsnode.ServerObj
            </ServerAdapter>
        </server>
    </application>
    <node>
            registryObj=tars.tarsregistry.RegistryObj
            <keepalive>
                heartTimeout=45
                monitorInterval=3
                synStatInterval=60
            </keepalive>
            <hashmap>
                file=serversCache.dat
                minBlock=500
                maxBlock=500
                factor=1
                size=10M
            </hashmap>
    </node>
</tars>
install tarsnode succ, check tarsnode alive
[root@bogon node]#
ruanshudong commented 7 months ago

进入容器, 查看 /usr/local/app/tars/app_log/tars/tarsnode/....下面的日志, 看看是否有异常

Lands-1203 commented 7 months ago

image image image ![Uploading image.png…]()

Lands-1203 commented 7 months ago

image

Lands-1203 commented 7 months ago

看一下最后一张图有Error

ruanshudong commented 7 months ago

看起来是似乎没问题啊, 是不是防火墙哪里有问题

Lands-1203 commented 7 months ago

就是防火墙问题,那我不能关闭防火墙吧?有什么好的办法吗?

Lands-1203 commented 7 months ago

tars-node的防火墙关闭就可以了

ruanshudong commented 7 months ago

防火墙开通内网啊, 内网要啥防火墙