GridGain网络连接:是否可以通过SSH转发节点?

时间:2014-09-26 08:07:50

标签: ssh ssh-tunnel gridgain

我想通过SSH连接到运行gridgain实例的远程计算机,并从本地gridgain实例连接到它。可以这样做吗?

如何完成gridgain网络连接?据我所知,节点旋转并侦听47100-47200上的第一个可用端口。但它也开辟了更多的端口。

似乎还不够将远程机器上的47100(远程机器网格交换端口)转发到本地47100.可能通信不只是客户端服务器,而是与远程节点试图连接到我的主节点对称?

是否有关于网络协议的文档?


我尝试了对称转发

  • GridTcpCommunicationSpi.DFLT_PORTs(47100+)和
  • GridTcpDiscoverySpi.DFLT_PORTs(47500 +)

端口。

节点能够连接。在本地节点上,我首先收到此警告:

WARN  GridTcpCommunicationSpi - Connect timed out (consider increasing 'connTimeout' configuration property) [addr=/10.240.136.167:47100]
WARN  GridTcpDiscoverySpi - Timed out waiting for message delivery receipt (most probably, the reason is in long GC pauses on remote node; consider tuning GC and increasing 'ackTimeout' configuration property). Will retry to send message with increased timeout. Current timeout: 5000.
WARN  GridDhtPreloader - <gg-utility-sys-cache> Failed to wait for initial partition map exchange. Possible reasons are: 
  ^-- Transactions in deadlock.
  ^-- Long running transactions (ignore if this is the case).
  ^-- Unreleased explicit locks.
WARN  GridTcpDiscoverySpi - Timed out waiting for message to be read (most probably, the reason is in long GC pauses on remote node. Current timeout: 5000.

当以某种方式尝试连接到10.240.136.167:47100 - 这是远程机器本地IP时,这是一个超时,这显然是不可能的。

但是看起来不错,因为我得到以下内容:

INFO  GridDiscoveryManager - Topology snapshot [ver=2, nodes=2, CPUs=6, heap=2.7GB]

执行以下广播测试时:

        grid.compute().broadcast(new GridRunnable() {
            @Override
            public void run() {
                System.out.println("hello!");
            }
        });

我在远程计算机上遇到这个致命错误,无论它是什么:

[SEVERE][gridgain-#9%pub-null%][GridJobProcessor] Task was not deployed or was redeployed since task execution [taskName=nix.GoogleGridRun$Test, taskClsName=at$
        at org.gridgain.grid.kernal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1732)
        at org.gridgain.grid.kernal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:654)
        at org.gridgain.grid.kernal.managers.communication.GridIoManager.access$1800(GridIoManager.java:62)
        at org.gridgain.grid.kernal.managers.communication.GridIoManager$6.body(GridIoManager.java:615)
        at org.gridgain.grid.util.worker.GridWorker.run(GridWorker.java:151)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
[19:58:02,237][SEVERE][gridgain-#11%pub-null%][GridJobProcessor] Task was not deployed or was redeployed since task execution [taskName=nix.GoogleGridRun$1, taskClsName=at.a$
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation

class org.gridgain.grid.GridDeploymentException: Task was not deployed or was redeployed since task execution [taskName=nix.GoogleGridRun$1, taskClsName=at.ac.ait.is.infrase$
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation

        at org.gridgain.grid.kernal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1107)
        at org.gridgain.grid.kernal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1732)
        at org.gridgain.grid.kernal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:654)
        at org.gridgain.grid.kernal.managers.communication.GridIoManager.access$1800(GridIoManager.java:62)
        at org.gridgain.grid.kernal.managers.communication.GridIoManager$6.body(GridIoManager.java:615)

在客户端,我看不到任何东西,但是:

INFO  GridDeploymentLocalStore - Class locally deployed: class nix.GoogleGridRun$1
hello!

当我尝试通过调试器再次推送广播时,我在本地计算机上获得以下内容,并在远程计算机上显示与以前相同的错误消息:

ERROR GridTaskWorker - Failed to obtain remote job result policy for result from GridComputeTask.result(..) method (will fail the whole task): GridJobResultImpl [job=o.g.g.kernal.processors.closure.GridClosureProcessor$10@7e89183d, sib=GridJobSiblingImpl [sesId=4c17983b841-43f8b9fa-87ae-4a20-99a1-8d36f5eb74a4, jobId=0d17983b841-ef0084a6-f6a7-4501-87a0-3c5eb7c72bca, nodeId=ef0084a6-f6a7-4501-87a0-3c5eb7c72bca, isJobDone=false], jobCtx=GridJobContextImpl [jobId=0d17983b841-ef0084a6-f6a7-4501-87a0-3c5eb7c72bca, attrs={}], node=GridTcpDiscoveryNode [id=ef0084a6-f6a7-4501-87a0-3c5eb7c72bca, addrs=[10.240.136.167, 127.0.0.1], sockAddrs=[/10.240.136.167:47500, /10.240.136.167:47500, /127.0.0.1:47500], discPort=47500, order=1, loc=false, ver=6.5.0#20140925-sha1:6dc3d773], ex=class o.g.g.GridDeploymentException: Task was not deployed or was redeployed since task execution [taskName=nix.GoogleGridRun$Test, taskClsName=nix.GoogleGridRun$Test, codeVer=0, clsLdrId=eb17983b841-43f8b9fa-87ae-4a20-99a1-8d36f5eb74a4, seqNum=1411761402302, depMode=SHARED, dep=null]
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation
, hasRes=true, isCancelled=false, isOccupied=true]
class org.gridgain.grid.GridException: Remote job threw user exception (override or implement GridComputeTask.result(..) method if you would like to have automatic failover for this exception).
    at org.gridgain.grid.compute.GridComputeTaskAdapter.result(GridComputeTaskAdapter.java:109)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker$3.apply(GridTaskWorker.java:819)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker$3.apply(GridTaskWorker.java:812)
    at org.gridgain.grid.util.GridUtils.wrapThreadLoader(GridUtils.java:6093)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker.result(GridTaskWorker.java:812)
    at org.gridgain.grid.kernal.processors.task.GridTaskWorker.onResponse(GridTaskWorker.java:708)
    at org.gridgain.grid.kernal.processors.task.GridTaskProcessor.processJobExecuteResponse(GridTaskProcessor.java:906)
    at org.gridgain.grid.kernal.processors.task.GridTaskProcessor$JobMessageListener.onMessage(GridTaskProcessor.java:1138)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:654)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.access$1800(GridIoManager.java:62)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager$6.body(GridIoManager.java:615)
    at org.gridgain.grid.util.worker.GridWorker.run(GridWorker.java:151)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: class org.gridgain.grid.GridDeploymentException: Task was not deployed or was redeployed since task execution [taskName=nix.GoogleGridRun$Test, taskClsName=nix.GoogleGridRun$Test, codeVer=0, clsLdrId=eb17983b841-43f8b9fa-87ae-4a20-99a1-8d36f5eb74a4, seqNum=1411761402302, depMode=SHARED, dep=null]
For more information see:
    Troubleshooting:      http://bit.ly/GridGain-Troubleshooting
    Documentation Center: http://bit.ly/GridGain-Documentation

    at org.gridgain.grid.kernal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1107)
    at org.gridgain.grid.kernal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1732)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:654)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager.access$1800(GridIoManager.java:62)
    at org.gridgain.grid.kernal.managers.communication.GridIoManager$6.body(GridIoManager.java:615)
    at org.gridgain.grid.util.worker.GridWorker.run(GridWorker.java:151)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    ... 1 more

在本地主机端,我有虚拟端口和实际端口之间的连接

tcp6       0      0 127.0.0.1:47100         127.0.0.1:38272         VERBUNDEN   12280/java      
tcp6       0      0 127.0.0.1:38272         127.0.0.1:47100         VERBUNDEN   12280/java 

还有更多来自ssh客户端(也是java)

tcp6   45832      0 78.101.12.107:47101    146.148.119.62:51867    VERBUNDEN   12280/java      
tcp6     231      0 78.101.12.107:47501    146.148.119.62:46219    CLOSE_WAIT  12280/java      
tcp6      48      0 78.101.12.107:37129    146.148.119.62:22       VERBUNDEN   12280/java   
tcp6       1      0 78.101.12.107:47501    146.148.119.62:44391    CLOSE_WAIT  12280/java  

78.101.12.107 =本地IP 146.148.119.62 =远程ip

我在成功的本地2节点网格上查看了netstat,我看到了以下连接:

tcp6       0      0 ::1:47501               ::1:43143               VERBUNDEN   10218/java      
tcp6       0      0 ::1:47500               ::1:34708               VERBUNDEN   9496/java       
tcp6       0      0 ::1:34708               ::1:47500               VERBUNDEN   10218/java      
tcp6       0      0 ::1:43143               ::1:47501               VERBUNDEN   9496/java 

这些是在GridTcpCommunicationSpi.DFLT_PORTs和GridTcpDiscoverySpi.DFLT_PORTs之间 - 所以这些应该足够了。

关于可能出错的任何想法?

1 个答案:

答案 0 :(得分:0)

主节点也应该可以从群集中获得。您有两个选择:

  1. 设置VPN
  2. 为所有将其本地地址转换为外部地址的节点实现并配置GridAddressResolver。这将需要在您的家庭网络中设置端口转发。
相关问题