В этом посте будет рассказано, как создать и масштабировать кластер Couchbase, используя полную броню Docker — Docker Machine, Docker Swarm и Docker Compose.
Вот что мы будем делать:
- Создайте 3-узловый кластер Docker Swarm с помощью Docker Machine
- Запустите экземпляр Couchbase на двух узлах
- Создать кластер
- Перебалансировать кластер
- Масштабировать и перебалансировать кластер снова
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, настраивает его, как описано ниже:
- Настройка памяти для индекса и данных
- Настраивает сервер Couchbase с помощью службы индексирования, данных и запросов
- Устанавливает имя пользователя и пароль
- Загружает ведро с
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 для обоих узлов покажет похожий вывод:
Это показывает, что два узла теперь образуют кластер, и его необходимо перебалансировать.
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 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, используя Docker Swarm, Machine и Compose.
Наслаждайтесь!
Ссылка: | Couchbase Cluster на Docker Swarm с использованием Docker Compose и Docker Machine от нашего партнера по JCG Аруна Гупта из блога Miles to go 3.0… . |