Я установил кластер neo4j на AWS EKS, используя стабильные диаграммы управления
helm install --name neo4j-stg stable/neo4j --set core.numberOfServers=3,readReplica.numberOfServers=3 --set neo4jPassword=**** --set acceptLicenseAgreement=yes
После этого список модулей, запущенных для кластера neo4j -
# kubectl get pod
neo4j-stg-neo4j-core-0 1/1 Running 0 70m
neo4j-stg-neo4j-core-1 1/1 Running 0 70m
neo4j-stg-neo4j-core-2 1/1 Running 0 70m
neo4j-stg-neo4j-replica-554bd99b98-7chx9 1/1 Running 0 70m
neo4j-stg-neo4j-replica-554bd99b98-gr7hp 1/1 Running 0 70m
neo4j-stg-neo4j-replica-554bd99b98-jh4dj 1/1 Running 0 70m
Если мы проверим РОЛЬ, назначенную поду -
# kubectl exec neo-helm-neo4j-core-0 -- bin/cypher-shell --format verbose \
"CALL dbms.cluster.overview() YIELD id, role RETURN id, role"
+---------------------------------------------------------+
| id | role |
+---------------------------------------------------------+
| "3e162b58-7025-4cff-9908-a82a1739f7d7" | "LEADER" |
| "6334fb74-3933-4c39-94e8-578545f13bc6" | "FOLLOWER" |
| "1bc2e35b-fdde-48e4-ac1a-0f10bc6e5ff8" | "FOLLOWER" |
| "795b92b2-7ebc-4981-8b1f-34c7b6c10e44" | "READ_REPLICA" |
| "736cb066-aac2-49fc-8a78-bda4b3d65de0" | "READ_REPLICA" |
| "9b5d0560-f620-40f5-9b05-d8109220dc2a" | "READ_REPLICA" |
+---------------------------------------------------------+
Когда мы пытаемся записать данные в базу данных neo4j, выдается ошибка -
Neo4j::Core::CypherSession::CypherError: Cypher error:
Neo.ClientError.Cluster.NotALeader: No write operations are allowed directly on this database. Writes must pass through the leader. The role of this server is: FOLLOWER
Как служба neo4j обнаруживает модуль «LEADER»?
# kubectl get svc neo4j-stg-neo4j -o yaml
apiVersion: v1
kind: Service
....
....
spec:
clusterIP: None
ports:
- name: http
port: 7474
protocol: TCP
targetPort: 7474
- name: bolt
port: 7687
protocol: TCP
targetPort: 7687
selector:
app: neo4j
component: core
release: neo4j
Как neo4j обеспечивает выполнение операций записи только модулем «LEADER».