Статьи

Сохранение данных Couchbase во время перезапуска контейнера

Рекомендации для виртуализированных платформ предоставляют рекомендации по запуску Couchbase на виртуализированной платформе, такой как Amazon Web Services и Azure. Кроме того, он также предоставляет некоторые рекомендации для запуска его в качестве контейнера Docker.

Одна из рекомендаций состоит в том, чтобы отобразить данные, специфичные для узла Couchbase, в локальную папку Давайте разберемся в этом подробнее.

Неявное хранение в контейнерах

Если контейнер Couchbase запущен как:

1
docker run -d -p 8091-8093:8091-8093 -p 11210:11210 --name db couchbase/server:sandbox

Этот контейнер:

  • Запускается в отдельном режиме, используя -d
  • Различные порты запросов, кэширования и администрирования отображаются с помощью -p
  • Имя предоставляется с использованием --name
  • Изображение является couchbase/server:sandbox

По умолчанию данные для контейнера хранятся в управляемом томе . Проверка монтирования тома с помощью команды docker inspect показывает:

01
02
03
04
05
06
07
08
09
10
11
12
docker inspect --format '{{json .Mounts }}' db  | jq
[
  {
    "Name": "aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948",
    "Source": "/var/lib/docker/volumes/aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948/_data",
    "Destination": "/opt/couchbase/var",
    "Driver": "local",
    "Mode": "",
    "RW": true,
    "Propagation": ""
  }
]

Данные для Couchbase хранятся в файловой системе контейнера, определяемой значением атрибута Source . Это можно проверить, войдя в корневую файловую систему:

1
docker run -it --pid=host --privileged debian:jessie nsenter -t 1 -m -p -n

Теперь вы можете увидеть каталог данных:

1
2
010e52853bc6:~# ls /var/lib/docker/volumes | grep aa3c
aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948

Новый каталог создается для нового запуска контейнера. Этот каталог все еще существует, когда контейнер остановлен и удален, но более недоступен. Таким образом, данные не сохраняются при перезапуске контейнера.

Том можно явно удалить вместе с контейнером, используя команду:

1
docker rm -v db

Если контейнер завершает работу, тогда все состояние приложения теряется.

Явное сопоставление директории хоста

Теперь давайте запустим контейнер Couchbase с явным отображением тома:

1
docker run -d -p 8091-8093:8091-8093 -p 11210:11210 --name db -v ~/couchbase:/opt/couchbase/var couchbase/server:sandbox

Этот контейнер очень похож на контейнер, запущенный ранее. Основное отличие состоит в том, что каталог с хоста ~/couchbase отображается в каталог в контейнере /opt/couchbase/var .

Контейнер Couchbase сохраняет любые данные в /opt/couchbase/var в файловой системе контейнера. Теперь этот каталог сопоставлен с каталогом в файловой системе хоста. Это позволяет сохранить состояние контейнера снаружи в файловой системе хоста. Обходит файловую систему объединения, используемую Docker, и предоставляет файловую систему хоста контейнеру. Это позволяет состоянию сохраняться при перезапуске контейнера. Новый контейнер должен начинаться только с того же сопоставления тома.

Более подробную информацию о контейнере можно увидеть как:

1
docker inspect --format '{{json .Mounts }}' db | jq

jq — это JSON-процессор, который нужно устанавливать отдельно. И вывод отображается как:

1
2
3
4
5
6
7
8
9
[
  {
    "Source": "/Users/arungupta/couchbase",
    "Destination": "/opt/couchbase/var",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
  }
]

Это показывает исходный и целевой каталог. RW показывает, что том для чтения / записи.

Если контейнер запущен с использованием Docker для Mac, веб-консоль Couchbase доступна по адресу http: // localhost: 8091. На вкладке Data Buckets показана корзина travel-sample по умолчанию:

Докер-объем-couchbase-01

Нажмите « Create New Data Bucket чтобы создать новую корзину данных. Дайте ему имя sample :

докер-объемно-couchbase-02

Вкладка Data Buckets обновляется с помощью этого нового блока:

докер-объемно-couchbase-03

Теперь остановитесь и удалите контейнер:

1
2
docker stop db
docker rm db

Запустите контейнер снова, используя ту же команду:

1
docker run -d -p 8091-8093:8091-8093 -p 11210:11210 --name db -v ~/couchbase:/opt/couchbase/var couchbase/server:sandbox

Вкладка Data Buckets отобразит те же два сегмента в веб-консоли Couchbase.

В этом случае, если контейнер запущен на другом хосте, состояние будет недоступно. Или если хост умирает, то состояние теряется.

Альтернативным и более надежным и надежным способом управления постоянством в контейнерах является использование общей сетевой файловой системы, такой как Ceph , GlusterFS или Network Filesystem . Некоторые другие распространенные подходы заключаются в использовании подключаемых модулей Docker Volume, таких как Flocker из ClusterHQ или Software Defined Storage, таких как PortWorx. Все эти методы хранения упрощают способ сохранения состояния контейнера в многоконтейнерной среде с несколькими хостами. В будущем блоге будут подробно описаны эти методы.

Подробнее читайте в разделе Управление данными в контейнерах .

couchbase.com/containers предоставляет более подробную информацию о том, как запустить Couchbase в различных контейнерах.

Больше информации о Couchbase: