Статьи

Couchbase Cluster на Docker Swarm с использованием Docker Compose и Docker Machine

В этом посте будет рассказано, как создать и масштабировать кластер Couchbase, используя полную броню Docker — Docker Machine, Docker Swarm и Docker Compose.

Вот что мы будем делать:

  • Создайте 3-узловый кластер Docker Swarm с помощью Docker Machine
  • Запустите экземпляр Couchbase на двух узлах
  • Создать кластер
  • Перебалансировать кластер
  • Масштабировать и перебалансировать кластер снова

couchbase-докер-рой 0

Docker Swarm Cluster с использованием Консул

Создайте кластер Docker Swarm с тремя узлами, используя Docker Machine:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Docker Machine for Consul
docker-machine \
   create \
   -d virtualbox \
   consul-machine
  
# Start Consul
docker $(docker-machine config consul-machine) run -d --restart=always \
         -p "8500:8500" \
         -h "consul" \
         progrium/consul -server -bootstrap
  
# Docker Swarm master
docker-machine \
  create \
  -d virtualbox \
  --swarm \
  --swarm-master \
  --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" \
  --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" \
  --engine-opt="cluster-advertise=eth1:2376" \
  swarm-master
  
# Docker Swarm node-01
docker-machine \
  create \
  -d virtualbox \
  --swarm \
  --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" \
  --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" \
  --engine-opt="cluster-advertise=eth1:2376" \
  swarm-node-01
  
# Docker Swarm node-02
docker-machine \
  create \
  -d virtualbox \
  --virtualbox-disk-size "5000" \
  --swarm \
  --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" \
  --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" \
  --engine-opt="cluster-advertise=eth1:2376" \
  swarm-node-02
  
# Configure to use Docker Swarm cluster
eval "$(docker-machine env --swarm swarm-master)"

Предоставьте Swarm кластер с Docker Machine, чтобы узнать больше о том, почему и что сделано в этом сценарии. Вот резюме:

  • Создайте Docker Machine и запустите Consul для обнаружения службы
  • Создайте три Docker Machines — один для Master и два для рабочих узлов. Каждый компьютер настроен для работы в кластере Swarm с помощью --swarm . Он также использует обнаружение службы Consul, указанное с помощью --swarm-discovery .

Узлы Couchbase на Docker Swarm

Создайте два экземпляра Couchbase, используя Docker Compose:

01
02
03
04
05
06
07
08
09
10
version: &2&
services:
  db:
    image: arungupta/couchbase
    network_mode: &host&
    ports:
      - 8091:8091
      - 8092:8092
      - 8093:8093
      - 11210:11210

arungupta/couchbase изображение arungupta/couchbase . Это изображение определено в Couchbase Docker Image. Он использует официальное дополнение Couchbase Docker Image, настраивает его, как описано ниже:

  1. Настройка памяти для индекса и данных
  2. Настраивает сервер Couchbase с помощью службы индексирования, данных и запросов
  3. Устанавливает имя пользователя и пароль
  4. Загружает ведро с travel-sample

Compose файл использует сеть host . Это эквивалентно использованию --net=host в командной --net=host . Это позволяет контейнеру использовать сетевой стек хоста. Он также ограничивает запуск только одного контейнера Couchbase на одной машине Docker. Таким образом, это означает, что наш кластер Couchbase может масштабироваться в зависимости от количества Docker Machines — 3 в нашем случае.

Точная команда для использования этого Compose-файла:

01
02
03
04
05
06
07
08
09
10
11
12
docker-compose scale db=2
WARNING: The "db" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating and starting couchbasedockerswarm_db_1 ...
Creating and starting couchbasedockerswarm_db_2 ...
Pulling db (arungupta/couchbase:latest)...
swarm-node-02: Pulling arungupta/couchbase:latest...
swarm-master: Pulling arungupta/couchbase:latest...
swarm-node-01: Pulling arungupta/couchbase:latest...
Pulling db (arungupta/couchbase:latest)...
swarm-node-02: Pulling arungupta/couchbase:latest... : downloaded
Creating and starting couchbasedockerswarm_db_1 ... done
Creating and starting couchbasedockerswarm_db_2 ... done

В кластере Docker Swarm есть три узла. Стратегия планировщика по умолчанию spread поэтому контейнеры будут распределяться по разным хостам.

Это видно по docker ps :

1
2
3
4
docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
4c8c149f4e34        arungupta/couchbase   &/entrypoint.sh /opt/&   44 seconds ago      Up 44 seconds                           swarm-node-02/couchbasedockerswarm_db_1
d3b6a1dbddb5        arungupta/couchbase   &/entrypoint.sh /opt/&   44 seconds ago      Up 44 seconds                           swarm-node-01/couchbasedockerswarm_db_2

Обратите внимание, что один сервер Couchbase работает на swarm-node-01 а другой — на swarm-node-02 . Каждый сервер настроен с именем Administrator и паролем Administrator .

Узнайте IP-адрес Docker Machine:

1
2
3
4
5
6
7
docker-machine ls
NAME             ACTIVE      DRIVER       STATE     URL                         SWARM                   DOCKER    ERRORS
consul-machine   -           virtualbox   Running   tcp://192.168.99.106:2376                           v1.11.1  
default          -           virtualbox   Running   tcp://192.168.99.100:2376                           v1.11.0  
swarm-master     * (swarm)   virtualbox   Running   tcp://192.168.99.107:2376   swarm-master (master)   v1.11.1  
swarm-node-01    -           virtualbox   Running   tcp://192.168.99.108:2376   swarm-master            v1.11.1  
swarm-node-02    -           virtualbox   Running   tcp://192.168.99.109:2376   swarm-master            v1.11.1

Если у вас установлен jq, тогда IP-адрес можно найти следующим образом:

1
2
docker-machine inspect swarm-node-01 | jq &.Driver.IPAddress&
&192.168.99.108&

Couchbase Cluster на Docker Swarm

Все узлы сервера Couchbase созданы равными. Это позволяет кластеру Couchbase по-настоящему масштабироваться горизонтально, чтобы удовлетворить ваши растущие требования приложений. Независимо работающие узлы Couchbase могут быть добавлены в кластер, вызвав команду server-add CLI. Обычно это двухэтапный процесс. Первым шагом является добавление одного или нескольких узлов. Затем на втором этапе выполняется перебалансировка кластера, в котором данные на существующих узлах перебалансируются в обновленном кластере.

В нашем случае на каждом Docker Machine работает один контейнер Couchbase. Давайте выберем IP-адрес любого узла Couchbase и добавим IP-адрес другого узла:

01
02
03
04
05
06
07
08
09
10
docker run -it arungupta/couchbase \
couchbase-cli \
server-add \
--cluster=`docker-machine inspect swarm-node-01 | jq -r &.Driver.IPAddress&`:8091 \
--user Administrator \
--password password \
--server-add=`docker-machine inspect swarm-node-02 | jq -r &.Driver.IPAddress&` \
--server-add-username=Administrator \
--server-add-password=password
SUCCESS: server-add 192.168.99.109:8091

Couchbase Web Console для обоих узлов покажет похожий вывод:

couchbase-докер-рой-1

couchbase-докер-рой-2

Это показывает, что два узла теперь образуют кластер, и его необходимо перебалансировать.

Rebalance Couchbase Cluster

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

1
2
3
docker run -it arungupta/couchbase couchbase-cli rebalance --cluster=`docker-machine inspect swarm-node-01 | jq -r &.Driver.IPAddress&`:8091 --user Administrator --password password
INFO: rebalancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SUCCESS: rebalanced cluster

Couchbase Web Console будет обновлена, чтобы показать, что происходит перебалансировка:

couchbase-докер-рой-3

И, наконец, вы увидите перебалансированный кластер:

couchbase-докер-рой-4

Масштабирование и ребалансировка Couchbase Cluster

Масштабируйте кластер Couchbase:

1
2
3
docker-compose scale db=3
WARNING: The &db& service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating and starting couchbasedockerswarm_db_3 ... done

Убедитесь, что контейнер работает на другом компьютере Docker:

1
2
3
4
5
docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
02f94e2bbd3e        arungupta/couchbase   &/entrypoint.sh /opt/&   9 seconds ago       Up 8 seconds                            swarm-master/couchbasedockerswarm_db_3
4c8c149f4e34        arungupta/couchbase   &/entrypoint.sh /opt/&   About an hour ago   Up About an hour                        swarm-node-02/couchbasedockerswarm_db_1
d3b6a1dbddb5        arungupta/couchbase   &/entrypoint.sh /opt/&   About an hour ago   Up About an hour                        swarm-node-01/couchbasedockerswarm_db_2

Как упоминалось ранее, масштабирование кластера Couchbase является двухэтапным процессом. Это так, потому что обычно вы добавляете несколько серверов, а затем перебалансируете кластер. Однако в тех случаях, когда вам нужно только добавить один узел Couchbase, а затем выполнить перебалансировку, для этого можно использовать команду перебалансировки.

В нашем случае это делается так, как показано:

1
2
3
4
docker run -it arungupta/couchbase couchbase-cli rebalance --cluster=`docker-machine inspect swarm-node-01 | jq -r &.Driver.IPAddress&`:8091 --user Administrator --password password --server-add=`docker-machine inspect swarm-master | jq -r &.Driver.IPAddress&` --server-add-username=Administrator --server-add-password=password
SUCCESS: server-add 192.168.99.107:8091
INFO: rebalancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SUCCESS: rebalanced cluster

Перебалансированный кластер теперь выглядит так:
couchbase-докер-рой-5

Этот блог показал, как вы можете легко создавать и масштабировать кластер Couchbase, используя Docker Swarm, Machine и Compose.

Наслаждайтесь!