无法再连接到海王星

时间:2019-12-11 20:15:36

标签: graph-databases gremlin amazon-neptune

我已经在我的AWS中创建了一个Neptune实例,并创建了一个负载均衡器以从我的本地计算机访问它以进行游戏。 我基本上是将LB上:80上的所有连接重定向到Neptune中的:8182上。 因此,我可以轻松地通过浏览器查询它。实际上,这是/status的输出:

// 20191211170323
// http://my-lb/status

{
  "status": "healthy",
  "startTime": "Mon Dec 09 20:06:21 UTC 2019",
  "dbEngineVersion": "1.0.2.1.R2",
  "role": "writer",
  "gremlin": {
    "version": "tinkerpop-3.4.1"
  },
  "sparql": {
    "version": "sparql-1.1"
  },
  "labMode": {
    "ObjectIndex": "disabled",
    "Streams": "disabled",
    "ReadWriteConflictDetection": "enabled"
  }
}

问题是当我尝试通过Gremlin Console或Java代码与之连接时,出现以下错误:

gremlin> :remote connect tinkerpop.server conf/remote-neptune.yaml
ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler  - Could not process the response
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 403 Forbidden
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:226)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:276)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:69)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297)
    at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:682)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:617)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:534)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at java.lang.Thread.run(Thread.java:748)

我的remote-neptune.yaml很简单:

hosts: [my-lb]
port: 80
connectionPool: { enableSsl: false}
serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}

我更新了我的AWS凭证,尽管我认为这与无关,因为我正在通过LB访问它。

最奇怪的是,这种情况就像一周前一样工作:/

有什么想法吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

看起来问题已自动解决,但只是分享一些注意事项,以防将来再次发生。如果您发现连接问题,那么您的第一行操作应该是检查它是否是网络连接问题。 (您提到要检查安全组是否有所更改,如果确实如此,请进行更新)。要检查是否确实是SG问题,请登录到您的客户端实例,然后对数据库端点进行简单的telnet调用。

 telnet <endpoint> <port>

如果它以“已连接”响应,则可以确保SG是正确的,现在您正在处理应用程序层问题。

如评论中所述,一些可能的罪魁祸首可能是:

  1. 您以前在海王星上进行了没有IAM身份验证的设置(不在ALB上),现在启用了IAM身份验证。 (强调-我指的是数据库上的IAM Auth,而不是两者之间的其他组件)。

  2. Gremlin客户端-服务器不匹配。

  3. ALB上的某些显式设置可能会阻止请求。

还有其他一些。总之,请尝试对是L2 / L3问题还是L7问题进行分类,然后根据此问题进行调查。