此文档主要介绍配置一个neo4j bolt客户端可以连接的集群模式
{
"host": "127.0.0.1",
"port": 7070,
"bolt_port":7687,
"bolt_raft_port":8000,
"bolt_raft_node_id":1,
"bolt_raft_init_peers":[
{"bolt_raft_node_id":1,"ip":"127.0.0.1","bolt_raft_port":8000,"bolt_port":7687},
{"bolt_raft_node_id":2,"ip":"127.0.0.1","bolt_raft_port":8001,"bolt_port":7688},
{"bolt_raft_node_id":3,"ip":"127.0.0.1","bolt_raft_port":8002,"bolt_port":7689}
],
"verbose": 1,
"log_dir": "log"
}{
"host": "127.0.0.1",
"port": 7070,
"bolt_port":7688,
"bolt_raft_port":8001,
"bolt_raft_node_id":2,
"bolt_raft_init_peers":[
{"bolt_raft_node_id":1,"ip":"127.0.0.1","bolt_raft_port":8000,"bolt_port":7687},
{"bolt_raft_node_id":2,"ip":"127.0.0.1","bolt_raft_port":8001,"bolt_port":7688},
{"bolt_raft_node_id":3,"ip":"127.0.0.1","bolt_raft_port":8002,"bolt_port":7689}
],
"verbose": 1,
"log_dir": "log"
}{
"host": "127.0.0.1",
"port": 7070,
"bolt_port":7689,
"bolt_raft_port":8002,
"bolt_raft_node_id":3,
"bolt_raft_init_peers":[
{"bolt_raft_node_id":1,"ip":"127.0.0.1","bolt_raft_port":8000,"bolt_port":7687},
{"bolt_raft_node_id":2,"ip":"127.0.0.1","bolt_raft_port":8001,"bolt_port":7688},
{"bolt_raft_node_id":3,"ip":"127.0.0.1","bolt_raft_port":8002,"bolt_port":7689}
],
"verbose": 1,
"log_dir": "log"
}然后正常启动三个lgraph_server即可。
port: web端口。bolt_port: 对外使用,neo4j bolt客户端连接的端口。bolt_raft_port: 集群内部使用,raft集群内部互相通信时所用的端口,bolt客户端不要连接这个。bolt_raft_node_id: raft集群节点id,整个集群每个节点要唯一。bolt_raft_init_peers: raft集群首次初始化的时候使用,里面记录了每个节点的bolt_raft_node_id,ip,bolt_raft_port,bolt_port这样每个节点都知道其他节点的通信信息,可以互相通信。
raft集群的4个核心配置参数是bolt_port,bolt_raft_port,bolt_raft_node_id,bolt_raft_init_peers。
可以向集群中任意一个节点发送,返回成员列表以及leader信息。
CALL db.bolt.listRaftNodes()
可以向集群中任意一个节点发送,返回每个节点自己的raft状态信息。
CALL db.bolt.getRaftStatus()
添加一个新节点到集群,节点id是4,ip是100.88.118.28, bolt_port是50003, bolt_raft_port是60003。
只能发送给leader节点。
CALL db.bolt.addRaftNode(4, '100.88.118.28', 50003, 60003)
添加一个新的learner节点(不参与选举投票,只同步数据),节点id是4,ip是100.88.118.28, bolt_port是50003, bolt_raft_port是60003。
只能发送给leader节点。
CALL db.bolt.addRaftLearnerNode(4, '100.88.118.28', 50003, 60003)
将节点id是4的实例,从集群中删除,只能发送给leader节点。
只能发送给leader节点。
CALL db.bolt.removeRaftNode(4)
from neo4j import GraphDatabase
def custom_resolver(address):
if address == ('mycluster.com', 9999):
return [
('127.0.0.1', 7687),
('127.0.0.1', 7688),
('127.0.0.1', 7689)
]
else:
return [address]
if __name__ == '__main__':
driver = GraphDatabase.driver(
"neo4j://mycluster.com:9999",
auth=("admin", "73@TuGraph"),
resolver=custom_resolver
)
session = driver.session(database="default")
session.run("CALL db.dropDB()")
session.run("CALL db.createVertexLabel('person', 'id' , 'id', 'INT32', false, 'count', 'INT64', false)")
session.run("create (n1:person {id:1, count:0})")
session.close()
driver.close()
mycluster.com:9999是一个不存在的假的域名地址, GraphDatabase driver初始化的第三个参数传入一个定制化的resolver解析器custom_resolver, custom_resolver里面的逻辑是当域名地址是mycluster.com:9999的时候,返回三个集群地址