跳转到主要内容

文档 1.7 版本已不再积极维护,你当前浏览的是一份归档快照。 最新文档请参阅 最新版本。

Server 启动指南

1 概述

配置文件的目录为 hugegraph-release/conf,所有关于服务和图本身的配置都在此目录下。

主要的配置文件包括:gremlin-server.yaml、rest-server.properties 和 hugegraph.properties

HugeGraphServer 内部集成了 GremlinServer 和 RestServer,而 gremlin-server.yaml 和 rest-server.properties 就是用来配置这两个 Server 的。

  • GremlinServer:GremlinServer 接收 Gremlin 请求并调用图引擎。
  • RestServer:提供 RESTful API,根据不同的 HTTP 请求,调用对应的 Core API,如果用户请求体是 gremlin 语句,则会转发给 GremlinServer,实现对图数据的操作。

下面对这三个配置文件逐一介绍。

2 gremlin-server.yaml

gremlin-server.yaml 的主要结构如下。示例省略了部分导入项;完整内容以发布包中的文件为准。

  1# host and port of gremlin server, need to be consistent with host and port in rest-server.properties
  2#host: 127.0.0.1
  3#port: 8182
  4
  5# Gremlin 查询中的超时时间(以毫秒为单位)
  6evaluationTimeout: 30000
  7
  8channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer
  9# 不要在此处设置图形,此功能将在支持动态添加图形后再进行处理
 10graphs: {
 11}
 12scriptEngines: {
 13  gremlin-groovy: {
 14    staticImports: [
 15      org.opencypher.gremlin.process.traversal.CustomPredicates.*',
 16      org.opencypher.gremlin.traversal.CustomFunctions.*
 17    ],
 18    plugins: {
 19      org.apache.hugegraph.plugin.HugeGraphGremlinPlugin: {},
 20      org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
 21      org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {
 22        classImports: [
 23          java.lang.Math,
 24          org.apache.hugegraph.backend.id.IdGenerator,
 25          org.apache.hugegraph.type.define.Directions,
 26          org.apache.hugegraph.type.define.NodeRole,
 27          org.apache.hugegraph.traversal.algorithm.CollectionPathsTraverser,
 28          org.apache.hugegraph.traversal.algorithm.CountTraverser,
 29          org.apache.hugegraph.traversal.algorithm.CustomizedCrosspointsTraverser,
 30          org.apache.hugegraph.traversal.algorithm.CustomizePathsTraverser,
 31          org.apache.hugegraph.traversal.algorithm.FusiformSimilarityTraverser,
 32          org.apache.hugegraph.traversal.algorithm.HugeTraverser,
 33          org.apache.hugegraph.traversal.algorithm.JaccardSimilarTraverser,
 34          org.apache.hugegraph.traversal.algorithm.KneighborTraverser,
 35          org.apache.hugegraph.traversal.algorithm.KoutTraverser,
 36          org.apache.hugegraph.traversal.algorithm.MultiNodeShortestPathTraverser,
 37          org.apache.hugegraph.traversal.algorithm.NeighborRankTraverser,
 38          org.apache.hugegraph.traversal.algorithm.PathsTraverser,
 39          org.apache.hugegraph.traversal.algorithm.PersonalRankTraverser,
 40          org.apache.hugegraph.traversal.algorithm.SameNeighborTraverser,
 41          org.apache.hugegraph.traversal.algorithm.ShortestPathTraverser,
 42          org.apache.hugegraph.traversal.algorithm.SingleSourceShortestPathTraverser,
 43          org.apache.hugegraph.traversal.algorithm.SubGraphTraverser,
 44          org.apache.hugegraph.traversal.algorithm.TemplatePathsTraverser,
 45          org.apache.hugegraph.traversal.algorithm.steps.EdgeStep,
 46          org.apache.hugegraph.traversal.algorithm.steps.RepeatEdgeStep,
 47          org.apache.hugegraph.traversal.algorithm.steps.WeightedEdgeStep,
 48          org.apache.hugegraph.traversal.optimize.ConditionP,
 49          org.apache.hugegraph.traversal.optimize.Text,
 50          org.apache.hugegraph.traversal.optimize.TraversalUtil,
 51          org.apache.hugegraph.util.DateUtil,
 52          org.opencypher.gremlin.traversal.CustomFunctions,
 53          org.opencypher.gremlin.traversal.CustomPredicate
 54        ],
 55        methodImports: [
 56          java.lang.Math#*,
 57          org.opencypher.gremlin.traversal.CustomPredicate#*,
 58          org.opencypher.gremlin.traversal.CustomFunctions#*
 59        ]
 60      },
 61      org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {
 62        files: [scripts/empty-sample.groovy]
 63      }
 64    }
 65  }
 66}
 67serializers:
 68  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1,
 69      config: {
 70        serializeResultToString: false,
 71        ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]
 72      }
 73  }
 74  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0,
 75      config: {
 76        serializeResultToString: false,
 77        ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]
 78      }
 79  }
 80  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0,
 81      config: {
 82        serializeResultToString: false,
 83        ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]
 84      }
 85  }
 86  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0,
 87      config: {
 88        serializeResultToString: false,
 89        ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]
 90      }
 91  }
 92metrics: {
 93  consoleReporter: {enabled: false, interval: 180000},
 94  csvReporter: {enabled: false, interval: 180000, fileName: ./metrics/gremlin-server-metrics.csv},
 95  jmxReporter: {enabled: false},
 96  slf4jReporter: {enabled: false, interval: 180000},
 97  gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
 98  graphiteReporter: {enabled: false, interval: 180000}
 99}
100maxInitialLineLength: 4096
101maxHeaderSize: 8192
102maxChunkSize: 8192
103maxContentLength: 65536
104maxAccumulationBufferComponents: 1024
105resultIterationBatchSize: 64
106writeBufferLowWaterMark: 32768
107writeBufferHighWaterMark: 65536
108ssl: {
109  enabled: false
110}

通常只需关注 channelizer、host 和 port。图不在 Gremlin Server 的 graphs 段加载;是否读取本地图配置由 rest-server.properties 中的 graph.load_from_local_config 控制。

  • channelizer:默认的 WsAndHttpChannelizer 同时支持 WebSocket 和 HTTP。Gremlin-Console 使用 WebSocket,HugeGraph-Client、Loader 和 Hubble 使用 HTTP;

默认 GremlinServer 是服务在 localhost:8182,如果需要修改,配置 host、port 即可

  • host:部署 GremlinServer 机器的机器名或 IP,目前 HugeGraphServer 不支持分布式部署,且 GremlinServer 不直接暴露给用户;
  • port:部署 GremlinServer 机器的端口;

同时需要在 rest-server.properties 中增加对应的配置项 gremlinserver.url=http://host:port

3 rest-server.properties

下面是可用的 rest-server.properties 示例。当前上游发布模板没有写出 graph.load_from_local_config,而源码默认值为 false;使用 conf/graphs 中的本地图配置时必须显式设为 true。

 1# bind url
 2# could use '0.0.0.0' or specified (real)IP to expose external network access
 3restserver.url=http://127.0.0.1:8080
 4#restserver.enable_graphspaces_filter=false
 5# gremlin server url, need to be consistent with host and port in gremlin-server.yaml
 6#gremlinserver.url=http://127.0.0.1:8182
 7
 8graphs=./conf/graphs
 9graph.load_from_local_config=true
10
11# The maximum thread ratio for batch writing, only take effect if the batch.max_write_threads is 0
12batch.max_write_ratio=80
13batch.max_write_threads=0
14
15# configuration of arthas
16arthas.telnetPort=8562
17arthas.httpPort=8561
18arthas.ip=127.0.0.1
19arthas.disabledCommands=jad
20
21# authentication configs
22#auth.authenticator=org.apache.hugegraph.auth.StandardAuthenticator
23# for admin password, By default, it is pa and takes effect upon the first startup
24#auth.admin_pa=pa
25#auth.graph_store=hugegraph
26
27# use pd
28# usePD=true
29
30# slow query log
31log.slow_query_threshold=1000
32# bytes of request body recorded as-is (may contain sensitive literals), 0 to disable
33log.slow_query_body_limit=512
34
35# jvm(in-heap) memory usage monitor, set 1 to disable it
36memory_monitor.threshold=0.85
37memory_monitor.period=2000
  • restserver.url:RestServer 提供服务的 url,根据实际环境修改。如果其他 IP 地址无法访问,可以尝试修改为特定的地址;或修改为 http://0.0.0.0 来监听来自任何 IP 地址的请求,这种方案较为便捷,但需要留意服务可被访问的网络范围;
  • graphs:图配置文件所在目录,默认值是 ./conf/graphs。init-store 会扫描该目录;Server 仅在 graph.load_from_local_config=true 时加载其中的 properties 文件;
  • graph.load_from_local_config:是否在 Server 启动时读取本地图配置,源码默认值为 false;

当前上游模板中的 Arthas 键仍写作 arthas.telnet_port、arthas.http_port 和 arthas.disabled_commands,但 ServerOptions 读取的是下方示例中的 camelCase 名称。自定义配置应使用 arthas.telnetPort、arthas.httpPort 和 arthas.disabledCommands。

配置项 gremlinserver.url 是 GremlinServer 为 RestServer 提供服务的 url,该配置项默认为 http://localhost:8182,如需修改,需要和 gremlin-server.yaml 中的 host 和 port 相匹配;

4 hugegraph.properties

hugegraph.properties 是一类文件,因为如果系统存在多个图,则会有多个相似的文件。该文件用来配置与图存储和查询相关的参数,文件的默认内容如下:

 1# gremlin entrence to create graph
 2gremlin.graph=org.apache.hugegraph.HugeFactory
 3
 4# cache config
 5#schema.cache_capacity=100000
 6# vertex-cache default is 1000w, 10min expired
 7#vertex.cache_capacity=10000000
 8#vertex.cache_expire=600
 9# edge-cache default is 100w, 10min expired
10#edge.cache_capacity=1000000
11#edge.cache_expire=600
12
13# schema illegal name template
14#schema.illegal_name_regex=\s+|~.*
15
16# NOTE: since 1.7.0, only hstore, rocksdb, hbase, memory are supported for backend.
17# if you want to use Cassandra/MySql/PG... as backend, please use version < 1.7.0
18backend=rocksdb
19serializer=binary
20
21store=hugegraph
22
23# pd config
24#pd.peers=127.0.0.1:8686
25
26# task config
27task.schedule_period=10
28task.retry=0
29task.wait_timeout=10
30
31# if use 'ikanalyzer', need download jar from 'https://github.com/apache/hugegraph-doc/raw/ik_binary/dist/server/ikanalyzer-2012_u6.jar' to lib directory
32search.text_analyzer=jieba
33search.text_analyzer_mode=INDEX
34
35# rocksdb backend config
36#rocksdb.data_path=/path/to/disk
37#rocksdb.wal_path=/path/to/disk
38
39# hbase backend config
40#hbase.hosts=localhost
41#hbase.port=2181
42#hbase.znode_parent=/hbase
43#hbase.threads_max=64

重点关注未注释的几项:

  • gremlin.graph:GremlinServer 的启动入口,用户不要修改此项;
  • backend:使用的后端存储。1.7.0 支持 memory、rocksdb、hstore 和 hbase;
  • serializer:schema、vertex 和 edge 写入后端时使用的序列化器。RocksDB 使用 binary;
  • store:图在后端使用的存储名称;
  • rocksdb.data_path:backend 为 rocksdb 时此项才有意义,rocksdb 的数据目录
  • rocksdb.wal_path:backend 为 rocksdb 时此项才有意义,rocksdb 的日志目录

5 多图配置

一个 Server 可以加载多个图,每个图使用单独的 properties 文件。下面创建 RocksDB 图 hugegraph_rocksdb 和内存图 hugegraph_memory。

[可选]:修改 rest-server.properties

通过修改 rest-server.properties 中的 graphs 配置项来设置图的配置文件目录。默认配置为 graphs=./conf/graphs,如果想要修改为其它目录则调整 graphs 配置项,比如调整为 graphs=/etc/hugegraph/graphs,示例如下:

1graphs=./conf/graphs
2graph.load_from_local_config=true

在 conf/graphs 路径下基于 hugegraph.properties 创建 hugegraph_memory.properties 和 hugegraph_rocksdb.properties。

hugegraph_memory.properties 修改如下:

1backend=memory
2serializer=text
3store=hugegraph_memory

hugegraph_rocksdb.properties 修改如下:

1backend=rocksdb
2serializer=binary
3
4store=hugegraph_rocksdb

停止 Server,初始化执行 init-store.sh(为新的图创建数据库),重新启动 Server

1$ ./bin/stop-hugegraph.sh
 1$ ./bin/init-store.sh
 2
 3Initializing HugeGraph Store...
 42023-06-11 14:16:14 [main] [INFO] o.a.h.u.ConfigUtil - Scanning option 'graphs' directory './conf/graphs'
 52023-06-11 14:16:14 [main] [INFO] o.a.h.c.InitStore - Init graph with config file: ./conf/graphs/hugegraph_rocksdb.properties
 6...
 72023-06-11 14:16:15 [main] [INFO] o.a.h.StandardHugeGraph - Graph 'hugegraph_rocksdb' has been initialized
 82023-06-11 14:16:15 [main] [INFO] o.a.h.c.InitStore - Init graph with config file: ./conf/graphs/hugegraph_memory.properties
 9...
102023-06-11 14:16:16 [main] [INFO] o.a.h.StandardHugeGraph - Graph 'hugegraph_memory' has been initialized
112023-06-11 14:16:16 [main] [INFO] o.a.h.StandardHugeGraph - Close graph standardhugegraph[hugegraph_rocksdb]
12...
132023-06-11 14:16:16 [main] [INFO] o.a.h.HugeFactory - HugeFactory shutdown
142023-06-11 14:16:16 [hugegraph-shutdown] [INFO] o.a.h.HugeFactory - HugeGraph is shutting down
15Initialization finished.
1$ ./bin/start-hugegraph.sh
2
3Starting HugeGraphServer...
4Connecting to HugeGraphServer (http://127.0.0.1:8080/graphspaces/DEFAULT/graphs)...OK
5Started [pid 21614]

查看创建的图:

1curl http://127.0.0.1:8080/graphspaces/DEFAULT/graphs
2
3{"graphs":["hugegraph_rocksdb","hugegraph_memory"]}

查看某个图的信息:

1curl http://127.0.0.1:8080/graphspaces/DEFAULT/graphs/hugegraph_memory
2
3{"name":"hugegraph_memory","backend":"memory"}
1curl http://127.0.0.1:8080/graphspaces/DEFAULT/graphs/hugegraph_rocksdb
2
3{"name":"hugegraph_rocksdb","backend":"rocksdb"}