JanusGraph服务器

JanusGraph 服务器

JanusGraph使用Gremlin服务器引擎作为服务器组件来处理和回答客户机查询。当封装在JanusGraph中时,Gremlin服务器称为JanusGraph服务器。

必须手动启动JanusGraph服务器才能使用它。JanusGraph服务器提供了一种方法,可以对托管在其中的一个或多个JanusGraph实例远程执行Gremlin遍历。本节将描述如何使用WebSocket配置,以及如何配置JanusGraph服务器来处理HTTP端点交互。有关如何从不同语言连接到JanusGraph服务器的信息,请参阅连接到JanusGraph。

入门

使用 Pre-Packaged 分发

Note从0.5.1开始,它只是包含在完整的包版本中。

JanusGraph版本预先配置为使用示例Cassandra和Elasticsearch配置开箱即用地运行JanusGraph服务器,允许用户快速开始使用JanusGraph服务器。此配置默认为客户端应用程序,这些应用程序可以通过带有自定义子策略的WebSocket连接到JanusGraph服务器。有许多用不同语言开发的客户机来帮助支持子策略。使用WebSocket接口最熟悉的客户机是Gremlin控制台。快速入门包并不代表生产安装,但它提供了一种使用JanusGraph服务器进行开发、运行测试以及查看组件如何连接在一起的方法。要使用此默认配置:

  • 从发布页面下载当前janusgraph-$VERSION.zip文件的副本
  • 解压缩它并进入janusgraph-$VERSION目录
  • 运行bin/janusgraph.sh start。此步骤将启动Gremlin服务器,并将Cassandra/ES分叉到一个单独的进程中。注意:出于安全原因,Elasticsearch和janusgraph.sh必须在非根帐户下运行。
$ bin/janusgraph.sh start
Forking Cassandra...
Running `nodetool statusthrift`.. OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9300)... OK (connected to 127.0.0.1:9300).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182)... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.
连接到Gremlin服务器

运行janusgraph.sh之后,Gremlin服务器将准备好侦听WebSocket连接。测试连接的最简单方法是使用Gremlin控制台。

使用bin/Gremlin.sh启动Gremlin控制台,并使用:remote和:>命令将Gremlin发送到Gremlin服务器:

$  bin/gremlin.sh
         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.utilities
plugin activated: janusgraph.imports
plugin activated: tinkerpop.tinkergraph
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Connected - localhost/127.0.0.1:8182
gremlin> :> graph.addVertex("name", "stephen")
==>v[256]
gremlin> :> g.V().values('name')
==>stephen

:remote命令告知控制台使用conf/remote.yaml文件配置到Gremlin服务器的远程连接以进行连接。该文件指向在本地主机上运行的一个Gremlin服务器实例。:>是将该行的Gremlin发送到当前活动远程的“submit”命令。可以执行一次命令:remote console,将所有后续脚本隐式发送到当前远程连接,而不是在每个脚本前加上:>。默认情况下,远程连接是无sessionless,这意味着在控制台中发送的每一行都被解释为一个请求。可以在一行中使用一个分号作为分隔符发送多个声明。

gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8182] - type ':remote console' to return to local mode
gremlin> graph
==>standardjanusgraph[cql:[127.0.0.1]]
gremlin> g
==>graphtraversalsource[standardjanusgraph[cql:[127.0.0.1]], standard]
gremlin> g.V()
gremlin> user = "Chris"
==>Chris
gremlin> graph.addVertex("name", user)
No such property: user for class: Script21
Type ':help' or ':h' for help.
Display stack trace? [yN]

或者,您可以通过在创建连接时指定session来建立具有一session的控制台。通过控制台对话,可以在多行输入中重用变量。

gremlin> :remote connect tinkerpop.server conf/remote.yaml session
==>Configured localhost/127.0.0.1:8182-[9acf239e-a3ed-4301-b33f-55c911e04052]
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8182]-[9acf239e-a3ed-4301-b33f-55c911e04052] - type ':remote console' to return to local mode
gremlin> g.V()
gremlin> user = "Chris"
==>Chris
gremlin> user
==>Chris
gremlin> graph.addVertex("name", user)
==>v[4344]
gremlin> g.V().values('name')
==>Chris

Pre-Packaged 分发后的清理

如果要重新启动并删除数据库和日志,可以使用clean命令和janusgraph.sh。运行清理操作前应停止服务器。

$ cd /Path/to/janusgraph/janusgraph-{project.version}/
$ ./bin/janusgraph.sh stop
Killing Gremlin-Server (pid 91505)...
Killing Elasticsearch (pid 91402)...
Killing Cassandra (pid 91219)...
$ ./bin/janusgraph.sh clean
Are you sure you want to delete all stored data and logs? [y/N] y
Deleted data in /Path/to/janusgraph/janusgraph-{project.version}/db
Deleted logs in /Path/to/janusgraph/janusgraph-{project.version}/log

作为WebSocket终结点的JanusGraph服务器

入门中描述的默认配置已为一WebSocket配置。如果要更改默认配置以使用自己的Cassandra或HBase环境,而不是使用快速启动环境,请执行以下步骤:

为WebSocket配置JanusGraph服务器
  1. 第一测试到一JanusGraph数据库的一个本地连接。此步骤适用于是使用Gremlin控制台测试连接,还是从程序连接。为您的环境在/conf目录中的一个属性文件中进行适当的更改。例如,编辑/conf/janusgraph-hbase.properties并确保正确指定了storage.backend、storage.hostname和storage.hbase.table参数。有关为各种存储后端配置JanusGraph的更多信息,请参阅存储后端。确保属性文件包含以下行:

    gremlin.graph=org.janusgraph.core.JanusGraphFactory
    
  2. 测试本地配置并拥有工作属性文件后,将属性文件从/conf目录复制到/conf/gremlin服务器目录。

    cp conf/janusgraph-hbase.properties
    conf/gremlin-server/socket-janusgraph-hbase-server.properties
    
  3. 将/conf/gremlin-server/gremlin-server.yaml复制到名为socket-gremlin-server.yaml的新文件中。如果需要参考文件的原始版本,请执行此操作

    cp conf/gremlin-server/gremlin-server.yaml
    conf/gremlin-server/socket-gremlin-server.yaml
    
  4. 编辑socket-gremlin-server.yaml文件并进行以下更新:

    • 如果计划从非本地主机连接到JanusGraph服务器,请更新主机的IP地址:

      host: 10.10.10.100
      
    • 更新图形部分以指向新的属性文件,以便JanusGraph服务器可以找到并连接到您的JanusGraph实例:

      graphs: { graph:
          conf/gremlin-server/socket-janusgraph-hbase-server.properties}
      
  5. 启动JanusGraph服务器,指定刚配置的YADL文件:

    bin/gremlin-server.sh ./conf/gremlin-server/socket-gremlin-server.yaml
    
  6. JanusGraph服务器现在应以WebSocket模式运行,可以按照连接到Gremlin服务器的指示进行测试

Important:不要使用bin/janusgraph.sh。这将启动默认配置,即启动一个单独的Cassandra/Elasticsearch环境。

作为HTTP端点的JanusGraph服务器

入门中描述的默认配置为一WebSocket配置。如果要更改默认配置以将JanusGraph服务器用作JanusGraph数据库的HTTP端点,请执行以下步骤:

  1. 第一测试到一JanusGraph数据库的一个本地连接。此步骤适用于是使用Gremlin控制台测试连接,还是从程序连接。为您的环境在/conf目录中的一个属性文件中进行适当的更改。例如,编辑/conf/janusgraph-hbase.properties并确保正确指定了storage.backend、storage.hostman和storage.hbase.table参数。有关为各种存储后端配置JanusGraph的更多信息,请参阅存储后端。确保属性文件包含以下行:

    gremlin.graph=org.janusgraph.core.JanusGraphFactory
    
  2. 测试本地配置并拥有工作属性文件后,将属性文件从/conf目录复制到/conf/gremlin服务器目录。

    cp conf/janusgraph-hbase.properties conf/gremlin-server/http-janusgraph-hbase-server.properties
    
  3. 将/conf/gremlin-server/gremlin-server.yaml复制到名为http-gremlin-server.yaml的新文件中。如果需要参考文件的原始版本,请执行此操作

    cp conf/gremlin-server/gremlin-server.yaml conf/gremlin-server/http-gremlin-server.yaml
    
  4. 编辑socket-gremlin-server.yaml文件并进行以下更新:

    • 如果计划从非本地主机连接到JanusGraph服务器,请更新主机的IP地址:

      host: 10.10.10.100
      
    • 更新channelizer设置以指定HttpChannelizer:

      channelizer: org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer
      
    • 更新图形部分以指向新的属性文件,以便JanusGraph服务器可以找到并连接到您的JanusGraph实例:

      graphs: { graph:
          conf/gremlin-server/http-janusgraph-hbase-server.properties}
      
  5. 启动JanusGraph服务器,指定刚配置的YADL文件:

    bin/gremlin-server.sh ./conf/gremlin-server/http-gremlin-server.yaml
    
  6. JanusGraph服务器现在应以HTTP模式运行并可供测试。curl可用于验证服务器是否正常工作:

    curl -XPOST -Hcontent-type:application/json -d *{"gremlin":"g.V().count()"}* [IP for JanusGraph server host](http://):8182 
    

JanusGraph服务器作为一WebSocket和HTTP端点

从JanusGraph 0.2.0起,可以将gremlin-server.yaml配置为通过同一端口接受WebSocket和HTTP连接。这可以通过如下任何先前示例中更改通道化器来实现。

channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer

高级JanusGraph服务器配置

HTTP认证

important

在以下示例中,credentialsDb应与所使用的图不同。应为其配置正确的后端,并根据所配置的后端使用不同的键空间、表或存储目录。此图将用于存储用户名称和密码。

HTTP基本认证

要在JanusGraph服务器中启用基本身份验证,请在gremlin-Server.yaml中包含以下配置。

 authentication: {
   authenticator: org.janusgraph.graphdb.tinkerpop.gremlin.server.auth.JanusGraphSimpleAuthenticator,
   authenticationHandler: org.apache.tinkerpop.gremlin.server.handler.HttpBasicAuthenticationHandler,
   config: {
     defaultUsername: user,
     defaultPassword: password,
     credentialsDb: conf/janusgraph-credentials-server.properties
    }
 }

验证已正确配置基本身份验证。例如

curl -v -XPOST http://localhost:8182 -d '{"gremlin": "g.V().count()"}'

如果身份验证配置正确,则应返回401

curl -v -XPOST http://localhost:8182 -d '{"gremlin": "g.V().count()"}' -u user:password

如果验证配置正确,则应返回200和结果4。

通过WebSocket进行身份验证

通过简单的身份验证和安全层通过WebSocket进行身份验证(https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer[SASL]机制。

要启用SASL身份验证,请在gremlin-server.yaml中包含以下配置

authentication: {
  authenticator: org.janusgraph.graphdb.tinkerpop.gremlin.server.auth.JanusGraphSimpleAuthenticator,
  authenticationHandler: org.apache.tinkerpop.gremlin.server.handler.SaslAuthenticationHandler,
  config: {
    defaultUsername: user,
    defaultPassword: password,
    credentialsDb: conf/janusgraph-credentials-server.properties
  }
}

important

在上例中,credentialsDb应与所使用的图不同。应为其配置正确的后端,并根据所配置的后端使用不同的键空间、表或存储目录。此图将用于存储用户名称和密码。

如果您通过gremlin控制台进行连接,则远程yaml文件应使用适当的值修改用户名称和密码属性。

username: user
password: password

通过HTTP和WebSocket进行身份验证

如果对HTTP和WebSocket都使用组合的通道化器,则可以使用saslandhmacAuthoritator通过WebSocket(通过SASL)、HTTP(通过基本认证)和HTTP(通过基于散列的消息认证代码)进行授权(https://en.wikipedia.org/wiki/Hash-based_message_authentication_code[HMAC]认证。HMAC是一种基于标记的认证,设计用于HTTP。您首先通过/session端点获取一个标记,然后使用该标记进行身份验证。它用于摊销使用基本身份验证加密密码所用的时间。

gremlin-server.yaml 应包括以下配置

authentication: {
  authenticator: org.janusgraph.graphdb.tinkerpop.gremlin.server.auth.SaslAndHMACAuthenticator,
  authenticationHandler: org.janusgraph.graphdb.tinkerpop.gremlin.server.handler.SaslAndHMACAuthenticationHandler,
  config: {
    defaultUsername: user,
    defaultPassword: password,
    hmacSecret: secret,
    credentialsDb: conf/janusgraph-credentials-server.properties
  }
}

important

在上例中,credentialsDb应与所使用的图不同。应为其配置正确的后端,并根据所配置的后端使用不同的键空间、表或存储目录。此图将用于存储用户名称和密码。

important

请注意此处的hmacSecret。如果您希望能够在每台服务器上使用相同的HMAC标记,则在所有运行的JanusGraph服务器上应该是相同的。

对于通过HTTP进行的HMAC身份验证,这将创建一个/session终结点,该终结点提供一个在默认情况下一小时后到期的标记。可通过Authorization.config映射中的tokenTimeout配置选项配置该标记的超时。此值为一个长值,以毫秒为单位。

您可以通过向/session端点发出get请求,使用curl获取该标记。例如

curl http://localhost:8182/session -XGET -u user:password

{"token": "dXNlcjoxNTA5NTQ2NjI0NDUzOkhrclhYaGhRVG9KTnVSRXJ5U2VpdndhalJRcVBtWEpSMzh5WldqRTM4MW89"}

然后,您可以使用“Authorization:token”报头将该标记用于身份验证。例如

curl -v http://localhost:8182/session -XPOST -d '{"gremlin": "g.V().count()"}' -H "Authorization: Token dXNlcjoxNTA5NTQ2NjI0NDUzOkhrclhYaGhRVG9KTnVSRXJ5U2VpdndhalJRcVBtWEpSMzh5WldqRTM4MW89"

在JanusGraph中使用TinkerPop Gremlin服务器

由于JanusGraph服务器是一个附带JanusGraph配置文件的TinkerPop Gremlin服务器,因此可以单独下载一个与JanusGraph兼容的TinkerPop Gremlin服务器,并与JanusGraph一起使用。开始下载适当版本的Gremlin服务器,该服务器需要匹配使用中的JanusGraph版本(3.4.6)支持的一个版本。

important

本节中对文件路径的任何引用均指Gremlin服务器的TinkerPop发行版下的路径,而非JanusGraph服务器的JanusGraph发行版下的路径,除非特别注明。

将独立的Gremlin服务器配置为与JanusGraph一起使用与配置打包的JanusGraph服务器类似。您应该熟悉图形配置。基本上,Gremlin服务器的yaml文件指向特定于图形的配置文件,这些配置文件用于将随后托管的JanusGraph实例进行实例化。为了例示这些图实例,Gremlin服务器要求JanusGraph的适当库和依赖项在其类路径上可用。

为了进行演示,这些指示将概述如何为Gremlin服务器中的JanusGraph配置BerkeleyDB后端。如前所述,Gremlin服务器需要类路径上的JanusGraph依赖项。使用以下命令将$VERSION替换为JanusGraph版本:

bin/gremlin-server.sh -i org.janusgraph janusgraph-all $VERSION

当这个过程完成时,Gremlin服务器现在应该拥有可用的所有JanusGraph依赖项,因此将能够实例化JanusGraph对象。

important

上述命令使用Groovy Grape,如果配置不正确,可能会导致下载错误。有关设置~/.groovy/graphecoficg.xml的更多信息,请参阅修补程序文档的本节。

创建一个名为GREMLIN_-SERVER_HOME/conf/janusgraph.properties的文件,其内容如下:

gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=berkeleyje
storage.directory=db/berkeley

其他后端的配置类似。请参阅存储后端。如果使用Cassandra,则使用janusgraph.properties文件中的Cassandra配置选项。唯一重要的保持不变的是gremlin.graph设置,该设置应始终使用JanusGraphFactory。该设置告知Gremlin服务器如何实例化一个JanusGraph实例。

接下来,创建一个名为GREMLIN_-SERVER_HOME/conf/GREMLIN-SERVER-janusgraph.yaml的文件,其中包含以下内容:

host: localhost
port: 8182
graphs: {
  graph: conf/janusgraph.properties}
scriptEngines: {
  gremlin-groovy: {
    plugins: { org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {},
               org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
               org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
               org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
               org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/empty-sample.groovy]}}}}
serializers:
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
metrics: {
  slf4jReporter: {enabled: true, interval: 180000}}
此配置文件有几个与JanusGraph相关的重要部分。
  1. 在图形映射中,有一个名为graph的键,其值为conf/janusgraph.properties。这告诉Gremlin服务器将一个名为“Graph”的图实例进行实例化,并使用conf/janusgraph.properties文件对其进行配置。“graph”键成为Gremlin服务器中图形实例的唯一名称,可以在提交给它的脚本中引用。
  2. 在plugins列表中,有一个对JanusGraphGremlinPlugin的引用,它通知Gremlin服务器初始化“JanusGraph Plugin”。“JanusGraph Plugin”将自动导入JanusGraph特定的类,以在脚本中使用。
  3. 请注意scripts键和对scripts/janusgraph.groovy的引用。此Groovy文件是Gremlin服务器和该特定脚本引擎的一个初始化脚本。创建包含以下内容的脚本/janusgraph.groovy:
def globals = [:]
globals << [g : graph.traversal()]

上述脚本创建一个名为globals的映射,并为其分配一个键/值对。关键是g,其值是从graph生成的一个TraversalSource,graph在其配置文件中为Gremlin服务器配置。至此,有二个全局变量可供提供给Gremlin Server-graph和g的脚本使用。

至此,Gremlin服务器已配置,并可用于连接到新的或现有的JanusGraph数据库。启动服务器:

$ bin/gremlin-server.sh conf/gremlin-server-janusgraph.yaml
[INFO] GremlinServer -
         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----

[INFO] GremlinServer - Configuring Gremlin Server from conf/gremlin-server-janusgraph.yaml
[INFO] MetricManager - Configured Metrics Slf4jReporter configured with interval=180000ms and loggerName=org.apache.tinkerpop.gremlin.server.Settings$Slf4jReporterMetrics
[INFO] GraphDatabaseConfiguration - Set default timestamp provider MICRO
[INFO] GraphDatabaseConfiguration - Generated unique-instance-id=7f0000016240-ubuntu1
[INFO] Backend - Initiated backend operations thread pool of size 8
[INFO] KCVSLog$MessagePuller - Loaded unidentified ReadMarker start time 2015-10-02T12:28:24.411Z into org.janusgraph.diskstorage.log.kcvs.KCVSLog$MessagePuller@35399441
[INFO] GraphManager - Graph [graph] was successfully configured via [conf/janusgraph.properties].
[INFO] ServerGremlinExecutor - Initialized Gremlin thread pool.  Threads in pool named with pattern gremlin-*
[INFO] ScriptEngines - Loaded gremlin-groovy ScriptEngine
[INFO] GremlinExecutor - Initialized gremlin-groovy ScriptEngine with scripts/janusgraph.groovy
[INFO] ServerGremlinExecutor - Initialized GremlinExecutor and configured ScriptEngines.
[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[standardjanusgraph[berkeleyje:db/berkeley], standard]
[INFO] AbstractChannelizer - Configured application/vnd.gremlin-v3.0+gryo with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0
[INFO] AbstractChannelizer - Configured application/vnd.gremlin-v3.0+gryo-stringd with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0
[INFO] GremlinServer$1 - Gremlin Server configured with worker thread pool of 1, gremlin pool of 8 and boss thread pool of 1.
[INFO] GremlinServer$1 - Channel started at port 8182.

以下部分说明如何连接到运行中的服务器。

通过Gremlin服务器连接到JanusGraph

Gremlin服务器将在启动时准备就绪,以检测WebSocket连接。测试连接的最简单方法是使用Gremlin控制台。

按照此处的说明连接到Gremlin服务器,以验证Gremlin服务器是否正常工作。

important

您应该了解的一个区别是,在使用JanusGraph服务器时,Gremlin控制台是从JanusGraph发行版的下方启动的,而在遵循此处有关独立Gremlin服务器的测试说明时,Gremlin控制台是从TinkerPop发行版的下方启动的。
GryoMapper mapper = GryoMapper.build().addRegistry(JanusGraphIoRegistry.INSTANCE).create();
Cluster cluster = Cluster.build().serializer(new GryoMessageSerializerV3d0(mapper)).create();
Client client = cluster.connect();
client.submit("g.V()").all().get();

通过向org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0添加Janusgraphy,驱动程序将知道如何正确地反序列化JanusGraph返回的定制数据类型。

扩展JanusGraph服务器

通过实现Gremlin服务器所提供的接口并利用JanusGraph,可以用其他通信方式扩展Gremlin服务器。请参阅相应修补程序文档中的更多详情。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值