知识库

Linkurious bolt 配置

默认 Linkurious 配置在 production.json 配置文件中包含以下代码段

{
  "dataSources": [{
    "readOnly": false,
    "graphdb": {
      "vendor": "neo4j",
      "url": "http://127.0.0.1:7474",
      "user": null,
      "password": null
    },
    "index": {
      "vendor": "elasticSearch",
      "host": "127.0.0.1",
      "port": 9201,
      "forceReindex": false,
      "dynamicMapping": false,
      "skipEdgeIndexation": false
    }
  }]
}

文档中说明如下

Linkurious can connect to Neo4j via the Bolt protocol. To do so, you need to enable the protocol in your Neo4j configuration file. If Linkurious is connected over HTTP/S, it will try to automatically upgrade the connection to Bolt. The HTTP/S protocol is still required to perform a small subset of operations.

其中 URL 可以设置为 http/https/bolt/bolt+routing。但是,使用上述配置可能会在集群环境中遇到写入问题。

通常,在以下情况下会生成写入操作:

  • 通过 UI 创建/编辑/删除信息

  • 编写自己的查询/查询模板并让用户运行它们

当 Linkurious 使用 bolt+routing 协议时,Linkurious 可能会返回集群中的一个节点,该节点也可能是一个只读副本,当然,当向该节点发送写入查询时,写入操作将失败。

也就是说,您可能有不同的场景:

  1. 您不希望任何用户通过 LKE UI 更改数据(并且您已正确配置所有安全设置以实现此目的,您还在数据源中设置了只读标志)。在这种情况下,您永远不会遇到任何问题,因为系统永远不会执行写入操作。您的配置将正常工作。

  2. 您的集群仅包含核心服务器,不包含副本(只读)。在这种情况下,bolt+routing 协议返回的每个节点都将接受写入请求,并且永远不会失败。

  3. 您希望通过 LKE UI 更改数据,并且 Neo4j 集群还包含副本服务器。在这种情况下,为了消除故障的可能性,您需要使用 HTTP/S 协议配置额外的 writeUrl 参数,如下所示,并指向核心服务器,确保所有写入查询都发送到核心服务器(这是因为在 Linkurious 中,所有 http 调用都在底层通过 bolt 发送)。

配置将如下所示:

{
  "dataSources": [
    {
      "graphdb": {
        "vendor": "neo4j",
        "url": "bolt+routing://full-cluster:7687/",
        "writeUrl": "http://core-server:7474/",
        "user": "myNeo4jUser",
        "password": "nyNeo4jPassword"
      },
      "index": {
        "vendor": "neo4jSearch"
      }
    }
  ]
}

其中:

full-cluster

是指向集群中任何活动节点的任何内容。如果您只设置单个服务器,则如果该服务器发生故障,系统将无法连接到集群。在这种情况下,建议在此处设置一个始终活动的组件,该组件永远不会返回脱机服务器(例如,负载均衡器、带有备份服务器配置的反向代理、带有活动服务器池的 DNS 别名等)。

core-server

应遵循上述相同的建议,唯一的区别是这些组件永远不应该返回副本服务器,而应仅链接核心服务器的子集。