Skip to content

Neo4j 核心配置文件(neo4j.conf)

配置文件位置

  • Linux/etc/neo4j/neo4j.conf
  • WindowsC:\Program Files\Neo4j\conf\neo4j.conf
  • Docker/var/lib/neo4j/conf/neo4j.conf
  • ZIP 安装{neo4j-home}/conf/neo4j.conf

配置文件格式

  • 使用键值对格式:key=value
  • 注释以 # 开头
  • 空行和缩进被忽略
  • 支持环境变量:key=${ENV_VAR}

配置生效方式

  • 静态配置:需要重启 Neo4j 服务才能生效
  • 动态配置:可以通过 Neo4j Browser 或 Cypher Shell 在线修改,无需重启

基础配置

数据目录配置

txt
# 数据目录
server.directories.data=/var/lib/neo4j/data

# 日志目录
server.directories.logs=/var/log/neo4j

# 插件目录
server.directories.plugins=/var/lib/neo4j/plugins

# 导入目录
server.directories.import=/var/lib/neo4j/import

# 证书目录
server.directories.certificates=/var/lib/neo4j/certificates

数据库模式配置

txt
# 数据库模式:SINGLE(单实例)、CORE(核心节点)、READ_REPLICA(只读副本)
dbms.mode=SINGLE

# 默认数据库
dbms.default_database=neo4j

# 允许创建多个数据库(企业版)
dbms.multidatabase.enabled=true

# 预创建的数据库列表
dbms.default_listen_address=0.0.0.0

网络配置

监听地址配置

txt
# 默认监听地址
server.default_listen_address=0.0.0.0

# Bolt 协议监听地址和端口
server.bolt.listen_address=0.0.0.0:7687

# HTTP 协议监听地址和端口
server.http.listen_address=0.0.0.0:7474

# HTTPS 协议监听地址和端口
server.https.listen_address=0.0.0.0:7473

连接限制配置

txt
# Bolt 连接最大并发数
server.bolt.thread_pool_max_size=400

# HTTP 连接最大并发数
server.http.thread_pool_max_size=50

# HTTPS 连接最大并发数
server.https.thread_pool_max_size=50

# 连接超时时间(毫秒)
server.connection_timeout=5000

远程访问配置

txt
# 允许远程访问(Bolt)
server.bolt.enabled=true

# 允许远程访问(HTTP)
server.http.enabled=true

# 允许远程访问(HTTPS)
server.https.enabled=false

存储配置

存储引擎配置

txt
# 存储引擎类型(默认:native)
dbms.neo4j_home=/var/lib/neo4j

# 存储引擎页大小(单位:字节)
# 可选值:8192, 16384, 32768, 65536
dbms.memory.pagecache.size=512M

事务配置

txt
# 最大事务大小(单位:字节)
dbms.transaction.max_size=100M

# 事务超时时间(秒)
dbms.transaction.timeout=60

# 事务日志目录
dbms.tx_log.dir=data/transactions

# 事务日志刷盘策略
# 可选值:always(每次事务)、periodic(定期)
dbms.tx_log.rotation.strategy=size

# 事务日志文件大小(单位:字节)
dbms.tx_log.rotation.size=20M

# 保留的事务日志文件数量
dbms.tx_log.rotation.retention_policy=100 files

JVM 配置

堆内存配置

txt
# 初始堆内存
dbms.memory.heap.initial_size=512M

# 最大堆内存
dbms.memory.heap.max_size=2G

GC 配置

txt
# GC 日志文件路径
# dbms.jvm.additional=-Xloggc:/var/log/neo4j/gc.log

# GC 日志滚动策略
# dbms.jvm.additional=-XX:+UseGCLogFileRotation
# dbms.jvm.additional=-XX:NumberOfGCLogFiles=10
# dbms.jvm.additional=-XX:GCLogFileSize=10M

# GC 算法选择
# 推荐使用 G1 GC(Java 11+)
dbms.jvm.additional=-XX:+UseG1GC

其他 JVM 参数

txt
# 禁用 JVM 字节码验证
dbms.jvm.additional=-Xverify:none

# 启用 JVM 类数据共享
dbms.jvm.additional=-Xshare:on

# 禁用 JIT 编译(仅用于调试)
# dbms.jvm.additional=-Xint

安全配置

认证配置

txt
# 启用认证
dbms.security.auth_enabled=true

# 认证缓存大小
dbms.security.auth_cache_size=1000

# 认证缓存过期时间(毫秒)
dbms.security.auth_cache_ttl=60000

授权配置

txt
# 启用授权
dbms.security.authorization_enabled=true

# 角色管理配置
dbms.security.roles.default=reader,editor,publisher,architect,admin

TLS/SSL 配置

txt
# 启用 TLS/SSL 支持
dbms.ssl.policy.bolt.enabled=false

# TLS 版本
dbms.ssl.policy.bolt.tls_versions=TLSv1.3,TLSv1.2

# 证书路径
dbms.ssl.policy.bolt.public_certificate=certificates/bolt/public.crt
dbms.ssl.policy.bolt.private_key=certificates/bolt/private.key

# 客户端认证模式
# 可选值:NONE, OPTIONAL, REQUIRED
dbms.ssl.policy.bolt.client_auth=NONE

日志配置

日志级别配置

txt
# 主日志级别(INFO, WARN, ERROR, DEBUG)
# dbms.logs.query.enabled=true

# 查询日志级别
dbms.logs.query.level=INFO

# 查询日志格式
dbms.logs.query.format=JSON

# 慢查询阈值(毫秒)
dbms.logs.query.threshold=200

日志文件配置

txt
# 主日志文件大小(单位:字节)
dbms.logs.debug.rotation.size=20M

# 主日志文件保留数量
dbms.logs.debug.rotation.keep_number=7

# 查询日志文件大小(单位:字节)
dbms.logs.query.rotation.size=20M

# 查询日志文件保留数量
dbms.logs.query.rotation.keep_number=7

集群配置

因果集群配置

txt
# 集群模式
dbms.mode=CORE

# 初始发现成员列表
dbms.cluster.initial_discovery_members=core1:5000,core2:5000,core3:5000

# 发现监听地址
dbms.cluster.discovery_listen_address=:5000

# Raft 监听地址
dbms.cluster.raft.listen_address=:7000

# 事务监听地址
dbms.cluster.transaction.listen_address=:6000

# 集群名称
dbms.cluster.cluster_name=neo4j-cluster

HA 集群配置(Neo4j 3.x)

txt
# 集群模式
dbms.mode=HA

# 服务器 ID(每个节点唯一)
ha.server_id=1

# HA 监听地址
high_availability.host=0.0.0.0
high_availability.port=5001

# 初始主机列表
high_availability.initial_hosts=node1:5001,node2:5001,node3:5001

# 集群名称
high_availability.cluster_name=neo4j-ha-cluster

性能调优配置

缓存配置

txt
# 页面缓存大小
dbms.memory.pagecache.size=2G

# 缓存类型(堆内或堆外)
# 可选值:heap, off-heap
dbms.cache.type=off-heap

# 节点缓存大小比例
dbms.cache.node_cache_size_ratio=70

# 关系缓存大小比例
dbms.cache.relationship_cache_size_ratio=30

查询优化配置

txt
# 并行查询执行
dbms.threads.worker_count=8

# 执行计划缓存大小
dbms.query_cache_size=1000

# 执行计划缓存过期时间(毫秒)
dbms.query_cache_ttl=3600000

# 禁止执行长查询
dbms.security.transaction_start_timeout=60s

写入优化配置

txt
# 批量插入模式
dbms.tx_state.memory_allocation=ON_HEAP

# 事务提交队列大小
dbms.tx_state.transaction_committing_queue_size=256

# 事务应用队列大小
dbms.tx_state.transaction_applying_queue_size=256

插件配置

扩展配置

txt
# 启用 APOC 插件
dbms.security.procedures.unrestricted=apoc.*
dbms.security.procedures.allowlist=apoc.*

# 启用 Graph Data Science 插件
dbms.security.procedures.unrestricted=gds.*
dbms.security.procedures.allowlist=gds.*

配置管理最佳实践

配置文件备份

  • 定期备份配置文件
  • 在修改前创建备份
  • 记录配置变更历史

配置分组管理

  • 按照功能分组配置(基础、网络、存储、安全等)
  • 使用注释分隔不同功能模块
  • 为重要配置添加说明注释

环境分离

  • 为不同环境(开发、测试、生产)使用不同配置文件
  • 使用环境变量管理敏感配置
  • 避免硬编码敏感信息

配置验证

  • 使用 neo4j admin check-config 命令验证配置文件
  • 在测试环境验证配置变更
  • 监控配置变更后的系统性能

版本控制

  • 将配置文件纳入版本控制系统
  • 记录配置变更的原因和影响
  • 定期审查配置文件

常见配置问题

端口冲突

问题现象:Neo4j 启动失败,提示端口已被占用 解决方法

  • 修改冲突的端口配置
  • 检查并关闭占用端口的进程
  • 使用 netstat -tulnlsof -i :port 查找端口占用情况

内存配置不合理

问题现象:Neo4j 运行缓慢或频繁 GC 解决方法

  • 根据服务器内存大小调整堆内存和页面缓存
  • 推荐堆内存占服务器内存的 50%,页面缓存占 25%
  • 监控 GC 日志,调整 GC 配置

权限配置错误

问题现象:无法登录或执行特定操作 解决方法

  • 检查认证和授权配置
  • 验证用户角色和权限
  • 查看安全日志获取详细错误信息

集群配置错误

问题现象:节点无法加入集群 解决方法

  • 检查初始发现成员列表配置
  • 验证集群模式配置
  • 确保节点之间网络通信正常

动态配置管理

使用 Cypher Shell 修改配置

cypher
# 查看当前配置
SHOW CONFIGURATION;

# 查看特定配置
SHOW CONFIGURATION WHERE name CONTAINS 'bolt';

# 修改动态配置
ALTER SYSTEM SET server.bolt.thread_pool_max_size = 500;

# 重置配置为默认值
ALTER SYSTEM RESET server.bolt.thread_pool_max_size;

使用 Neo4j Browser 修改配置

  1. 访问 Neo4j Browser
  2. 导航到 "数据库信息" → "配置"
  3. 搜索并修改需要的配置项
  4. 点击 "应用" 保存更改

动态配置限制

  • 并非所有配置都支持动态修改
  • 动态修改的配置会在重启后丢失,需要同步到配置文件
  • 某些配置修改需要集群中所有节点一致

配置文件示例

单实例生产环境配置

txt
# 基础配置
server.directories.data=/var/lib/neo4j/data
server.directories.logs=/var/log/neo4j
server.default_listen_address=0.0.0.0

# 网络配置
server.bolt.listen_address=0.0.0.0:7687
server.http.listen_address=0.0.0.0:7474
server.https.listen_address=0.0.0.0:7473

# 内存配置
dbms.memory.heap.initial_size=4G
dbms.memory.heap.max_size=8G
dbms.memory.pagecache.size=8G

# 安全配置
dbms.security.auth_enabled=true
server.https.enabled=true

# 日志配置
dbms.logs.query.enabled=true
dbms.logs.query.threshold=100

# 插件配置
dbms.security.procedures.unrestricted=apoc.*
dbms.security.procedures.allowlist=apoc.*,gds.*

因果集群核心节点配置

txt
# 基础配置
dbms.mode=CORE
server.default_listen_address=0.0.0.0

# 网络配置
server.bolt.listen_address=0.0.0.0:7687
server.http.listen_address=0.0.0.0:7474

# 集群配置
dbms.cluster.initial_discovery_members=core1:5000,core2:5000,core3:5000
dbms.cluster.discovery_listen_address=:5000
dbms.cluster.raft.listen_address=:7000
dbms.cluster.transaction.listen_address=:6000
dbms.cluster.cluster_name=neo4j-cluster

# 内存配置
dbms.memory.heap.initial_size=8G
dbms.memory.heap.max_size=16G
dbms.memory.pagecache.size=16G

常见问题(FAQ)

Q1: 如何查看当前生效的配置?

A1: 可以通过以下方式查看当前生效的配置:

  • 使用 Cypher Shell 执行 SHOW CONFIGURATION; 命令
  • 在 Neo4j Browser 中导航到 "数据库信息" → "配置"
  • 查看 Neo4j 日志中的配置信息

Q2: 配置文件中的注释有什么作用?

A2: 注释用于:

  • 解释配置项的功能和作用
  • 记录配置变更历史
  • 分隔不同功能模块的配置
  • 临时禁用某些配置项

Q3: 如何验证配置文件的正确性?

A3: 可以使用以下命令验证配置文件:

bash
neo4j admin check-config

Q4: 为什么有些配置修改后需要重启?

A4: 某些配置项涉及到系统的核心组件或资源分配,需要重启才能重新初始化这些组件。例如:

  • 内存配置
  • 端口配置
  • 存储配置
  • 集群模式配置

Q5: 如何管理多个环境的配置文件?

A5: 可以使用以下方法管理多个环境的配置文件:

  • 使用配置管理工具(如 Ansible、Puppet、Chef)
  • 使用环境变量替换配置值
  • 为每个环境使用不同的配置文件
  • 将配置文件纳入版本控制系统

Q6: 配置文件中的敏感信息如何保护?

A6: 保护敏感信息的方法:

  • 使用环境变量管理密码等敏感信息
  • 限制配置文件的访问权限
  • 定期审查配置文件中的敏感信息
  • 使用加密存储敏感配置

Q7: 如何优化 Neo4j 的内存配置?

A7: 内存配置优化建议:

  • 堆内存:推荐占服务器内存的 50%,最大不超过 32G
  • 页面缓存:推荐占服务器内存的 25%,用于缓存数据页
  • 剩余内存:留给操作系统和其他进程使用
  • 根据实际负载调整内存分配

Q8: 如何配置 Neo4j 以获得最佳性能?

A8: 性能优化配置建议:

  • 使用 SSD 存储
  • 合理配置内存(堆内存和页面缓存)
  • 启用适当的日志级别
  • 根据负载调整线程池大小
  • 使用合适的 GC 算法
  • 优化查询语句

Q9: 如何备份和恢复配置文件?

A9: 配置文件备份和恢复方法:

  • 定期备份配置文件到安全位置
  • 在修改前创建配置文件备份
  • 恢复时将备份文件复制到配置目录
  • 恢复后验证配置文件的正确性

Q10: 如何跟踪配置文件的变更?

A10: 跟踪配置变更的方法:

  • 将配置文件纳入版本控制系统
  • 使用配置管理工具记录变更
  • 在配置文件中添加变更注释
  • 定期审查配置文件的变更历史