外观
Neo4j 核心配置文件(neo4j.conf)
配置文件位置
- Linux:
/etc/neo4j/neo4j.conf - Windows:
C:\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 filesJVM 配置
堆内存配置
txt
# 初始堆内存
dbms.memory.heap.initial_size=512M
# 最大堆内存
dbms.memory.heap.max_size=2GGC 配置
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,adminTLS/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-clusterHA 集群配置(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 -tuln或lsof -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 修改配置
- 访问 Neo4j Browser
- 导航到 "数据库信息" → "配置"
- 搜索并修改需要的配置项
- 点击 "应用" 保存更改
动态配置限制
- 并非所有配置都支持动态修改
- 动态修改的配置会在重启后丢失,需要同步到配置文件
- 某些配置修改需要集群中所有节点一致
配置文件示例
单实例生产环境配置
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-configQ4: 为什么有些配置修改后需要重启?
A4: 某些配置项涉及到系统的核心组件或资源分配,需要重启才能重新初始化这些组件。例如:
- 内存配置
- 端口配置
- 存储配置
- 集群模式配置
Q5: 如何管理多个环境的配置文件?
A5: 可以使用以下方法管理多个环境的配置文件:
- 使用配置管理工具(如 Ansible、Puppet、Chef)
- 使用环境变量替换配置值
- 为每个环境使用不同的配置文件
- 将配置文件纳入版本控制系统
Q6: 配置文件中的敏感信息如何保护?
A6: 保护敏感信息的方法:
- 使用环境变量管理密码等敏感信息
- 限制配置文件的访问权限
- 定期审查配置文件中的敏感信息
- 使用加密存储敏感配置
Q7: 如何优化 Neo4j 的内存配置?
A7: 内存配置优化建议:
- 堆内存:推荐占服务器内存的 50%,最大不超过 32G
- 页面缓存:推荐占服务器内存的 25%,用于缓存数据页
- 剩余内存:留给操作系统和其他进程使用
- 根据实际负载调整内存分配
Q8: 如何配置 Neo4j 以获得最佳性能?
A8: 性能优化配置建议:
- 使用 SSD 存储
- 合理配置内存(堆内存和页面缓存)
- 启用适当的日志级别
- 根据负载调整线程池大小
- 使用合适的 GC 算法
- 优化查询语句
Q9: 如何备份和恢复配置文件?
A9: 配置文件备份和恢复方法:
- 定期备份配置文件到安全位置
- 在修改前创建配置文件备份
- 恢复时将备份文件复制到配置目录
- 恢复后验证配置文件的正确性
Q10: 如何跟踪配置文件的变更?
A10: 跟踪配置变更的方法:
- 将配置文件纳入版本控制系统
- 使用配置管理工具记录变更
- 在配置文件中添加变更注释
- 定期审查配置文件的变更历史
