В этом посте будет рассказано, как создать и масштабировать кластер 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 Consuldocker-machine \ create \ -d virtualbox \ consul-machine # Start Consuldocker $(docker-machine config consul-machine) run -d --restart=always \ -p "8500:8500" \ -h "consul" \ progrium/consul -server -bootstrap # Docker Swarm masterdocker-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-01docker-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-02docker-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 clustereval "$(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=2WARNING: 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... : downloadedCreating and starting couchbasedockerswarm_db_1 ... doneCreating and starting couchbasedockerswarm_db_2 ... done |
В кластере Docker Swarm есть три узла. Стратегия планировщика по умолчанию spread поэтому контейнеры будут распределяться по разным хостам.
Это видно по docker ps :
|
1
2
3
4
|
docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4c8c149f4e34 arungupta/couchbase &/entrypoint.sh /opt/& 44 seconds ago Up 44 seconds swarm-node-02/couchbasedockerswarm_db_1d3b6a1dbddb5 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 lsNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORSconsul-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=passwordSUCCESS: 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=3WARNING: 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 psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES02f94e2bbd3e arungupta/couchbase &/entrypoint.sh /opt/& 9 seconds ago Up 8 seconds swarm-master/couchbasedockerswarm_db_34c8c149f4e34 arungupta/couchbase &/entrypoint.sh /opt/& About an hour ago Up About an hour swarm-node-02/couchbasedockerswarm_db_1d3b6a1dbddb5 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=passwordSUCCESS: server-add 192.168.99.107:8091INFO: rebalancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .SUCCESS: rebalanced cluster |
Перебалансированный кластер теперь выглядит так:

Этот блог показал, как вы можете легко создавать и масштабировать кластер Couchbase, используя Docker Swarm, Machine и Compose.
Наслаждайтесь!
| Ссылка: | Couchbase Cluster на Docker Swarm с использованием Docker Compose и Docker Machine от нашего партнера по JCG Аруна Гупта из блога Miles to go 3.0… . |




