---
title: Building a Mini Database Cluster for Fun - LEGO Edition -
description: Use 3 Mini PC and some LEGO(R) to build your own, beautiful 3 node ArangoDB database cluster for your desk. Have fun!
---

ArangoDB 3.12 Product Release Announcement! Read the blog for details. [Read Blog](https://arangodb.com/2024/03/arangodb-3-12-performance-for-all-your-data-models/)

[![logo](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/logo.png?width=301&height=50&name=logo.png "logo")](https://arango.ai)

### Why Graph

[The Rise of Graph](https://arangodb.com/the-rise-of-graph/)

[The Graph ML Gamechanger](https://arangodb.com/the-graph-ml-gamechanger/)

[Consolidate to Graph](https://arangodb.com/graph-vs-relational/)

[Graph DB Basics](https://arangodb.com/graph-database/)

### Products

[Managed Graph DB](https://arangodb.com/arangograph-managedgraphdb/)

[Self-Managed Graph DB](https://arangodb.com/arangograph-selfmanaged/)

[Managed Graph ML](https://arangodb.com/managed-ml-graph/)

[Community Edition](https://arangodb.com/community-server/)

[Compare Products](https://arangodb.com/subscriptions/)

### Solutions

Use Cases

Industries

Solution Accelerators

- [Cyber/Threat Mgmt](https://arangodb.com/solutions/use-cases/cyber-threat-management/)
- [Fraud Detection](https://arangodb.com/solutions/use-cases/fraud-detections/)
- [Supply Chain](https://arangodb.com/solutions/use-cases/supply-chain/)
- [Network Asset Management](https://arangodb.com/solutions/use-cases/network-asset-management/)
- [Customer & Patient 360](https://blog.arangodb.com/solutions/use-case/customer-and-patient-360/)
- [Recommendations](https://arangodb.com/solutions/use-cases/recommendations/)
- [Case Management](https://blog.arangodb.com/solutions/use-case/case-management/)
- [Geospatial Analysis](https://arangodb.com/solutions/use-cases/geospatial/)
- [Master Data Mgmt](https://arangodb.com/solutions/use-cases/master-data-management/)

- [Software & Technology](https://arangodb.com/arangodb-for-software-tech/)
- [Financial Services](https://arangodb.com/arangodb-for-financial-services/)
- [Tele Communication](https://arangodb.com/telecommunications-and-network/)
- [E-commerce](https://arangodb.com/arangodb-for-e-commerce/)
- [Healthcare](https://arangodb.com/arangodb-for-healthcare/)
- [Government](https://arangodb.com/arangodb-for-government/)
- [Aerospace & Defence](https://arangodb.com/arangodb-for-aerospace-defense/)
- [Manufacturing](https://arangodb.com/arangodb-for-manufacturing/)

- [Enterprise Knowledge Graphs](https://arangodb.com/resources/white-papers/enterprise-knowledge-graphs/)
- [Entity Resolution](https://arangodb.com/entity-resolution/)
- [Traceability/Lineage](https://arangodb.com/traceability-and-lineage/)
- [Contexual Relevance](https://arangodb.com/contextual-relevance/)

### Developers

Capabilities

Integrations

Differentiators

- [Graph Traversals](https://arangodb.com/graph-traversals/)
- [Multi-Model DB](https://arangodb.com/multi-model-db/)
- [LLM + Knowledge Graph](https://arangodb.com/llm-knowledge-graph/)
- [Graph ML](https://arangodb.com/managed-ml-graph/)
- [Advanced Geospatial](https://arangodb.com/advanced-geospatial/)
- [Document Store](https://arangodb.com/document-store/)
- [Search Engine](https://arangodb.com/full-text-search-engine/)
- [Security & Compliance](https://arangodb.com/security/)
- [Data Masking](https://arangodb.com/Data-masking/)
- [Key/Value DB](https://arangodb.com/integrated-key-value-support/)

- [Clients / Languages](https://arangodb.com/clients-languages/)
- [BI Tools](https://arangodb.com/bi-tools-support/)
- [Containers](https://arangodb.com/container-support/)
- [Community driven](https://arangodb.com/community-driven/)

- [Model Flexibility](https://arangodb.com/model-flexibility/)
- [Graph Scalability](https://arangodb.com/graph-scalability/)
- [Performance at Scale](https://arangodb.com/performance-at-scale/)
- [Highest Availability](https://arangodb.com/highest-availability/)
- [Unified Query Language](https://arangodb.com/unified-query-languageaql/)
- [Graph + Native Document](https://arangodb.com/graph-document/)
- [Graph + Native Search](https://arangodb.com/graph-search/)
- [Cost Effective](https://arangodb.com/cost-effective-development-operation/)
- [Full Geospatial](https://arangodb.com/full-geospatial/)

### Customers

[All Case Studies](https://arangodb.com/solutions/solutions-customers/#all)

[Government & Cyber](https://arangodb.com/solutions/solutions-customers/#Government-Cyber)

[Manufacturing & Supply Chain](https://arangodb.com/solutions/solutions-customers/#Manufacturing-Supply-Chain)

[Healthcare & Science](https://arangodb.com/solutions/solutions-customers/#Healthcare-Science)

[Retail & Commerce](https://arangodb.com/solutions/solutions-customers/#Retail-Commerce)

[Technology](https://arangodb.com/solutions/solutions-customers/#Technology)

[Education](https://arangodb.com/solutions/solutions-customers/#Education)

[Telco](https://arangodb.com/solutions/solutions-customers/#Telco)

[Financial Services](https://arangodb.com/solutions/solutions-customers/#Financial-Services)

### Learn

[Documentation](https://docs.arangodb.com/stable/)

[Developer Hub](https://developer.arangodb.com/)

[ArangoDB University](https://university.arangodb.com/)

[Blog](https://arangodb.com/blog/)

[Certification](https://arangodb.com/learn/certification/)

[Community](https://arangodb.com/community/)

[Events](https://arangodb.com/events/)

[Resources](https://arangodb.com/resources/)

[Training Center](https://arangodb.com/learn/)

### Company

[About Us](https://arangodb.com/about-us/)

[Team](https://arangodb.com/about-arangodb/)

[Partners](https://arangodb.com/partners/)

[News](https://arangodb.com/news/)

[Careers](https://arangodb.applytojob.com/apply)

### Pricing

- Why Graph 
    - [The Rise of Graph](https://arangodb.com/the-rise-of-graph/)
    - [The Graph ML Gamechanger](https://arangodb.com/the-graph-ml-gamechanger/)
    - [Consolidate to Graph](https://arangodb.com/graph-vs-relational/)
    - [Graph DB Basics](https://arangodb.com/graph-database/)
- Products 
    - [Managed Graph DB](https://arangodb.com/arangograph-managedgraphdb/)
    - [Self-Managed Graph DB](https://arangodb.com/arangograph-selfmanaged/)
    - [Managed Graph ML](https://arangodb.com/managed-ml-graph/)
    - [Community Edition](https://arangodb.com/community-server/)
    - [Compare Products](https://arangodb.com/subscriptions/)
- Solutions 
    - Use Cases 
          - [Cyber/Threat Mgmt](https://arangodb.com/solutions/use-cases/cyber-threat-management/)
          - [Fraud Detection](https://arangodb.com/solutions/use-cases/fraud-detections/)
          - [Supply Chain](https://arangodb.com/solutions/use-cases/supply-chain/)
          - [Network Asset Management](https://arangodb.com/solutions/use-cases/network-asset-management/)
          - [Customer & Patient 360](https://arangodb.com/solutions/use-cases/customer-and-patient-360/)
          - [Recommendations](https://arangodb.com/solutions/use-cases/recommendations/)
          - [Case Management](https://arangodb.com/solutions/use-cases/case-management/)
          - [Geospatial Analysis](https://arangodb.com/solutions/use-cases/geospatial/)
          - [Master Data Mgmt](https://arangodb.com/solutions/use-cases/master-data-management/)
    - Industries 
          - [Software & Technology](https://arangodb.com/arangodb-for-software-tech/)
          - [Financial Services](https://arangodb.com/arangodb-for-financial-services/)
          - [Tele Communication](https://arangodb.com/telecommunications-and-network/)
          - [E-commerce](https://arangodb.com/arangodb-for-e-commerce/)
          - [Healthcare](https://arangodb.com/arangodb-for-healthcare/)
          - [Government](https://arangodb.com/arangodb-for-government/)
          - [Aerospace & Defence](https://arangodb.com/arangodb-for-aerospace-defense/)
          - [Manufacturing](https://arangodb.com/arangodb-for-manufacturing/)
    - Solution Accelerators 
          - [Enterprise Knowledge Graphs](https://arangodb.com/resources/white-papers/enterprise-knowledge-graphs/)
          - [Entity Resolution](https://arangodb.com/entity-resolution/)
          - [Traceability/Lineage](https://arangodb.com/traceability-and-lineage/)
          - [Contexual Relevance](https://arangodb.com/contextual-relevance/)
- Customers 
    - [All Case Studies](https://arangodb.com/solutions/solutions-customers/#all)
    - [Government & Cyber](https://arangodb.com/solutions/solutions-customers/#Government-Cyber)
    - [Manufacturing & Supply Chain](https://arangodb.com/solutions/solutions-customers/#Manufacturing-Supply-Chain)
    - [Healthcare & Science](https://arangodb.com/solutions/solutions-customers/#Healthcare-Science)
    - [Retail & Commerce](https://arangodb.com/solutions/solutions-customers/#Retail-Commerce)
    - [Technology](https://arangodb.com/solutions/solutions-customers/#Technology)
    - [Education](https://arangodb.com/solutions/solutions-customers/#Education)
    - [Telco](https://arangodb.com/solutions/solutions-customers/#Telco)
    - [Financial Services](https://arangodb.com/solutions/solutions-customers/#Financial-Services)
- Learn 
    - [Documentation](https://docs.arangodb.com/stable/)
    - [Developer Hub](https://developer.arangodb.com/)
    - [ArangoDB University](https://university.arangodb.com/)
    - [Blog](https://arangodb.com/blog/)
    - [Certification](https://arangodb.com/learn/certification/)
    - [Community](https://arangodb.com/community/)
    - [Events](https://arangodb.com/events/)
    - [Resources](https://arangodb.com/resources/)
    - [Training Center](https://arangodb.com/learn/)
- Company 
    - [About Us](https://arangodb.com/about-us/)
    - [Team](https://arangodb.com/about-arangodb/)
    - [Partners](https://arangodb.com/partners/)
    - [News](https://arangodb.com/news/)
    - [Careers](https://arangodb.applytojob.com/apply)
- [Pricing](https://arangodb.com/download-major/pricing/)

[**Start Free** ArangoGraph Cloud](https://dashboard.arangodb.cloud/signup?acceptedTermsAndConditions=1)

[**Download Now** ArangoDB Enterprise](https://arangodb.com/download-arangodb-enterprise/)

![Vector-5](https://blog.arangodb.com/hubfs/Imported_Blog_Media/search.svg)

# Building a Mini Database Cluster for Fun – LEGO Edition

 February 27, 2019

 Tags: [Cluster](https://blog.arangodb.com/blog/topic/cluster), [General](https://blog.arangodb.com/blog/topic/general)

[Twitter](https://twitter.com/intent/tweet?url=https://blog.arangodb.com/blog/2019/02/building-mini-pc-database-cluster-for-fun) [LinkedIn](http://www.linkedin.com/shareArticle?mini=true&url=https://blog.arangodb.com/blog/2019/02/building-mini-pc-database-cluster-for-fun) [Reddit](https://www.reddit.com/share?url=https://blog.arangodb.com/blog/2019/02/building-mini-pc-database-cluster-for-fun) [Yahoo](https://plus.google.com/share?url=https://blog.arangodb.com/blog/2019/02/building-mini-pc-database-cluster-for-fun%3Futm_medium%3Dsocial%26utm_source%3Dgoogle_plus)

![](https://blog.arangodb.com/hubfs/ArangoDB-Blog/clock.svg)Estimated reading time: 22 minutes

![Mini PC Database Cluster for Fun Lego](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/Authors/lego_builder_1.png?width=1280&height=727&name=lego_builder_1.png)

ArangoDB is a native multi-model database that could be deployed as a *single database*, in *active failover* mode or as a  full blown *database cluster* in the cloud. To try things out I can even run a cluster on my local development machine.

Well, yes… but I wanted to be more real, 24×7, with the opportunity to manipulate all the things…

Inspired by other *Raspberry PI* & mini-cluster projects, I thought I could build my own, bare metal, **desk compatible Mini PC database cluster**.**Interested in trying out ArangoDB?** Fire up your cluster in just a few clicks with ArangoDB ArangoGraph: the Cloud Service for ArangoDB. [Start your free 14-day trial here](https://cloud.arangodb.com/home?utm_source=arangodb_website&utm_medium=cluster_blogpost&utm_campaign=traffic)

### What’s in it for me?

This blog post explains…

- How to setup Intel® Media **Mini PC’s as Linux servers**
- How to **deploy an ArangoDB cluster** using **SSL**
- How to use a **systemd service** for production like configuration
- How to **import JSON or CSV** data into the DB
- How ArangoDB behaves in case of network chaos (**resilience tests**)
- How to **add a new node** to the database cluster
- How to **perform rolling-upgrades** in the cluster

### Hard- and Software

### Hardware

![Hardware and software](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/Authors/hardware.png?width=480&height=500&name=hardware.png)

- 3 x Mini PC: Beelink 2 N4100  
  (4GB LPDDR4, 64GB eMMC 5.1, 2.4 GHz Intel Celeron N4100)
- 1 x Mini PC: Beelink BT3 Pro Atom X5-Z8350 (optional)  
  (4GB DDR3, 64GB eMMC 5.1, 1.9 GHz Intel Atom X5)
- 7″ TFT display for Monitoring (optional)
- 5-port Gigabit Switch
- 5 x Cat 5e cable
- Some LEGO® to build a nice 7″ rack
- USB stick, USB Keyboard (during setup)

### Software

- Create bootable Live USB drives: [https://unetbootin.github.io/](https://unetbootin.github.io/)
- Ubuntu 18.4 [https://www.ubuntu.com/download/server](https://www.ubuntu.com/download/server)

### Mini PC

For my mini PC cluster project I decided to go with Intel(R) machines, even if ArangoDB runs on *ARM64* quite well. I wanted to run the cluster 24/7 on my desk, being able to *break connections* or *switch off the power supply* whenever I want to.   
After comparing several vendors and products, I decided to buy 3 **Beelink S2 N4100** machines, usually intended to run as a media center in your home.

![Intel Celeron N4100, quad-core CPU](https://blog.arangodb.com/hubfs/Imported_Blog_Media/Authors/mini_pc.png)

- Intel Celeron N4100, quad-core CPU @ 1.1 / 2.4 GHz
- 4GB DDR4 2400Mhz RAM
- 64 GB eMMC

The machines are totally quiet, no noisy fan and no issues with hot surfaces.

### TFT Display

My database cluster is designed to fit on my desk and I want to be able to provide some cluster statistics while doing resilience tests, so I thought it’s a good idea to add a 7″ TFT display to the setting. I bought a cheap TFT from *Wish*-app for something like $46 or so. It’s a 1024×768 screen with a HDMI connector that you usually can find in a rear-view setup of your car. Anyhow, it’s great to show the current stats of my ArangoDB Mini PC cluster.

![7" TFT display wish app](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/Authors/screen.png?width=1280&height=897&name=screen.png)

I will run the monitoring on the 4th machine using Prometheus. To be comfortable in a console-mode, I had to adjust the screen font size.

```
$> sudo vim /etc/default/console-setup
```

\`FONTSIZE=”16×32″\`

### LEGO® Tower

My 6yo son inspired me to use LEGO® bricks to build a small tower for my ArangoDB cluster. He contributed lot’s of creative ideas and some of his construction vehicles to start the construction site.

![6yo lego](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/LEGO_sign01-scaled-1-1200x900-2.jpg?width=1200&height=900&name=LEGO_sign01-scaled-1-1200x900-2.jpg)

Work has started…

![6yo lego](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/LEGO_sign03-scaled-1-1200x900-3.jpg?width=1200&height=900&name=LEGO_sign03-scaled-1-1200x900-3.jpg)

Construction site established

![6yo lego](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/LEGO_node1_arrives-scaled-1-1200x900-3.jpg?width=1200&height=900&name=LEGO_node1_arrives-scaled-1-1200x900-3.jpg)

First node arrives…

![ 6yo LEGO®](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/LEGO_node1-scaled-1-1200x900-2.jpg?width=1200&height=900&name=LEGO_node1-scaled-1-1200x900-2.jpg)

Foundation with node1 set

![ 6yo LEGO®](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/LEGO_node2-scaled-1-1200x900-2.jpg?width=1200&height=900&name=LEGO_node2-scaled-1-1200x900-2.jpg)

Second node

![ 6yo LEGO®](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/LEGO_node3_finished-scaled-1-1200x900-2.jpg?width=1200&height=900&name=LEGO_node3_finished-scaled-1-1200x900-2.jpg)

3rd node reached destination

![LEGO(R) rack for a 3 node ArangoDB cluster](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/IMG_7552-e1550656288455-scaled-1-900x1200-2.jpg?width=900&height=1200&name=IMG_7552-e1550656288455-scaled-1-900x1200-2.jpg)

Cluster is ready!

Be creative how you want to build your rack, just make sure that you have access to all necessary ports and leave heating fences open to ensure air circulation.

The Mini PCs are lukewarm in idle state and only moderately heaten up, when under load. The cluster is SILENT at all times and looks beautiful on your desk!

### Setup Ubuntu Linux and Network

The Beelink Mini PCs run Windows 10 by default as they are intended to run as media server in your home. To change the OS to Linux I need to boot the server from a USB stick.

To create a bootable USB drive I simply used [unetbootin](https://unetbootin.github.io/) that runs on all environments and is super easy to use. (I’m on a Mac)  
For my server project I want to run a Linux cluster using [Ubuntu server](https://www.ubuntu.com/download/server).

Starting unetbootin I chose disk image, select the fresh ISO of Ubuntu linux, the correct USB drive and press OK. A couple of minutes later my bootable Ubuntu USB drive is ready to use.

Now head to each Mini PC and get rid of Windows 10…

First, insert the USB stick into the Mini PC. To change the boot sequence, I run the boot menu holding the ESC key during boot. The Beelink uses the *Aptio Setup Utility* by American Megatrends. I change the **Boot Option #1** from *Windows Boot Manager* to my inserted USB stick via *UEFI*. Save + Exit and Ubuntu starts and allows to setup on the local disk.

![Setup Ubuntu Linux and Network](https://blog.arangodb.com/hubfs/Imported_Blog_Media/Authors/option.jpg)

During the installation I name the servers `node1`, `node2` and `node3` – these will build the cluster – and `serv01` for the additional one. My user arangodb has the same credentials on all nodes.  
After installing *Ubuntu* I do an upgrade to get the latest packages.

```
$> sudo apt update
$> sudo apt dist-upgrade
```

Hint: If you’re a Mac-only household, you may also want to change the keyboard layout via  
\`sudo dpkg-reconfigure keyboard-configuration\`.

### Network Setup

My network currently relies on DHCP with a dynamic IP – but I want to use static ones instead. My colleague granted me some static IP addresses in the range `172.30.0.0-172.30.255.255`.   
I use netplan in Ubuntu to configure my network. There is an existing .yaml file that I use to define my static IP addresses:

```
$> sudo vim /etc/netplan/50-cloud-init.yaml
```

```
network:
    ethernets:
        enp2s0:
            addresses: [172.30.0.11/12]
            dhcp4: yes
            dhcp6: no
            gateway4: 172.31.255.254
            nameservers:
                addresses: [8.8.8.8, 8.8.4.4]
    version: 2
```

My nodes of my cluster will get the following IPs:  
172.30.0.11 node1  
172.30.0.12 node2  
172.30.0.13 node3  
Now I have to apply the network changes:

```
$> sudo netplan apply 
```

I could validate that my IP address is set correctly with

```
$> ip add
```

### Useful Tools & Commands

![tmux SSH](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/tmux-3.png?width=941&height=734&name=tmux-3.png)

I learned to enjoy working with `tmux`, a tool that allows me to run commands on several machines at once (connected via SSH).

Starting a process like ArangoDB with a detachable console is useful as well. The command `screen` without parameters does the job. Now I can run arangodb and could detach the console using `<ctr>+<a>` `<d>`. If I want to get back I can use `screen -r` later again.

Working with JSON is much easier if you know `jq`. It’s a powerful tool to manipulate JSON files or pretty-print on the console. Just pipe to `jq`.

```
$> cat dataset.json | jq .
```

### Setup Database Cluster using ArangoDB Starter

One of several ways to setup a 3 node cluster is to use the ArangoDB starter. With a single command on each machine you can launch a database cluster.

```
$> arangodb --starter.data-dir=/home/arangodb/data \
            --starter.join 172.30.0.11,172.30.0.12,172.30.0.13 
```

Of course you can also run ArangoDB using **Docker** in the same way or use a **Kubernetes** cluster with the [ArangoDB operator](https://github.com/arangodb/kube-arangodb) to start a cluster.

Let’s get into the details using the starter…

First, I download the Enterprise Edition of ArangoDB from the [download](https://arangodb.com/download) section of our homepage, which is free for evaluation, here the **.tar.gz** package (a universal binary), and copy it to the three servers:

```
$> scp arangodb3e-linux-3.4.0.tar.gz arangodb@172.30.0.11:/home/arangodb/
```

**A love letter to static binaries**

With 3.4 ArangoDB has introduced static binaries, **.tar.gz** packages, that could be extracted anywhere in the file system and just run.   
No more wondering what kind of dependencies need to be installed, how to run multiple versions in parallel or how to get rid of an application easily.

The folder structure looks like that after extracting the files using **tar -xzf arang**…:

```
arangodb3e-3.4.0/
   bin/
   usr/
   README
```

In my *`.profile`* I add the path to the PATH variable.  
`PATH=/home/arangodb/arangodb3e-3.4.0/bin:$PATH`

### CA and Certificates

We now want to secure the server using **TLS**. The arangodb starter supports us by providing commands to build a self-signed CA and generate certificates and TLS keyfiles. A detailed description could be found in the [documentation](https://www.arangodb.com/docs/stable/programs-starter-security.html).

```
$> arangodb create tls ca
```

Creates CA certificate & key in `tls-ca.crt` (certificate), `tls-ca.key` (private key). Make sure to store the private key in a secure place. The CA certificate should be imported to the browser to assure that certificates signed with this CA could be trusted.

```
$> arangodb create tls keyfile --host 172.30.0.11 \
                               --host 172.30.0.12 \ 
                               --host 172.30.0.13
```

This command creates the `tls.keyfile` that should be copied to the data directory with the name `arangodb.keyfile` and permission 400.

### JWT Secret

In the default cluster setup using the Starter, each node fires up an agent, a coordinator and a db server. Read more in the documentation ([ArangoDB Starter Tutorial](https://www.arangodb.com/docs/stable/tutorials-starter.html)).

The ArangoDB starter allows me to generate a JWT token that could be used for authentication as *super-user*. This role is needed to communicate with the agency or any db server directly.

```
$> arangodb create jwt-secret --secret=arangodb.secret
```

The file on my server with the name `arangodb.secret` consists of a single line with a 64 character JWT token. This needs to be copied to all nodes and is used when we use the starter to setup and run the cluster.

I am using `/etc/hosts` entries to match the IP addresses to hostnames (`node1,` `node2`, `node3`).  
Starting a detachable screen console, I can now start my cluster:

```
$> screen
$> arangodb --ssl.keyfile=/home/arangodb/arangodb.keyfile \
             --starter.data-dir=/home/arangodb/data \
             --starter.join node1,node2,node3 \
             --auth.jwt-secret=/home/arangodb/arangodb.secret
```

Make sure that you use the same setup on all machines so you can run the same command on all nodes. Now I can detach the console using `<ctr>+<a>` `<d>`. If I want to get back I can use `screen -r` later again.

### Automate using a systemd Service

With the above mentioned setup I don’t want to go “productive”. As I want to do resilience tests – unwire LAN, do random reboots – I want to restart ArangoDB via a systemd service automatically.

To keep the setup clean and consistent, I define some environment parameters in a file `/etc/arangodb.env` and move the JWT secret to `/etc/arangodb.secret` .

```
$> vim /etc/arangodb.env
```

```
DATADIR=/var/lib/arangodb3/cluster
CLUSTERSECRETPATH=/etc/arangodb.secret
TLSKEYFILE=/etc/arangodb.keyfile
STARTERADDRESS=172.30.0.11
STARTERENDPOINTS=172.30.0.11:8528,172.30.0.12:8528,172.30.0.13:8528
```

First, I add the service configuration in `/etc/systemd/system/arangodb.service`

```
[Unit]
  Description=Run the ArangoDB Starter
  After=network.target
[Service]
  User=arangodb
  Group=arangodb
  Restart=always
  KillMode=process
  EnvironmentFile=/etc/arangodb.env
  ExecStartPre=/bin/sh -c "mkdir -p ${DATADIR}"
  ExecStart=/home/arangodb/arangodb-3.4/bin/arangodb \
     --starter.data-dir=${DATADIR} \
     --ssl.keyfile=${TLSKEYFILE} \
     --starter.address=${STARTERADDRESS} \
     --starter.join=${STARTERENDPOINTS} \
     --server.storage-engine=rocksdb \
     --auth.jwt-secret=${CLUSTERSECRETPATH} \
     --all.log.level=startup=debug \
  TimeoutStopSec=60
[Install]
  WantedBy=multi-user.target
```

This configuration is the same on all machines, easy to understand and to adjust.  
Hint: The *`KillMode=process`* allows me to later kill the arangodb starter process without killing child processes (db server, coordinator, agency) what comes handy during a rolling upgrade.

Now let’s enable our new service:

```
$> sudo systemctl enable arangodb
```

This will create a symbolic link from the system’s copy of the service file into the location on disk where *systemd* looks for autostart files.

```
$> systemctl start arangodb
```

Now run the starter on all machines using systemctl:

First of all the cluster should now start on all machines. You can check the status of the service using:

```
$> systemctl status arangodb
```

Here you can see the main process and the 3 sub-processes of *arangod* that start the corresponding DB services.

```
arangodb.service - Run the ArangoDB Starter
    Loaded: loaded (/etc/systemd/system/arangodb.service; enabled; vendor preset: enabled)
    Active: active (running) since Wed 2019-01-23 08:51:58 UTC
   Process: 27119 ExecStartPre=/bin/sh -c mkdir -p ${DATADIR} (code=exited, status=0/SUCCESS)
  Main PID: 27121 (arangodb)
    Tasks: 86 (limit: 4437)    CGroup: /system.slice/arangodb.service...
            ├─27394 /home/arangodb/arangodb3e-3.4.0/usr/sbin/arangod -c /var/lib/arangodb3/cluster/agent8531/arangod.conf --database.directory /var/lib/arangodb3/cluster/agent8531/data --ja
            ├─27518 /home/arangodb/arangodb3e-3.4.0/usr/sbin/arangod -c /var/lib/arangodb3/cluster/dbserver8530/arangod.conf --database.directory /var/lib/arangodb3/cluster/dbserver8530/dat...
            ├─27552 /home/arangodb/arangodb3e-3.4.0/usr/sbin/arangod -c /var/lib/arangodb3/cluster/coordinator8529/arangod.conf --database.directory /var/lib/arangodb3/cluster/coordinator85...
            └─27121 /home/arangodb/arangodb3e-3.4.0/usr/bin/arangodb --server.arangod=/home/arangodb/arangodb3e-3.4.0/usr/sbin/arangod --server.js-dir=/home/arangodb/arangodb3e-3.4.0/usr/sh...
```

### Configuration Changes / Troubleshooting

If you have a typo in your definition or you want to change something in the configuration, you need to reload the daemon:

```
$> systemctl daemon-reload
```

Now you may want to restart the database service as well:

```
$> systemctl restart arangodb
```

The commands `journalctl -xe` and the `systemctl status arangodb` provide you with more details in case of any issue (e.g. missing file permissions)

A short tutorial on how to use *systemctl* could be found on [DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units).

### ArangoDB Web UI

ArangoDB comes with a built-in WebUI, just move your browser to the IP address of one node, port 8529 and you get a login screen. The default user is root with no password set.

![login web ui](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/login.png?width=1189&height=851&name=login.png)

By importing the CA certificate into your browser, this site should appear right away. If not, you need to explicitly allow access to continue.

Make sure to set a password after the first login.

The Web UI allows you to administrate your database, collections, search views, and more. You can also use a query editor to execute or profile queries expressed in AQL.

![Web UI AQL](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/query_editor.png?width=1189&height=851&name=query_editor.png)

You can learn more about the WebUI, drivers, HTTP API and AQL in the ArangoDB [training center](https://www.arangodb.com/arangodb-training-center/).

### Monitoring

You should monitor your database cluster, e.g. with *collectd* and *Prometheus* which is described in a tutorial [here](https://www.arangodb.com/tutorials/monitoring-collectd-prometheus-grafana/). Please monitor your volumes properly. If you are running out of disk space, it’s not fun at all to watch *rocksDB* suffering.

### Cluster Health

Using the administration API we could access some relevant data regarding the health of the cluster as JSON. Piped to `jq` you might even be able to read it. 😉  
Create bearer authentication token:

```
$> curl -k -d'{"username":"root","password":"myPassword"}' https://172.30.0.11:8529/_open/auth
```

Request cluster health data using token auth:

```
$> curl -k -X GET "https://172.30.0.11:8529/_db/_system/_admin/cluster/health" \
        -H "accept: application/json" \
        -H "Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ…MV_9K2kk="\
   | jq
```

![API arangoinspect](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/agency-2.png?width=559&height=655&name=agency-2.png)

This API reveals the current status of all cluster parts, which should be monitored using *Prometheus* or similar tools.

A lot more information could be gathered if one uses the tool `arangoinspect`, which collects all recent log and environment data.

How to work with `arangoinspect` deserves a separate blog post (@see: [cluster dump](https://www.arangodb.com/docs/stable/troubleshooting-cluster.html)).

### Import Test Data

There is a relational [LEGO dataset available at Kaggle](https://www.kaggle.com/rtatman/lego-database) (CSV files). These could be easily imported using arangoimport.

```
arangoimport --server.endpoint ssl://172.30.0.11:8529 \
             --server.database lego \
             --collection sets  \
             --type csv \
             --file /home/arangodb/lego/sets.csv
```

![ LEGO dataset available at Kaggle CSV](https://blog.arangodb.com/hubfs/Imported_Blog_Media/Screenshot-2019-02-24.png)

As you can model your data as **JSON** documents we could simplify the data model and transform the dataset (using **AQL**) into fewer documents and edge collections that link from parts to actual sets. If you are new to graph database concepts, you can [learn first graphdb skills in this free course.](https://www.arangodb.com/arangodb-graph-course/)

Adding another *edge collection* with `sets_we_own` could lead to interesting new use cases.

Where does the part **60219** in *Dark Bluish Gray* belong to?

```
WITH lego_sets
FOR part IN lego_parts
  FILTER part.part_num == @part_num
    FOR set,edge,p IN 1 INBOUND part is_part_of
      FILTER p.edges[0].color.id == @color_id
  RETURN set
```

![ML brick-recognition ](https://blog.arangodb.com/hubfs/Imported_Blog_Media/Screenshot-2019-02-24-2.png)

Feel free to add a *ML brick-recognition* approach like the Sorter in “[Sorting 2 Tons of Lego](https://jacquesmattheij.com/sorting-two-metric-tons-of-lego/)” and I’m your first customer…

 

### Resilience Tests

The agents perform a crucial role in the maintenance of a cluster. The leader…

- monitors heartbeats from coordinators and db servers and keeps track of their health
- takes action, when database servers have gone missing for longer than a grace period 
    - Shard leaders are replaced by an in-sync follower. And a new follower is added, if available.
    - Shard followers are replaced by any available db server, which does not already replicate this shard as follower or leader.
    - Once any of the above has finished, the failed server is removed from the shards server list.
- handles cleaning out of db servers on user request
- handles moving of shards per user request

More details on database cluster architecture and the cluster agency can be found [on our website](https://www.arangodb.com/community-server/cluster/) or directly in  our [documentation](https://www.arangodb.com/docs/stable/architecture-deployment-modes-cluster-architecture.html).

### Resilience – The Tests

The database cluster is up and running and I can play a bit with the data. Cluster operations run smoothly and my little 3 node cluster performed as expected. But after a while, strange things happened…

Apparently, my son hid two suspicious characters in the LEGO® rack of my ArangoDB database cluster. Those were really nasty and tried to perform physical harm to my cluster.

![Mr.E Oni-Mask replication factor](https://blog.arangodb.com/hubfs/Imported_Blog_Media/IMG_4150.jpg)

First, **Mr. E.**, wearing the red *Oni-Mask*, pushed the power button for a few seconds and one machine died immediately. The ArangoDB agency noticed the missing heartbeats and thanks to *replication factor 2*, my sharded collections were moved to the two active nodes.

![resilience test failover](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/failover.png?width=1189&height=851&name=failover.png)

Within a few seconds, the first shards were already moved to the second server. Now I would probably spin up a new ArangoDB on  the 4th standby node.

OR, as my cluster stands right in front of me, I can just hit the crook on the fingers and switch the node on again. You now have to move shards manually or use the **rebalancing** feature.

Second, *Garmadon* was tampering with the network cable. Network partitioning, what a mess.

![Garmadon](https://blog.arangodb.com/hubfs/Imported_Blog_Media/IMG_1005.jpg)

Same procedure as before, the remaining agency instances noticed the missing db server, elected a new leader for the shards that were lead by the missing server and started rebalancing. Meanwhile the lonely server tries hard to locate the database cluster. This time, I was able to snatch the cable from the intruder quickly and put it back into the server.

The db server was back in the network and could read the updated cluster plan. He observes that he’s not the leader for certain shards any more. The rebalancing jobs for shards, of which he was a follower, which started when the db server was unavailable, will stop eventually and allow the server to catch up again.

### Adding a Node

In case one of the 3 nodes of my cluster is permanently down, I want to replace this node. The setup is similar to all the other nodes.  
For the `--starter.join` endpoints I just need to refer to one existing node, so I modify the file `etc/arangodb.env` accordingly:  
STARTERADDRESS=172.30.0.10  
STARTERENDPOINTS=172.30.0.11:8528,172.30.0.13:8528

```
$> systemctl reload-daemon$> systemctl start arangodb
```

The service starts and connects to one of the existing nodes and appears in the cluster configuration. If you added a node to replace a failed one, you might now want to remove the old “officially” from the cluster using the trash icon in the Web UI.

### Rolling Upgrade

Now it’s time to upgrade to the latest patch-release of ArangoDB, as of today that’s 3.4.2. As I use the static binary, I first need to download the latest `.tag.gz`, copy it to all nodes, extract it and prepare the rolling upgrade.

Second, edit `/etc/systemd/system/arangodb.service` and adjust the path to the new version and restart the daemon

```
$> systemctl daemon-reload
```

Third, use systemctl status arangodb to get the PID of the arangodb starter and kill the process with `kill -9 PID`. The service configuration with the line `KillMode=process` takes care that all subprocesses continue (!).

The systemctl daemon will restart the arangodb starter immediately, this time the new one. Now we have:

![arangodb_rolling_upgrade adding a node](https://blog.arangodb.com/hubfs/Imported_Blog_Media/arangodb_rolling_upgrade.png)

The final step is to run the rolling upgrade. Therefore I start arangodb on just one node and start the upgrade process.

```
$> arangodb upgrade --starter.endpoint=https://172.30.0.11:8528
```

This contacts the *already running* new starter processes and performs the upgrade.

### Wrap Up

- Media servers (Mini PCs) with 4GB RAM are perfectly suited to build a desk compatible, totally silent database cluster. LEGO® allows you to get creative and build beautiful cluster racks.
- ArangoDB Starter & static binaries  makes  deployment of ArangoDB database clusters very easy and robust.

Read on:

- [ArangoDB Cluster Course](https://www.arangodb.com/learn/operations/cluster-course/): Learn all internals and details of database cluster setup. E.g. fine tune deployment of agency/ coordinators/ db servers on each node.

[Twitter](https://twitter.com/intent/tweet?url=https://blog.arangodb.com/blog/2019/02/building-mini-pc-database-cluster-for-fun) [LinkedIn](http://www.linkedin.com/shareArticle?mini=true&url=https://blog.arangodb.com/blog/2019/02/building-mini-pc-database-cluster-for-fun) [Reddit](https://www.reddit.com/share?url=https://blog.arangodb.com/blog/2019/02/building-mini-pc-database-cluster-for-fun) [Yahoo](https://plus.google.com/share?url=https://blog.arangodb.com/blog/2019/02/building-mini-pc-database-cluster-for-fun%3Futm_medium%3Dsocial%26utm_source%3Dgoogle_plus)

![Picture of Ingo Friepoertner](https://blog.arangodb.com/hubfs/Imported_Blog_Media/Authors/Ingo-100x100.png)

 February 27, 2019 , [Ingo Friepoertner](https://blog.arangodb.com/blog/author/ingo-friepoertner)

Ingo is dealing with all the good ideas from the ArangoDB community, customers and industry experts to improve the value provided by the company’s native multi-model approach. In former positions he worked as a product owner and tech consultant, building custom software solutions for large companies in various industries. Ingo holds a diploma in business informatics from FHDW University of Applied Sciences.

### Leave a Comment

 Tags

- [General](https://blog.arangodb.com/blog/topic/general)
- [Release](https://blog.arangodb.com/blog/topic/release)
- [Community](https://blog.arangodb.com/blog/topic/community)
- [Releases](https://blog.arangodb.com/blog/topic/releases)
- [Performance](https://blog.arangodb.com/blog/topic/performance)
- [Tutorial](https://blog.arangodb.com/blog/topic/tutorial)
- [Foxx](https://blog.arangodb.com/blog/topic/foxx)
- [AQL](https://blog.arangodb.com/blog/topic/aql)
- [API](https://blog.arangodb.com/blog/topic/api)
- [Newsletter](https://blog.arangodb.com/blog/topic/newsletter)
- [Cluster](https://blog.arangodb.com/blog/topic/cluster)
- [Graph](https://blog.arangodb.com/blog/topic/graph)
- [Graphs](https://blog.arangodb.com/blog/topic/graphs)
- [Documentation](https://blog.arangodb.com/blog/topic/documentation)
- [Javascript](https://blog.arangodb.com/blog/topic/javascript)
- [Query Language](https://blog.arangodb.com/blog/topic/query-language)
- [Architecture](https://blog.arangodb.com/blog/topic/architecture)
- [NoSQL](https://blog.arangodb.com/blog/topic/nosql)
- [Enterprise](https://blog.arangodb.com/blog/topic/enterprise)
- [Ruby](https://blog.arangodb.com/blog/topic/ruby)
- [RocksDB](https://blog.arangodb.com/blog/topic/rocksdb)
- [testing](https://blog.arangodb.com/blog/topic/testing)
- [ArangoML](https://blog.arangodb.com/blog/topic/arangoml)
- [Machine Learning](https://blog.arangodb.com/blog/topic/machine-learning)
- [Benchmark](https://blog.arangodb.com/blog/topic/benchmark)
- [Java](https://blog.arangodb.com/blog/topic/java)
- [driver](https://blog.arangodb.com/blog/topic/driver)
- [multi-model](https://blog.arangodb.com/blog/topic/multi-model)
- [geo](https://blog.arangodb.com/blog/topic/geo)
- [how to](https://blog.arangodb.com/blog/topic/how-to)
- [Drivers](https://blog.arangodb.com/blog/topic/drivers)
- [PHP](https://blog.arangodb.com/blog/topic/php)
- [Security](https://blog.arangodb.com/blog/topic/security)
- [nodejs](https://blog.arangodb.com/blog/topic/nodejs)
- [python](https://blog.arangodb.com/blog/topic/python)
- [ArangoSearch](https://blog.arangodb.com/blog/topic/arangosearch)
- [Kubernetes](https://blog.arangodb.com/blog/topic/kubernetes)
- [Presentation](https://blog.arangodb.com/blog/topic/presentation)
- [open-source](https://blog.arangodb.com/blog/topic/open-source)
- [Future-of-nosql](https://blog.arangodb.com/blog/topic/future-of-nosql)
- [GitHub](https://blog.arangodb.com/blog/topic/github)
- [ARM: Raspberry + Co.](https://blog.arangodb.com/blog/topic/arm-raspberry-co-)
- [Fraud Detection](https://blog.arangodb.com/blog/topic/fraud-detection)
- [Managed Service](https://blog.arangodb.com/blog/topic/managed-service)
- [arangosh](https://blog.arangodb.com/blog/topic/arangosh)
- [C++](https://blog.arangodb.com/blog/topic/c)
- [Cloud](https://blog.arangodb.com/blog/topic/cloud)
- [Conferences](https://blog.arangodb.com/blog/topic/conferences)
- [Data Science](https://blog.arangodb.com/blog/topic/data-science)
- [HTTP](https://blog.arangodb.com/blog/topic/http)
- [ML](https://blog.arangodb.com/blog/topic/ml)
- [Pregel](https://blog.arangodb.com/blog/topic/pregel)
- [Replication](https://blog.arangodb.com/blog/topic/replication)
- [WebUI](https://blog.arangodb.com/blog/topic/webui)
- [graph database](https://blog.arangodb.com/blog/topic/graph-database)
- [monitoring](https://blog.arangodb.com/blog/topic/monitoring)
- [pytorch](https://blog.arangodb.com/blog/topic/pytorch)
- [Application Server](https://blog.arangodb.com/blog/topic/application-server)
- [ArangoGraphML](https://blog.arangodb.com/blog/topic/arangographml)
- [Community Edition](https://blog.arangodb.com/blog/topic/community-edition)
- [Compliance](https://blog.arangodb.com/blog/topic/compliance)
- [Linux](https://blog.arangodb.com/blog/topic/linux)
- [Publication](https://blog.arangodb.com/blog/topic/publication)
- [Relational Database](https://blog.arangodb.com/blog/topic/relational-database)
- [SOC 2](https://blog.arangodb.com/blog/topic/soc-2)
- [Windows](https://blog.arangodb.com/blog/topic/windows)
- [licensing](https://blog.arangodb.com/blog/topic/licensing)
- [networkx](https://blog.arangodb.com/blog/topic/networkx)
- [storage](https://blog.arangodb.com/blog/topic/storage)
- [ARM](https://blog.arangodb.com/blog/topic/arm)
- [Alliances](https://blog.arangodb.com/blog/topic/alliances)
- [ArangoDB Cloud](https://blog.arangodb.com/blog/topic/arangodb-cloud)
- [ArangoSync](https://blog.arangodb.com/blog/topic/arangosync)
- [Arangograph](https://blog.arangodb.com/blog/topic/arangograph)
- [CNFC](https://blog.arangodb.com/blog/topic/cnfc)
- [DC/OS](https://blog.arangodb.com/blog/topic/dc-os)
- [DGL Adaptor](https://blog.arangodb.com/blog/topic/dgl-adaptor)
- [Data Loader](https://blog.arangodb.com/blog/topic/data-loader)
- [Dev Days 2021](https://blog.arangodb.com/blog/topic/dev-days-2021)
- [Developer Hub](https://blog.arangodb.com/blog/topic/developer-hub)
- [Funding Announcement](https://blog.arangodb.com/blog/topic/funding-announcement)
- [GO](https://blog.arangodb.com/blog/topic/go)
- [GenAI](https://blog.arangodb.com/blog/topic/genai)
- [Graph DB](https://blog.arangodb.com/blog/topic/graph-db)
- [Graph DBs](https://blog.arangodb.com/blog/topic/graph-dbs)
- [Graph Databases](https://blog.arangodb.com/blog/topic/graph-databases)
- [Graph Neural Networks](https://blog.arangodb.com/blog/topic/graph-neural-networks)
- [GraphDB](https://blog.arangodb.com/blog/topic/graphdb)
- [Inside ArangoDB](https://blog.arangodb.com/blog/topic/inside-arangodb)
- [Intel](https://blog.arangodb.com/blog/topic/intel)
- [Intel PyG](https://blog.arangodb.com/blog/topic/intel-pyg)
- [Intel Xeon CPU](https://blog.arangodb.com/blog/topic/intel-xeon-cpu)
- [KG](https://blog.arangodb.com/blog/topic/kg)
- [Knowledge Graphs](https://blog.arangodb.com/blog/topic/knowledge-graphs)
- [LLM](https://blog.arangodb.com/blog/topic/llm)
- [Large Language Models](https://blog.arangodb.com/blog/topic/large-language-models)
- [Migrate to Graph](https://blog.arangodb.com/blog/topic/migrate-to-graph)
- [NetworkX Adaptor](https://blog.arangodb.com/blog/topic/networkx-adaptor)
- [Oasis](https://blog.arangodb.com/blog/topic/oasis)
- [Partners](https://blog.arangodb.com/blog/topic/partners)
- [PyG](https://blog.arangodb.com/blog/topic/pyg)
- [PyTorch Geometric](https://blog.arangodb.com/blog/topic/pytorch-geometric)
- [RDF](https://blog.arangodb.com/blog/topic/rdf)
- [Series B](https://blog.arangodb.com/blog/topic/series-b)
- [adapter](https://blog.arangodb.com/blog/topic/adapter)
- [analytics](https://blog.arangodb.com/blog/topic/analytics)
- [analyzers](https://blog.arangodb.com/blog/topic/analyzers)
- [arangopipe](https://blog.arangodb.com/blog/topic/arangopipe)
- [atomics](https://blog.arangodb.com/blog/topic/atomics)
- [aws](https://blog.arangodb.com/blog/topic/aws)
- [collaboration](https://blog.arangodb.com/blog/topic/collaboration)
- [concurrency](https://blog.arangodb.com/blog/topic/concurrency)
- [dev days](https://blog.arangodb.com/blog/topic/dev-days)
- [fuzzy search](https://blog.arangodb.com/blog/topic/fuzzy-search)
- [graphsage](https://blog.arangodb.com/blog/topic/graphsage)
- [licence](https://blog.arangodb.com/blog/topic/licence)
- [memory model](https://blog.arangodb.com/blog/topic/memory-model)
- [plugin](https://blog.arangodb.com/blog/topic/plugin)
- [preprocessing](https://blog.arangodb.com/blog/topic/preprocessing)
- [recommendation](https://blog.arangodb.com/blog/topic/recommendation)
- [resource description framework](https://blog.arangodb.com/blog/topic/resource-description-framework)
- [semantic web](https://blog.arangodb.com/blog/topic/semantic-web)
- [torch](https://blog.arangodb.com/blog/topic/torch)
- [turtle](https://blog.arangodb.com/blog/topic/turtle)
- [x86](https://blog.arangodb.com/blog/topic/x86)
- [— Relational Database](https://blog.arangodb.com/blog/topic/-relational-database)

[![logo](https://blog.arangodb.com/hs-fs/hubfs/Imported_Blog_Media/logo.png?width=301&height=50&name=logo.png "logo")](https://arango.ai)

ArangoGraph Insights Platform Accelerate application innovation and performance with our next-generation graph data and analytics platform.

- <https://www.facebook.com/arangodb.database/>
- <https://twitter.com/i/flow/login?redirect_after_login=%2Farangodb>
- <https://www.instagram.com/arangodb/>
- <https://www.linkedin.com/company/arangodb/>
- <https://www.youtube.com/user/ArangoDB>

#### Quick Links

- [Quick Start](https://docs.arangodb.com/3.11/)
- [Roadmap](https://arangodb.com/roadmap/)
- [Language Drivers](https://docs.arangodb.com/3.11/develop/drivers/)
- [Case Studies](https://arangodb.com/solutions/solutions-customers/#all)
- [BI Connectors](https://arangodb.com/community-driven/bi-connector-arangodb/)
- [Certification Exam](https://arangodb.com/learn/certification/)

#### Info

- [Community](https://arangodb.com/community/)
- [Events](https://arangodb.com/events)
- [Online Meetup](https://www.meetup.com/online-ArangoDB-meetup/)
- [Logo/Resources](https://arangodb.com/resources/logos/)
- [Stackoverflow](https://stackoverflow.com/questions/tagged/arangodb)
- [Slack](https://join.slack.com/t/arangodb-community/shared_invite/zt-2d4p43cma-flyf72j9a9wq4A2OtuMFkA)

#### About Us

- [About Us](https://arangodb.com/about-us/)
- [Jobs](https://arangodb.applytojob.com/apply)
- [Imprint](https://arangodb.com/imprint/)
- [Contact Us](https://arangodb.com/contact/)
- [News](https://arangodb.com/news/)
- [Google Groups](https://groups.google.com/g/arangodb)

#### Stay In Touch

Keep up with the latest news from the ArangoDB

 ©2023 ArangoDB. All Rights Reserved.

[Terms & Conditions](https://cloud.arangodb.com/terms-and-conditions)|[Our Privacy Policy](https://cloud.arangodb.com/privacy-policy)

![](https://www.facebook.com/tr?id=336858843477853&ev=PageView&noscript=1)