Neo4j(v1.8与v1.9) HA高可用性、备份还原及安全设置—ttlsa教程系列之neo4j(三)

默北 NoSQLNeo4j(v1.8与v1.9) HA高可用性、备份还原及安全设置—ttlsa教程系列之neo4j(三)已关闭评论15,8371字数 17925阅读59分45秒阅读模式

ttlsa教程系列之neo4j---(三)Neo4j(v1.8与v1.9) HA高可用性、备份还原及安全设置
环境说明:
$NEO4J_HOME1 代表服务器10.1.1.76的neo4j安装目录
$NEO4J_HOME2 代表服务器10.1.1.77的neo4j安装目录
$NEO4J_HOME3 代表服务器10.1.1.78的neo4j安装目录

1. 环境基础依赖: 参见《ttlsa教程系列之Neo4j---(一)单机安装步骤》 https://www.ttlsa.com/html/1508.html
Neo4j v1.9版本要安装jdk 7。文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

2. Neo4j HA介绍
Neo4j企业版本才提供高可用性功能。
Neo4j HA主要提供以下两个功能:
a. 容错数据库架构 保存多个数据副本,即使硬件故障,也能保证可读写。
b. 水平方向扩展以读为主架构 读操作负载均衡。
Neo4j HA将单台操作转移到多台服务器上,对应用程序是透明的,无需更改现有的应用程序代码。
Neo4j HA模式总有单个master,零个或多个slave。与其他ms复制架构,Neo4j HA的slave可以处理写操作,而无需重定向写入到master。
Neo4j HA使用Apache ZooKeeper来进行master选举和服务器间状态信息传播。ZooKeeper可以看做是分布式服务协调器。Neo4j HA集群需要依赖ZooKeeper进程初始主选择,新master选举和集群内服务器状态报告。当master故障,新的master将自动选举。当master故障,任何写事务都将回滚,并且在master选举期间,任何写操作都不会发生。
ZooKeeper需要大量ZooKeeper实例从而保证正常运行。这就意味着zookeeper实例应该永远是个奇数,因此可以充分利用硬件。文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

注意:
a. 集群服务器间系统时间要同步,否则ZooKeeper工作会异常。
b. 集群coordinator信息永久保存在集群中,重新配置coordinator服务需关闭实例,删除data/coordinator/version-2/*数据文件,重新启动coordinator。文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

3. Neo4j HA配置参数
ha.server_id : 大于等于0的整数且唯一,必须参数
ha.server : 自动发现,当作为master时,主机和端口绑定
ha.coordinators : zookeeper协调员,以逗号分隔,必须参数
ha.cluster_name : 集群描述
ha.pull_interval : 单位是s, 轮询间隔时间
ha.slave_coordinator_update_mode : 永远不会成为master的slave(值有sync,async,none)
ha.read_timeout : slave等待master响应超时时间,默认20s
ha.lock_read_timeout :
ha.max_concurrent_channels_per_slave : 最大并发信道数量
ha.branched_data_policy :
ha.zk_session_timeout :
ha.tx_push_factor :
ha.tx_push_strategy :文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

4. 配置协调器集群(Coordinator cluster)
修改各台服务器NEO4J目录以下文件:
# vim conf/coord.cfg //设置coordinator搜索其他集群成员IP和端口范围
server.1=10.1.1.76:2888:3888
server.2=10.1.1.77:2888:3888
server.3=10.1.1.78:2888:3888
dataDir=/data/neo4j/coordinator //同步日志存储目录
clientPort=2181 //监听端口文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

为集群内每台服务器创建myid。id与配置文件中的server.1, server.2, server3相同
$neo4j_home1# echo '1' > /data/neo4j/coordinator/myid
$neo4j_home2# echo '2' > /data/neo4j/coordinator/myid
$neo4j_home3# echo '3' > /data/neo4j/coordinator/myid文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

启动协调器集群
# $NEO4J_HOME1/bin/neo4j-coordinator start
# $NEO4J_HOME2/bin/neo4j-coordinator start
# $NEO4J_HOME3/bin/neo4j-coordinator start文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

如果有异常情况,日志信息可以从各个neo4j安装目录下的data/log目录下查看日志文件获得。文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

Neo4j v1.8 High Availability
5. Neo4j HA集群模式配置
红色字体是与单机配置不相同的地方。参见《Neo4j系列---(一)单机安装步骤》
# vim conf/neo4j.properties //在集群每台服务器上
$NEO4J_HOME1# vim conf/neo4j.properties
neostore.nodestore.db.mapped_memory=10G
neostore.relationshipstore.db.mapped_memory=60G
neostore.propertystore.db.mapped_memory=20G
neostore.propertystore.db.strings.mapped_memory=20G
neostore.propertystore.db.arrays.mapped_memory=0M
node_auto_indexing=true
node_keys_indexable=uid,mobile
ha.server_id = 1
ha.coordinators=10.1.1.76:2181, 10.1.1.77:2181, 10.1.1.78:2181
ha.server = 10.1.1.76:6001文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

$NEO4J_HOME2# vim conf/neo4j.properties
neostore.nodestore.db.mapped_memory=10G
neostore.relationshipstore.db.mapped_memory=60G
neostore.propertystore.db.mapped_memory=20G
neostore.propertystore.db.strings.mapped_memory=20G
neostore.propertystore.db.arrays.mapped_memory=0M
node_auto_indexing=true
node_keys_indexable=uid,mobile
ha.server_id = 2
ha.coordinators=10.1.1.76:2181, 10.1.1.77:2181, 10.1.1.78:2181
ha.server = 10.1.1.76:6001文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

$NEO4J_HOME3# vim conf/neo4j.properties
neostore.nodestore.db.mapped_memory=10G
neostore.relationshipstore.db.mapped_memory=60G
neostore.propertystore.db.mapped_memory=20G
neostore.propertystore.db.strings.mapped_memory=20G
neostore.propertystore.db.arrays.mapped_memory=0M
node_auto_indexing=true
node_keys_indexable=uid,mobile
ha.server_id = 3
ha.coordinators=10.1.1.76:2181, 10.1.1.77:2181, 10.1.1.78:2181
ha.server = 10.1.1.76:6001文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

# vim conf/neo4j-server.properties //在集群每台服务器上
$NEO4J_HOME1# vim conf/neo4j-server.properties
org.neo4j.server.database.location=/data/neo4j/graph.db //数据库存储路径
org.neo4j.server.webserver.address=10.1.1.76 //绑定IP
org.neo4j.server.webserver.port=7474 //侦听端口
org.neo4j.server.database.mode=HA
org.neo4j.server.webadmin.rrdb.location=/data/neo4j/rrd
org.neo4j.server.manage.console_engines=
org.neo4j.server.http.log.enabled=true
org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

$NEO4J_HOME2# vim conf/neo4j-server.properties
org.neo4j.server.database.location=/data/neo4j/graph.db
org.neo4j.server.webserver.address=10.1.1.77
org.neo4j.server.webserver.port=7474
org.neo4j.server.database.mode=HA
org.neo4j.server.webadmin.rrdb.location=/data/neo4j/rrd
org.neo4j.server.manage.console_engines=
org.neo4j.server.http.log.enabled=true
org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

$NEO4J_HOME3# vim conf/neo4j-server.properties
org.neo4j.server.database.location=/data/vdb/neo4j/graph.db
org.neo4j.server.webserver.address=10.1.1.78
org.neo4j.server.webserver.port=7474
org.neo4j.server.database.mode=HA
org.neo4j.server.webadmin.rrdb.location=/data/neo4j/rrd
org.neo4j.server.manage.console_engines=
org.neo4j.server.http.log.enabled=true
org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

# vim conf/log4j.properties //zookeeper日志 在集群每台服务器上
log4j.appender.R.File=/data/vdb/neo4j/log/neo4j-zookeeper.log文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

# vim neo4j-wrapper.conf //堆内存配置 在集群每台服务器上
# Uncomment the following line to enable garbage collection logging
wrapper.java.additional.10=-Xloggc:data/log/neo4j-gc.log //GC日志
# Initial Java Heap Size (in MB)
wrapper.java.initmemory=1024
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=1024文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

启动
$NEO4J_HOME1# ./bin/neo4j start
$NEO4J_HOME2# ./bin/neo4j start
$NEO4J_HOME3# ./bin/neo4j start文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

6. 验证
通过web界面访问
http:// 10.1.1.76:7474/webadmin/#/info/org.neo4j/High%20Availability/
http:// 10.1.1.77:7474/webadmin/#/info/org.neo4j/High%20Availability/
http:// 10.1.1.78:7474/webadmin/#/info/org.neo4j/High%20Availability/文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

CURL方式查看结果:
# curl -H "Content-Type:application/json" -d '["org.neo4j:*"]' http:// 10.1.1.76:7474/db/manage/server/jmx/query
"description" : "Information about all instances in this cluster",
"name" : "InstancesInCluster",
"value" : [ {
"description" : "org.neo4j.management.InstanceInfo",
"value" : [ {
"description" : "address",
"name" : "address"
}, {
"description" : "instanceId",
"name" : "instanceId"
}, {
"description" : "lastCommittedTransactionId",
"name" : "lastCommittedTransactionId",
"value" : 1
}, {
"description" : "machineId",
"name" : "machineId",
"value" : 1
}, {
"description" : "master",
"name" : "master",
"value" : true
} ],
"type" : "org.neo4j.management.InstanceInfo"
}文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

Neo4j v1.9 High Availability
7. Neo4j 1.9版本的HA配置
Neo4j 1.9版本HA不需要依赖zookeeper。文章源自运维生存时间-https://www.ttlsa.com/nosql/neo4j-ha-3/

在集群内,Neo4j HA使用它自己的Paxos来实现集群内所有成员的加入离开,master选举,状态信息报告。
通常情况下,在新的master选举期间,和完成角色转换短短几秒钟内,这段时间内不会有写操作发生。写操作被阻塞或极少情况下抛出异常。
仲裁节点:选出master节点。($neo4j_home# ./bin/neo4j-arbiter start)

Neo4j HA配置参数:
ha.server_id : 大于等于0的整数且唯一,必须参数
ha.server : 自动发现,当作为master时,主机和端口绑定,如my-domain.com:6001
ha.discovery.enabled : 是否使用ha.discovery.url定义群集
ha.discovery.url : 如果ha.discovery.enabled真,用于定义集群,如file://my.server:8080/my-cluster
ha.initial_hosts : 如果ha.discovery.enabled假,其他成员以逗号分隔加入到集群的列表。如果没有可用成员,将创建一个新的集群。
ha.cluster_server : 自动发现。主机与端口绑定,集群管理通讯。
ha.pull_interval : 多少间隔时间slave从master主动拉取数据更新。在写事务时默认是不定期更新。
ha.read_timeout : 等待master响应超时时间,默认20s
ha.lock_read_timeout :
ha.state_switch_timeout : 最大多长时间,master/slave进行优雅的角色切换
ha.max_concurrent_channels_per_slave : 最大并发信道数量
ha.branched_data_policy :
ha.tx_push_factor :
ha.tx_push_strategy :

Neo4j HA集群模式配置
红色字体是与单机配置不相同的地方。参见《Neo4j系列---(一)单机安装步骤》
$NEO4J_HOME1# vim conf/neo4j.properties
neostore.nodestore.db.mapped_memory=10G
neostore.relationshipstore.db.mapped_memory=60G
neostore.propertystore.db.mapped_memory=20G
neostore.propertystore.db.strings.mapped_memory=20G
neostore.propertystore.db.arrays.mapped_memory=0M
node_auto_indexing=true
node_keys_indexable=uid,mobile
keep_logical_logs=true
online_backup_enabled=true
online_backup_server=127.0.0.1:6362
ha.server_id = 1
ha.server = 10.1.1.76:6001
ha.cluster_server = 10.1.1.76:5001
ha.initial_hosts = 10.1.1.76:5001,10.1.1.77:5001,10.1.1.78:5001

$NEO4J_HOME1# vim conf /neo4j-server.properties
org.neo4j.server.database.location=/data/neo4j/graph.db
org.neo4j.server.webserver.address=10.1.1.76
org.neo4j.server.webserver.port=7474
org.neo4j.server.webserver.https.enabled=true
org.neo4j.server.webserver.https.port=7473
org.neo4j.server.webserver.https.cert.location=conf/ssl/snakeoil.cert
org.neo4j.server.webserver.https.key.location=conf/ssl/snakeoil.key
org.neo4j.server.webserver.https.keystore.location=data/keystore
org.neo4j.server.webadmin.rrdb.location=/data/neo4j/rrd
org.neo4j.server.webadmin.data.uri=/db/data/
org.neo4j.server.webadmin.management.uri=/db/manage/
org.neo4j.server.database.mode=HA
org.neo4j.server.db.tuning.properties=conf/neo4j.properties
org.neo4j.server.manage.console_engines=
org.neo4j.server.http.log.enabled=true
org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml

$NEO4J_HOME1# vim conf /neo4j-wrapper.conf
wrapper.java.additional.1=-Dorg.neo4j.server.properties=conf/neo4j-server.properties
wrapper.java.additional.2=-Djava.util.logging.config.file=conf/logging.properties
wrapper.java.additional.3=-Djava.net.preferIPv4Stack=true
wrapper.java.additional.4=-Xloggc:/data/weblogs/neo4j_log/neo4j-gc.log
wrapper.java.initmemory=1024
wrapper.java.maxmemory=1024
wrapper.java.app.mainclass=org.neo4j.server.Bootstrapper
wrapper.pidfile=/data/neo4j/neo4j-server.pid
wrapper.lockfile=/data/neo4j/neo4j-server.lck
wrapper.name=neo4j

$NEO4J_HOME1# vim conf /neo4j-http-logging.xml
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/data/weblogs/neo4j_log/neo4j_http.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/weblogs/neo4j_log/neo4j_http.%d{yyyy-MM-dd_HH}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>

<encoder>
<!-- Note the deliberate misspelling of "referer" in accordance with RFC1616 -->
<pattern>%h %l %user [%t{dd/MMM/yyyy:HH:mm:ss Z}] "%r" %s %b "%i{Referer}" "%i{User-Agent}"</pattern>
</encoder>
</appender>

<appender-ref ref="FILE"/>
</configuration>
-------------------------------------------------------------------------------------------------
$NEO4J_HOME2# vim conf/neo4j.properties
neostore.nodestore.db.mapped_memory=10G
neostore.relationshipstore.db.mapped_memory=60G
neostore.propertystore.db.mapped_memory=20G
neostore.propertystore.db.strings.mapped_memory=20G
neostore.propertystore.db.arrays.mapped_memory=0M
node_auto_indexing=true
node_keys_indexable=uid,mobile
keep_logical_logs=true
online_backup_enabled=true
online_backup_server=127.0.0.1:6362
ha.server_id = 2
ha.server = 10.1.1.76:6001
ha.cluster_server = 10.1.1.76:5001
ha.initial_hosts = 10.1.1.76:5001,10.1.1.77:5001,10.1.1.78:5001

$NEO4J_HOME2# vim conf /neo4j-server.properties
org.neo4j.server.database.location=/data/neo4j/graph.db
org.neo4j.server.webserver.address=10.1.1.77
org.neo4j.server.webserver.port=7474
org.neo4j.server.webserver.https.enabled=true
org.neo4j.server.webserver.https.port=7473
org.neo4j.server.webserver.https.cert.location=conf/ssl/snakeoil.cert
org.neo4j.server.webserver.https.key.location=conf/ssl/snakeoil.key
org.neo4j.server.webserver.https.keystore.location=data/keystore
org.neo4j.server.webadmin.rrdb.location=/data/neo4j/rrd
org.neo4j.server.webadmin.data.uri=/db/data/
org.neo4j.server.webadmin.management.uri=/db/manage/
org.neo4j.server.database.mode=HA
org.neo4j.server.db.tuning.properties=conf/neo4j.properties
org.neo4j.server.manage.console_engines=
org.neo4j.server.http.log.enabled=true
org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml

$NEO4J_HOME2# vim conf /neo4j-wrapper.conf
wrapper.java.additional.1=-Dorg.neo4j.server.properties=conf/neo4j-server.properties
wrapper.java.additional.2=-Djava.util.logging.config.file=conf/logging.properties
wrapper.java.additional.3=-Djava.net.preferIPv4Stack=true
wrapper.java.additional.4=-Xloggc:/data/weblogs/neo4j_log/neo4j-gc.log
wrapper.java.initmemory=1024
wrapper.java.maxmemory=1024
wrapper.java.app.mainclass=org.neo4j.server.Bootstrapper
wrapper.pidfile=/data/neo4j/neo4j-server.pid
wrapper.lockfile=/data/neo4j/neo4j-server.lck
wrapper.name=neo4j

$NEO4J_HOME2# vim conf /neo4j-http-logging.xml
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/data/weblogs/neo4j_log/neo4j_http.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/weblogs/neo4j_log/neo4j_http.%d{yyyy-MM-dd_HH}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>

<encoder>
<!-- Note the deliberate misspelling of "referer" in accordance with RFC1616 -->
<pattern>%h %l %user [%t{dd/MMM/yyyy:HH:mm:ss Z}] "%r" %s %b "%i{Referer}" "%i{User-Agent}"</pattern>
</encoder>
</appender>

<appender-ref ref="FILE"/>
</configuration>

---------------------------------------------------------------------------------------------------------------
$NEO4J_HOME3# vim conf/neo4j.properties
neostore.nodestore.db.mapped_memory=10G
neostore.relationshipstore.db.mapped_memory=60G
neostore.propertystore.db.mapped_memory=20G
neostore.propertystore.db.strings.mapped_memory=20G
neostore.propertystore.db.arrays.mapped_memory=0M
node_auto_indexing=true
node_keys_indexable=uid,mobile
keep_logical_logs=true
online_backup_enabled=true
online_backup_server=127.0.0.1:6362
ha.server_id = 3
ha.server = 10.1.1.76:6001
ha.cluster_server = 10.1.1.76:5001
ha.initial_hosts = 10.1.1.76:5001,10.1.1.77:5001,10.1.1.78:5001

$NEO4J_HOME3# vim conf /neo4j-server.properties
org.neo4j.server.database.location=/data/neo4j/graph.db
org.neo4j.server.webserver.address=10.1.1.78
org.neo4j.server.webserver.port=7474
org.neo4j.server.webserver.https.enabled=true
org.neo4j.server.webserver.https.port=7473
org.neo4j.server.webserver.https.cert.location=conf/ssl/snakeoil.cert
org.neo4j.server.webserver.https.key.location=conf/ssl/snakeoil.key
org.neo4j.server.webserver.https.keystore.location=data/keystore
org.neo4j.server.webadmin.rrdb.location=/data/neo4j/rrd
org.neo4j.server.webadmin.data.uri=/db/data/
org.neo4j.server.webadmin.management.uri=/db/manage/
org.neo4j.server.database.mode=HA
org.neo4j.server.db.tuning.properties=conf/neo4j.properties
org.neo4j.server.manage.console_engines=
org.neo4j.server.http.log.enabled=true
org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml

$NEO4J_HOME3# vim conf /neo4j-wrapper.conf
wrapper.java.additional.1=-Dorg.neo4j.server.properties=conf/neo4j-server.properties
wrapper.java.additional.2=-Djava.util.logging.config.file=conf/logging.properties
wrapper.java.additional.3=-Djava.net.preferIPv4Stack=true
wrapper.java.additional.4=-Xloggc:/data/weblogs/neo4j_log/neo4j-gc.log
wrapper.java.initmemory=1024
wrapper.java.maxmemory=1024
wrapper.java.app.mainclass=org.neo4j.server.Bootstrapper
wrapper.pidfile=/data/neo4j/neo4j-server.pid
wrapper.lockfile=/data/neo4j/neo4j-server.lck
wrapper.name=neo4j

$NEO4J_HOME3# vim conf /neo4j-http-logging.xml
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/data/weblogs/neo4j_log/neo4j_http.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/weblogs/neo4j_log/neo4j_http.%d{yyyy-MM-dd_HH}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>

<encoder>
<!-- Note the deliberate misspelling of "referer" in accordance with RFC1616 -->
<pattern>%h %l %user [%t{dd/MMM/yyyy:HH:mm:ss Z}] "%r" %s %b "%i{Referer}" "%i{User-Agent}"</pattern>
</encoder>
</appender>

<appender-ref ref="FILE"/>
</configuration>
Neo4j 备份与还原
备份介绍:
Neo4j企业版本才提供备份服务。只有配置了参数 online_backup_enabled=true 的数据库才可以进行备份,默认端口是6362。(neo4j 1.8版本默认开启,neo4j 1.9版本需要指定)
支持两种备份类型:完整备份和增量备份。
一个完整备份在不进行任何锁定的情况下拷贝数据库文件,而不影响线上任何操作。为了确保备份数据的一致性,当备份完成后,在整个备份过程中的事务都会在备份文件上重新执行一遍。
增量备份不会拷贝存储文件,而是拷贝在完整备份或增量备份之后的事务日志,然后在已经存在的备份上面执行一次。比完整备份更高效,要求在进程增量备份前必须要存在一个完整备份。
备份一旦创建,备份文件都表示一个持久化的数据库快照,都可以用来启动一个Neo4j数据库实例。

备份语法如下:
<running mode>://<host>[:port]{,<host>[:port]*}
running mode必须指定,且只能是single(单机模式)或ha(集群模式)。

# ./neo4j-backup -full -from single://10.1.242.124 -to /data/backup/neo4j-backup //单机模式下执行一次完整备份
Performing full backup from 'single://10.1.242.124'
.............................
[29 Files copied]
Full consistency check
.................... 10%
.................... 20%
.................... 30%
.................... 40%
.................... 50%
.................... 60%
.................... 70%
.................... 80%
.................... 90%
.................... 100%
Done
# ./neo4j-backup -incremental -from single://10.1.242.124 -to /data/backup/neo4j-backup //单机模式下执行一次增量备份
Performing incremental backup from 'single://10.1.242.124'
[0 Transactions applied]
Done

HA模式下备份:
Neo4j v1.8版本下,需要指定一个或多个管理集群的协调器。如果为HA集群指定了一个集群名称,那么在备份的时候需要指定这个名称(增加一个配置参数: -cluster my_custom_cluster_name),以至于备份系统知道哪些集群需要备份。
注意:指定ha.coordinators地址。
# ./neo4j-backup -full -from ha://10.1.1.76:2181,10.1.1.77:2181 -to /backup/neo4j-backup //HA模式下,执行一次完整备份
# ./neo4j-backup -incremental -from ha://10.1.1.76:2181 -to /backup/neo4j-backup //HA模式下,执行一次增量备份

Neo4j v1.9版本下,需要指定一个或多个HA集群中的目标成员。
注意: 必须指定ha.cluster_server地址而不是ha.server地址。
# ./neo4j-backup -full -from ha://10.1.1.76:5001,10.1.1.77:5001 -to /backup/neo4j-backup //HA模式下,执行一次完整备份
# ./neo4j-backup -incremental -from ha://10.1.1.76:5001 -to /backup/neo4j-backup //HA模式下,执行一次增量备份

恢复:
Neo4j备份的内容是某一时刻的完整数据库。恢复时,只需要将数据库目录指定到备份的数据目录即可。
Neo4j 安全
Neo4j在数据层面没对安全做限制。在生产环境下应考虑安全问题。
1. 对服务器端口做白名单限制。
Port Desc
7473/7474 Webadmin管理端口
6001 集群内成员通讯端口
1337 远程shell端口
6362 Single备份服务端口
2181 HA备份服务端口(v1.8)
5001 HA备份服务端口(v1.9)

2. 使用第三方安全认证插件
# wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz
# wget --no-check-certificate https://github.com/neo4j-contrib/authentication-extension/archive/1.8.zip -O neo4j-1.8-authentication-extension.zip
# unzip neo4j-1.8-authentication-extension.zip
# cd authentication-extension-1.8/
# /usr/local/apache-maven-3.0.5/bin/mvn clean package //打包
# cp authentication-extension-1.8.1-1.0-SNAPSHOT.jar /usr/local/neo4j/plugins/authentication-extension-1.8.1-1.0.jar
# vim neo4j-server.properties
org.neo4j.server.credentials=admin:nd.com.cn //用户名:密码
org.neo4j.server.thirdparty_jaxrs_classes=org.neo4j.server.extension.auth=/auth

用户管理操作:
# curl --user admin:nd.com.cn -d "user=user1:passwd1" -XPOST http://10.1.242.124:7474/auth/add-user-rw //添加读写用户
OK //返回OK说明成功
# curl --user admin:nd.com.cn -d "user=user2:passwd2" -XPOST http://10.1.242.124:7474/auth/add-user-ro //添加只读用户
OK
# curl-user admin:nd.com.cn 10.1.242.124:7474/auth/list //列出所有用户
{"user1:passwd1":"RW","user2:passwd2":"RO"}
# curl --user admin:nd.com.cn -d "user=user2:passwd2" http://10.1.242.124:7474/auth/remove-user //删除用户
OK
# curl --user admin:nd.com.cn 10.1.242.124:7474/auth/list
{"user1:passwd1":"RW"}

验证:
# curl -I 10.1.242.124:7474
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="neo4j graphdb"
Content-Type: text/html; charset=iso-8859-1
Cache-Control: must-revalidate,no-cache,no-store
Content-Length: 1371
Server: Jetty(6.1.25)

Web管理界面:

转载请注明出处https://www.ttlsa.com/html/1541.html

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 26/06/2013 17:56:28
  • 转载请务必保留本文链接:https://www.ttlsa.com/nosql/neo4j-ha-3/
  • neo4j
  • SNS
  • Social Network Service
  • 图数据库
  • 用户关系挖掘
  • 高可用性