Neo4j: Neo.ClientError.Cluster.NotALeader - PullRequest
0 голосов
/ 19 июня 2020

Я установил кластер 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».

1 Ответ

0 голосов
/ 19 июня 2020

Поскольку диаграмма Helm развертывает основные серверы neo4j как StatefulSet с автономной службой, Kubernetes DNS создает запись DNS для службы, которая указывает на внутренние IP-адреса модулей, например:

neo4j.default.svc.cluster.local. 30 IN  A   10.233.74.147
neo4j.default.svc.cluster.local. 30 IN  A   10.233.88.205
neo4j.default.svc.cluster.local. 30 IN  A   10.233.88.150

Итак, ваш клиент должен иметь возможность подключиться к домену neo4j (который относится к безголовой службе) и выяснить, какой сервер является текущим лидером.

...