Neo4j因果集羣讀寫分離

使用Neo4j因果集羣,主要是爲了高可用、高併發。我們知道,Neo4j 集羣 CORE 節點可以 READ 和 WRITE,而其它節點(FOLLOWER 和 READ REPLICA)都只能 READ。
如果您想把 READ 的請求只發送到READ REPLICA,該怎麼辦?
如果您有類似需求,則可以執行以下操作:
1)單個 DNS 下添加多個 A 項指向所有 CORE 節點,如: http://core.graph.example.com;
2)另一個 DNS 下添加多個 A 項指向所有 READ REPLICA 節點,如: http://read.graph.example.com
3)使用以下 URI 訪問 READ REPLICA:“ bolt://http://read.graph.example.com:7687 ”
此方式:

優點:即使 CORE 節點關閉,應用程序仍可以連接到 READ REPLICA。
缺點:客戶端訪問只讀節點時只能使用 BOLT 協議,只能與某個READ REPLICA 通信,沒有利用所有可用的 READ REPLICA節點。

在這裏插入圖片描述
如果您遇到類似以下錯誤($NEO4J_HOME/logs/debug.log)服務器更新路由表失敗

ERROR 1 — [o4jDriverIO-5-2] LoadBalancer : Failed to update routing table. Current routing table: Ttl 1582554193442, currentTime 1582554193471, routers AddressSet=[], writers AddressSet=[], readers AddressSet=[]Suppressed: org.neo4j.driver.exceptions.DiscoveryException: Failed to update routing table with server ‘server-foo:7687’.Caused by: org.neo4j.driver.exceptions.ClientException: There is no procedure with the name dbms.cluster.routing.getRoutingTable registered for this database instance. Please ensure you’ve spelled the procedure name correctly and that the procedure is properly deployed.

可以通過檢查 DNS 來解決。路由表是通過 bolt+routing URI 創建,例如,bolt+routing://http://graph.example.com:7687。URI 中地址必須是 CORE 服務器地址。因此,很可能您遇到上述錯誤,您可以使用 DNS 解析爲CORE和READ REPLICA節點。READ REPLICA 的DNS記錄不應包含條目。當主機名解析爲 CORE 節點IP地址時,一切正常。但是,當主機名解析爲READ REPLICA IP地址時,驅動程序將無法連接到數據庫,因爲它無法從該服務器獲取路由表。
解決方法:
更改DNS,以確保名稱解析僅包括CORE節點,而不包括READ REPLICA。
原文鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章