Skip to content

Latest commit

 

History

History
156 lines (118 loc) · 4.36 KB

File metadata and controls

156 lines (118 loc) · 4.36 KB

bolt 高可用集群模式

此文档主要介绍配置一个neo4j bolt客户端可以连接的集群模式

创建3节点集群

节点1配置

{
  "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"
}

节点2配置

{
  "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"
}

节点3配置

{
  "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状态信息.

可以向集群中任意一个节点发送,返回每个节点自己的raft状态信息。

CALL db.bolt.getRaftStatus()

添加一个新节点到集群

添加一个新节点到集群,节点id是4,ip是100.88.118.28, bolt_port50003, bolt_raft_port60003

只能发送给leader节点。

CALL db.bolt.addRaftNode(4, '100.88.118.28', 50003, 60003)

添加一个learner节点到集群

添加一个新的learner节点(不参与选举投票,只同步数据),节点id是4,ip是100.88.118.28, bolt_port50003, bolt_raft_port60003

只能发送给leader节点。

CALL db.bolt.addRaftLearnerNode(4, '100.88.118.28', 50003, 60003)

从集群中删除一个成员节点

将节点id是4的实例,从集群中删除,只能发送给leader节点。

只能发送给leader节点。

CALL db.bolt.removeRaftNode(4)

bolt客户端连接实例

python

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的时候,返回三个集群地址