高可用性(High Availability)特征只能在Neo4j 企业版中可用,Neo4j High Availability 或者 Neo4j HA 提供以下两点主要特征:
1、 可以是一个使用多台neo4j从数据库设置可以替代单台neo4j主数据库的容错架构数据库,这可以在硬件设备损坏的情况下使数据库具备完善的功能和读写操作的能力。
2、 系统具有比单台neo4j数据库处理更多的读取负载处理的横向扫描主读架构。
架构Neo4j HA 设计的目的是为了从一台到多台机器transition的操作简单,而不需要在已存在的应用中做任何更改。
考虑到使用嵌入式Neo4j 和 使用单独Neo4j服务器的已存在的应用。发布此种应用到多台neo4j服务器的设置仅需要将从EmbeddedGraphDatabase创建的GraphDatabaseService改成HighlyAvailableGraphDatabase。因为两者都实现了相同的接口,不需要其他附加的改变了。
在HA模式向运行多个Neo4j数据库实体的经典设置
当neo4j数据库以HA模式运行时,总是会有一个单台的主机(master),零个或者更多的从机(slave)。与其他主从复制设置相对比,Neo4j可以从从节点(slave)处理写入,所以不需要从主节点直接写入。
为保持数据一致性,从节点(slave)将于主节点(master)同步处理写入。然而更新操作最终从主节点(master)传播到从节点(slave),所以一个从节点的写入在其他所有从节点上不是立即可见的。这是多台设备与单台设备在Neo4j HA模式下运行操作的唯一区别,所有其他ACID特征都一样。
设置与配置Neo4j HA 可以设置调解不同加载请求、容错处理和可用硬件配置。
在一个集群中,Neo4j HA使用Apache Zookeeper来对一般集群和机器状态信息的选择和传播。Zookeeper可以看作一个分布式协调器(Coordinator)服务,Neo4j HA需要协调服务来初始化主节点的选择,和新节点的选择(当前主节点出现意外状况时)和当前Neo4j HA集群一般状态信息的发布(如当一台服务器加入或撤离集群时)。
读取操作通过GraphDatabaseService API一直工作,当一个主机存在时,即使协调失败也能安全写入。
Zookeeper需要对多个zookeeper实体进行适当的操作。也就是说zookeeper实体数量为奇数时将更能有效地利用硬件。
为进一步阐明Neo4j HA的容错处理特征,这有一些示例设置。
小型配置3台物理(虚拟)机器
每台机器上运行一个协调器(coordinator)。
每台机器上运行一个Neo4j HA实体。
这个设置是相对硬件设备保守的设置,同时又能减轻读取负载,当最少2个协调器运行时,能够保证安全操作。当协调器和Neo4j HA 同时运行在一台机器上时,在大多数情况下意味着仅仅只有一台服务器挂掉才可以被接受。
中型配置Ø 5-7台机器
Ø 在3、5、7台机器上运行协调器。
Ø Neo4j HA可以运行在5台或者以上的机器上。
这种配置以为着必须管理两种不同的机器设置(有些机器同时运行协调器和Neo4j HA)。容错性将依靠有多少台运行协调器的机器。有3台协调器的机器中,当一台协调器挂掉是安全的,5台协调器的集群中2台挂掉是安全的,7台中3台挂掉能够保证安全性。
大型配置Ø 8台或者更多的机器
Ø 3台或者更多的Neo4j HA机器
Ø 5台或者更多的协调器,在分开专用的机器上。
在这种配置中所有的协调器都运行在分开的机器上,作为专用服务器。专用协调器集群在一半或者以下的机器当掉时安全。Neo4j HA集群可以在做少一个单独的存活机器上执行操作。在这种配置上添加更多的Neo4j HA实体机器将更加方便,因为协调器集群是作为单独的服务运行的。
安装注释注意:HighAvailabilityGraphDatabase支持EmbeddedGraphDatabase同样的API,所以不需要其他附加配置参数。
HighAvailabilityGraphDatabase配置参数
参数名称
值
示例值
是否必须
ha.server_id
Integer >= 0
1
是
ha.server
(自动发现)host与port绑定作为主机时
Mydomain.com:6001
否
ha.coordinaters
协调器链接地址,逗号分隔
localhost:2181,localhost:2182
是
ha.pull_internal
从机到主机的检查时间(单位:秒)
30
否
ha.slave_coordinator_update_mode
创建一个从机,此从机以后都不可能成为主机
None
否
ha.read_timeout
丢弃前,从机等待主机响应时间(默认20秒)
20
否
ha.lock_read_timeout
丢弃前,从机锁定获得请求并等待主机响应时间
40
注意: