Развертывание Janusgraph в kuberntes с хранилищем, поскольку Cassandra выдает ошибку: не удалось создать экземпляр настроенного графа - PullRequest
0 голосов
/ 21 февраля 2020

Постановка задачи -> Я развернул janusgraph на kubernetes с хранилищем как cassandra с использованием рулевой диаграммы. Я получаю сообщение об ошибке: График [graph], настроенный в [conf / gremlin-server / janusgraph.properties], не может быть создан и не будет доступен в Gremlin Server Трассировка стека:

java.lang.RuntimeException: GraphFactory could not instantiate this Graph implementation [class org.janusgraph.core.JanusGraphFactory]
        at org.apache.tinkerpop.gremlin.structure.util.GraphFactory.open(GraphFactory.java:82)
        at org.apache.tinkerpop.gremlin.structure.util.GraphFactory.open(GraphFactory.java:70)
        at org.apache.tinkerpop.gremlin.structure.util.GraphFactory.open(GraphFactory.java:104)
        at org.apache.tinkerpop.gremlin.server.util.DefaultGraphManager.lambda$new$0(DefaultGraphManager.java:57)
        at java.util.LinkedHashMap$LinkedEntrySet.forEach(LinkedHashMap.java:671)
        at org.apache.tinkerpop.gremlin.server.util.DefaultGraphManager.<init>(DefaultGraphManager.java:55)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:110)
        at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:89)
        at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:110)
        at org.apache.tinkerpop.gremlin.server.GremlinServer.main(GremlinServer.java:354)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.tinkerpop.gremlin.structure.util.GraphFactory.open(GraphFactory.java:78)
        ... 13 more
Caused by: java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.cql.CQLStoreManager
        at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:69)
        at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:477)
        at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:409)
        at org.janusgraph.graphdb.configuration.GraphDatabaseConfiguration.<init>(GraphDatabaseConfiguration.java:1376)
        at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:164)
        at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:133)
        at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:113)
        ... 18 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:58)
        ... 24 more
**Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: cassandra-0:9042 (com.datastax.driver.core.exceptions.TransportException: [cassandra-0:9042] Cannot connect))**
        at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:233)
        at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
        at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1483)
        at com.datastax.driver.core.Cluster.init(Cluster.java:159)
        at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:330)
        at com.datastax.driver.core.Cluster.connectAsync(Cluster.java:305)
        at com.datastax.driver.core.Cluster.connect(Cluster.java:247)
        at org.janusgraph.diskstorage.cql.CQLStoreManager.initializeSession(CQLStoreManager.java:265)
        at org.janusgraph.diskstorage.cql.CQLStoreManager.<init>(CQLStoreManager.java:149)
        ... 29 more

Сведения о настройке среды ->
Развернутая Cassandra в качестве службы с сохранением состояния на kubernetes и она работает и работает

Состояние модуля Cassandra

[root@svpod7mgmt002 cassandra]# kubectl get pods -l app=cassandra -o wide
NAME          READY   STATUS    RESTARTS   AGE    IP               NODE    NOMINATED NODE   READINESS GATES
cassandra-0   1/1     Running   0          144m   10.233.120.212   bay10   <none>           <none>
cassandra-1   1/1     Running   0          143m   10.233.85.119    bay7    <none>           <none>

Состояние звонка Кассандры

root@cassandra-0:/# nodetool status
Datacenter: DC1-K8Demo
======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.233.120.146  104.42 KiB  32           100.0%            2b9e4f04-891d-46b1-ab2d-900d88b24739  Rack1-K8Demo
UN  10.233.85.116   94.98 KiB  32            100.0%            c6d1b6f1-1855-4161-9875-997f56bd53fe  Rack1-K8Demo

Включен порт 9042 и 9160 на cassandra-statefulset, а также служба без заголовка

    containers:
      - name: cassandra
        image: gcr.io/google-samples/cassandra:v11
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 7000
          name: intra-node
        - containerPort: 7001
          name: tls-intra-node
        - containerPort: 7199
          name: jmx
        - containerPort: 9042
          name: cql
        - containerPort: 9160
          name: thrift

[root@svpod7mgmt002 cassandra]# kubectl get ep cassandra
NAME        ENDPOINTS                                                                AGE
cassandra   10.233.120.146:9160,10.233.85.116:9160,10.233.120.146:9042 + 1 more...   2d2h

Подключение к кластеру Cassandra

Connect to Cassandra cluster 
root@cassandra-0:/# cqlsh
Connected to K8Demo at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.9 | CQL spec 3.4.2 | Native protocol v4]
Use HELP for help.

Таблица значений Helm.yaml для Janusgraph

# Default values for JanusGraph chart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

image:
  repository: gcr.io/cloud-solutions-images/janusgraph
  tag: v2
  pullPolicy: IfNotPresent

replicaCount: 1

## set any pod specific resource requests here
resources: {}

extraEnvs: {}

service:
  type: LoadBalancer  # Change to LoadBalancer if you plan to access JanusGraph outside k8s cluster
  port: 8182
  serviceAnnotations:
    # the following line is ignored unless unless using a LoadBalancer with GCP
    # cloud.google.com/load-balancer-type: "Internal"

elasticsearch:
  deploy: true  # change to true if you want to deploy Elasticsearch as a requirement along with this chart
  rbac:
    create: true  # required for kubernetes >1.7

properties:
  ## use this section to add or adjust JanusGraph properties as needed
  ## all uncommented values in this section will be placed in the janusgraph.properties file

  storage.backend: cql
  storage.directory: /db/cassandra
  storage.hostname: cassandra-0

## when using local storage and indexing, choose whether to persist day
persistence:
  enabled: true  # set to false if you are testing and do not want to persist data
  path: /db
  accessMode: ReadWriteOnce
  size: 10Gi  
  existingClaim:  
  storageClass: cassandra-local-storage

## To make adjustments to janusgraph.properties and gremlin-server.yaml, provide a
## custom ConfigMap in your k8s cluster (using the helm created ConfigMap as a base).
configMapOverrideName: ""
...