Skip to content

Running HA ArcadeDB in Kubernetes #699

Description

@MrHassanMurtaza

ArcadeDB Version: 22.8.1

JDK Version:

OS: Openshift on RH Linux 4.8

Expected behavior

Being able to deploy highly available statefulset on Kubernetes. I don't find a lot of information in the documentation itself:

Actual behavior

I'm seeing this error in each pod:

 █████╗ ██████╗  ██████╗ █████╗ ██████╗ ███████╗██████╗ ██████╗
██╔══██╗██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔════╝██╔══██╗██╔══██╗
███████║██████╔╝██║     ███████║██║  ██║█████╗  ██║  ██║██████╔╝
██╔══██║██╔══██╗██║     ██╔══██║██║  ██║██╔══╝  ██║  ██║██╔══██╗
██║  ██║██║  ██║╚██████╗██║  ██║██████╔╝███████╗██████╔╝██████╔╝
╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝╚═╝  ╚═╝╚═════╝ ╚══════╝╚═════╝ ╚═════╝
PLAY WITH DATA                                    arcadedb.com
./server.sh: line 82: can't create /home/arcadedb/bin/arcadedb.pid: Permission denied
Can't load log handler "java.util.logging.FileHandler"
java.nio.file.NoSuchFileException: log/arcadedb.log.0.lck
java.nio.file.NoSuchFileException: log/arcadedb.log.0.lck
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
        at java.base/sun.nio.fs.UnixFileSystemProvider.newFileChannel(UnixFileSystemProvider.java:182)
        at java.base/java.nio.channels.FileChannel.open(FileChannel.java:292)
        at java.base/java.nio.channels.FileChannel.open(FileChannel.java:345)
        at java.logging/java.util.logging.FileHandler.openFiles(FileHandler.java:512)
        at java.logging/java.util.logging.FileHandler.<init>(FileHandler.java:279)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
        at java.base/java.lang.Class.newInstance(Class.java:584)
        at java.logging/java.util.logging.LogManager.createLoggerHandlers(LogManager.java:1000)
        at java.logging/java.util.logging.LogManager$4.run(LogManager.java:970)
        at java.logging/java.util.logging.LogManager$4.run(LogManager.java:966)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.logging/java.util.logging.LogManager.loadLoggerHandlers(LogManager.java:966)
        at java.logging/java.util.logging.LogManager.initializeGlobalHandlers(LogManager.java:2417)
        at java.logging/java.util.logging.LogManager$RootLogger.accessCheckedHandlers(LogManager.java:2511)
        at java.logging/java.util.logging.Logger.getHandlers(Logger.java:2089)
        at com.arcadedb.log.DefaultLogger.installCustomFormatter(DefaultLogger.java:79)
        at com.arcadedb.log.DefaultLogger.<init>(DefaultLogger.java:41)
        at com.arcadedb.log.DefaultLogger.<clinit>(DefaultLogger.java:36)
        at com.arcadedb.log.LogManager.<init>(LogManager.java:31)
        at com.arcadedb.log.LogManager.<clinit>(LogManager.java:29)
        at com.arcadedb.server.ArcadeDBServer.start(ArcadeDBServer.java:98)
        at com.arcadedb.server.ArcadeDBServer.main(ArcadeDBServer.java:90)
Can't load log handler "java.util.logging.FileHandler"
java.nio.file.NoSuchFileException: log/arcadedb.log.0.lck
java.nio.file.NoSuchFileException: log/arcadedb.log.0.lck
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
        at java.base/sun.nio.fs.UnixFileSystemProvider.newFileChannel(UnixFileSystemProvider.java:182)
        at java.base/java.nio.channels.FileChannel.open(FileChannel.java:292)
        at java.base/java.nio.channels.FileChannel.open(FileChannel.java:345)
        at java.logging/java.util.logging.FileHandler.openFiles(FileHandler.java:512)
        at java.logging/java.util.logging.FileHandler.<init>(FileHandler.java:279)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
        at java.base/java.lang.Class.newInstance(Class.java:584)
        at java.logging/java.util.logging.LogManager.createLoggerHandlers(LogManager.java:1000)
        at java.logging/java.util.logging.LogManager$4.run(LogManager.java:970)
        at java.logging/java.util.logging.LogManager$4.run(LogManager.java:966)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.logging/java.util.logging.LogManager.loadLoggerHandlers(LogManager.java:966)
        at java.logging/java.util.logging.LogManager.initializeGlobalHandlers(LogManager.java:2417)
        at java.logging/java.util.logging.LogManager$RootLogger.accessCheckedHandlers(LogManager.java:2511)
        at java.logging/java.util.logging.Logger.getHandlers(Logger.java:2089)
        at com.arcadedb.log.DefaultLogger.installCustomFormatter(DefaultLogger.java:79)
        at com.arcadedb.log.DefaultLogger.<init>(DefaultLogger.java:41)
        at com.arcadedb.log.LogManager.<init>(LogManager.java:31)
        at com.arcadedb.log.LogManager.<clinit>(LogManager.java:29)
        at com.arcadedb.server.ArcadeDBServer.start(ArcadeDBServer.java:98)
        at com.arcadedb.server.ArcadeDBServer.main(ArcadeDBServer.java:90)

2022-12-23 12:27:22.249 INFO  [ArcadeDBServer] <ArcadeDB_0> ArcadeDB Server v22.8.1 (build b63f0402a9206830c3ec100766302c18038c8f17/1659468151386/main) is starting up...
2022-12-23 12:27:22.250 INFO  [ArcadeDBServer] <ArcadeDB_0> Starting ArcadeDB Server with plugins [] ...
2022-12-23 12:27:22.268 INFO  [ArcadeDBServer] <ArcadeDB_0> - JMX Metrics Started...
2022-12-23 12:27:22.323 INFO  [ServerSecurity] <ArcadeDB_0> Creating root user with the provided password<ArcadeDB_0> Error on saving security configuration to file 'server-users.jsonl'
java.io.FileNotFoundException: ../config/server-users.jsonl (Permission denied)
        at java.base/java.io.FileOutputStream.open0(Native Method)
        at java.base/java.io.FileOutputStream.open(FileOutputStream.java:298)
        at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:237)
        at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:187)
        at java.base/java.io.FileWriter.<init>(FileWriter.java:176)
        at com.arcadedb.server.security.SecurityUserFileRepository.save(SecurityUserFileRepository.java:48)
        at com.arcadedb.server.security.ServerSecurity.saveUsers(ServerSecurity.java:310)
        at com.arcadedb.server.security.ServerSecurity.askForRootPassword(ServerSecurity.java:419)
        at com.arcadedb.server.security.ServerSecurity.loadUsers(ServerSecurity.java:126)
        at com.arcadedb.server.ArcadeDBServer.start(ArcadeDBServer.java:127)
        at com.arcadedb.server.ArcadeDBServer.main(ArcadeDBServer.java:90)

2022-12-23 12:27:22.653 INFO  [HttpServer] <ArcadeDB_0> - Starting HTTP Server (host=0.0.0.0 port=2480-2489)...
2022-12-23 12:27:22.711 INFO  [undertow] starting server: Undertow - 2.2.18.Final
2022-12-23 12:27:22.722 INFO  [xnio] XNIO version 3.8.7.Final
2022-12-23 12:27:22.735 INFO  [nio] XNIO NIO Implementation Version 3.8.7.Final
2022-12-23 12:27:22.767 INFO  [threads] JBoss Threads version 3.1.0.Final
2022-12-23 12:27:22.812 INFO  [HttpServer] <ArcadeDB_0> - HTTP Server started (host=0.0.0.0 port=2480)Exception in thread "main" java.lang.NullPointerException
        at java.base/java.util.Objects.requireNonNull(Objects.java:221)
        at java.base/java.util.Arrays$ArrayList.<init>(Arrays.java:4323)
        at java.base/java.util.Arrays.asList(Arrays.java:4310)
        at com.arcadedb.server.ha.ReplicationLogFile.openLastFileChunk(ReplicationLogFile.java:425)
        at com.arcadedb.server.ha.ReplicationLogFile.<init>(ReplicationLogFile.java:95)
        at com.arcadedb.server.ha.HAServer.startService(HAServer.java:152)
        at com.arcadedb.server.ArcadeDBServer.start(ArcadeDBServer.java:139)
        at com.arcadedb.server.ArcadeDBServer.main(ArcadeDBServer.java:90)

Steps to reproduce

I'm deploying the following kubernetes manifest:

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: arcadedb
spec:
  # serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: arcadedb
  template:
    metadata:
      labels:
        app: arcadedb
    spec:
      containers:
      - name: arcadedb
        image: arcadedata/arcadedb:22.8.1
        ports:
        - containerPort: 2480
        env: 
          - name: JAVA_OPTS
            value: "-Darcadedb.server.rootPassword=playwithdata -Darcadedb.ha.enabled=true -Darcadedb.ha.k8s=true -Darcadedb.ha.serverList=arcadedb-0,arcadedb-1,arcadedb-2"

<An SQL script to reproduce the problem or a JUnit test case will increase A LOT the chance to have a quick fix>

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions