Возможно ли реализовать шардинг ArangoDB с помощью базы данных (а не коллекции или shardKey)? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть большой экземпляр Arango с большим количеством баз данных - по одной для каждого проекта.Каждая база данных проектов имеет кучу коллекций и много данных.Базы данных выглядят примерно так:

project1
project2
project3
...
project500

Я бы хотел распределить нагрузку по запросу путем разделения экземпляра так, чтобы каждая база данных проекта работала на отдельном сервере, или раскручивал несколько больших хостов и автоматически настраивал Arango.,Однако, похоже, что шардинг ArangoDB работает только на уровне коллекции (например, по записи _key внутри коллекции).

Есть ли способ настроить шардинг по базе данных?Если нет, есть ли рекомендации по запуску / оркестровке нескольких экземпляров Arango?

Ответы [ 3 ]

0 голосов
/ 23 декабря 2018

Один из вариантов запуска нескольких экземпляров - использовать Docker Swarm.В приведенном ниже примере вы можете запустить несколько экземпляров ArangoDB

, которые вам понадобятся

, затем сохраните приведенный ниже код какdocker-stack-arango.yml

version: '3.3'

services:
  arangodb:
    image: "${ARANGO_IMAGE}"
    environment:
      ARANGO_ROOT_PASSWORD: "${ARANGO_ROOT_PASSWORD}"
      ARANGO_STORAGE_ENGINE: "${ARANGO_STORAGE_ENGINE}"
    volumes:
      - arangodb:/var/lib/arangodb3
      - arangodb_apps:/var/lib/arangodb3-apps
    ports:
      - target: 8529
        published: $ARANGO_PUBLISHED_PORT
        protocol: tcp
        mode: ingress
    deploy:
      mode: replicated
      replicas: 1
      endpoint_mode: vip
      placement:
        constraints:
          - node.labels.group==$INSTANCE_GROUP
      resources:
        limits:
          cpus: $LIMITS_CPU
          memory: $LIMITS_MEMORY
      restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 60s
      update_config:
        parallelism: 1
        delay: 30s
    stop_grace_period: 60s

volumes:
  arangodb:
    external:
      name: ${ARANGO_VOLUME}
  arangodb_apps:
    external:
      name: ${ARANGO_APPS_VOLUME}

обновить и запустить конфигурацию в shell / bash

export INSTANCE_GROUP="group1"
export INSTANCE_NAME="arango1"
export INSTANCE_PORT=8529
export INSTANCE_PASSWORD="do-not-use-this-password-in-production"

export ARANGO_IMAGE_TAG="3.4.0"
export ARANGO_IMAGE_REPO="arangodb/arangodb"
export ARANGO_IMAGE="${ARANGO_IMAGE_REPO}:${ARANGO_IMAGE_TAG}"
export ARANGO_VOLUME="arangodb-${INSTANCE_NAME}--3.4.0"
export ARANGO_APPS_VOLUME="arangodb-apps-${INSTANCE_NAME}--3.4.0"
export ARANGO_PUBLISHED_PORT=$INSTANCE_PORT
export ARANGO_STORAGE_ENGINE="rocksdb"
export ARANGO_ROOT_PASSWORD=$INSTANCE_PASSWORD
export LIMITS_CPU=1
export LIMITS_MEMORY=1024M

, а затем запустить deploy

docker stack deploy -c ./docker-stack-arango.yml $INSTANCE_NAME

для развертывания второго изменения экземпляра INSTANCE_NAME, INSTANCE_PORT и INSTANCE_GROUP и снова запустите развертывание

, после чего вы сможете получить доступ к экземплярам через ip любого узла с настроенным портом

0 голосов
/ 24 декабря 2018

Arango также может быть реализован с использованием Kubernetes вместо Docker swarm (возможно, лучше). Вы даже можете создать несколько автономных экземпляров сервера, если вы действительно этого хотите.Независимо от технологии реализации, я предполагаю, что другие ответы пытаются указать на то, что если у вас есть несколько независимых баз данных, вы можете иметь несколько экземпляров ArangoDB (или любой другой БД в этом отношении).Единственный раз, когда вы захотите хранить несколько БД в одном экземпляре, это если БД достаточно малы, чтобы не конкурировать за ресурсы сервера.

Разделение текущего экземпляра должно быть достаточно простым, поскольку вы можете независимо создавать резервные копии, восстанавливать и манипулировать различными БД.Sharding и другие связанные концепции, такие как разделение, предназначены для времен, когда вам нужно хранить все данные в одной базе данных.В этом случае нужно найти способ разделить данные на несколько серверов, сохраняя их как единое целое.Это не похоже на случай здесь.

Если вы хотите узнать больше о том, как использовать ArangoDb с Kubernetes, вы можете найти документацию здесь

0 голосов
/ 17 декабря 2018

Нет.Sharding реализован исключительно с целью распространения документов любой коллекции по нескольким серверам баз данных.Это средство для реализации памяти и балансировки нагрузки в кластерах ArangoDB.

...