图数据库neo4j集群中的读写及其一致性行为
背景知识
为了更好说明neo4j集群中的读写及其一致性行为,有必要先对neo4j的部署模式,驱动,会话,事务等概念做下基本介绍。
neo4j部署模式
neo4j有3种部署模式,分别叫stand-alone instance(单机模式),HA cluster(高可用模式)和causal cluster(因果集群模式,本文简称为集群模式)。单机模式用于neo4j开源版本,后2种模式仅在neo4j企业版能够使用,高可用模式在neo4j早期版本上使用,新的neo4j企业版采用更加强大的集群模式。通过neo4j的配置项dbms.mode可以设置节点的角色:
- 单机模式:节点角色为SINGLE
- 高可用模式:节点角色可为HA或ARBITER,ARBITER表示没有数据的节点;
- 集群模式:节点角色可为CORE或READ_REPLICA。
集群模式
causal cluster集群的示意图如下所示:
图中间是由3个CORE节点构成的核心读写集群,使用raft协议进行数据一致性保障,会自动选择一个节点作为LEADER提供读写服务,其余节点作为FOLLOWER节点复制LEADER推送的raft日志;如果LEADER节点由于网络隔离或crash而无法正常服务,FOLLOWER节点会进行重新选择一个新的LEADER节点。为了提高集群稳定性,减少不必要的选主操作,选主会分为2个阶段:预选和正式选举。如果在预选时没有得到足够多的节点回复,就不会发起正式选举(与MongoDB类似)。
外围一圈为只读集群,节点角色均为READ_REPLICA,提供查询、报表和分析等只读服务。只读节点异步复制CORE节点的事务日志进行数据catchup。
BOLT驱动
neo4j提供了强大的客户端驱动,能够自动处理LEADER节点变更,基于负载进行请求路由,用户还可以根据业务需求来自定义路由策略,非常灵活。
BOLT驱动有2种使用模式,分别是bolt和bolt+routing。前者一般用于单机部署模式,或者想直连集群下的某个特定节点;后者是连接到整个集群上。连接URI如下所示:
jdbc:neo4j:bolt://host:port/?username=neo4j,password=xxxx
jdbc:neo4j:bolt+routing://host1:port1,host2:port2,…,hostN:portN/?username=neo4j,password=xxxx
相关文章