Cross Datacenter Replication (XDCR) в Couchbase обеспечивает простой способ репликации данных из одного кластера в другой. Кластеры обычно устанавливаются в географически разнородных центрах обработки данных. Это позволяет выполнять аварийное восстановление или приближать данные к пользователям для более быстрого доступа к данным.
Этот блог покажет:
- Настройте два датацентра с помощью Docker Swarm
- Запустите контейнеры Couchbase на каждом узле Docker Swarm.
- Настройте кластер Couchbase на каждом кластере Docker Swarm
- Настройте одностороннюю XDCR между двумя кластерами Couchbase
Для целей этого блога два центра обработки данных будут настроены на локальном компьютере с использованием Docker Machine.
Полный код, используемый в этом блоге, доступен по адресу: github.com/arun-gupta/couchbase-xdcr-docker .
Создать Консул Дискавери Сервис
Каждый узел в Docker Swarm должен быть зарегистрирован в службе обнаружения . Этот блог будет использовать Консул для этой цели. И даже Консул будет работать на Docker Machine.
Как правило, вы запускаете кластер Консул, но для простоты в нашем случае запускается один экземпляр.
Создайте Docker Machine и запустите Consul, используя этот скрипт :
01
02
03
04
05
06
07
08
09
10
11
|
# 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 кластер
Docker Swarm позволяет рассматривать несколько хостов Docker как единое целое. Это позволяет вашим мультиконтейнерным приложениям легко запускаться на нескольких хостах. Docker Swarm обслуживает тот же Remote API, что и отдельный хост. Это позволяет вашим существующим инструментам ориентироваться на один хост или кластер хостов.
Оба кластера Docker Swarm будут зарегистрированы в одной службе обнаружения. Это достигается с помощью следующего значения для --swarm-discovery
:
1
|
consul: //$(docker-machine ip consul-machine):8500/v1/kv/<key> |
Создайте кластер 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
|
# Docker Swarm master docker-machine \ create \ -d virtualbox \ --swarm \ --swarm-master \ --swarm-discovery= "consul://$(docker-machine ip consul-machine):8500/v1/kv/cluster$1" \ --engine-opt= "cluster-store=consul://$(docker-machine ip consul-machine):8500/v1/kv/cluster$1" \ --engine-opt= "cluster-advertise=eth1:2376" \ swarm-master-$ 1 # Docker Swarm node- 01 docker-machine \ create \ -d virtualbox \ --swarm \ --swarm-discovery= "consul://$(docker-machine ip consul-machine):8500/v1/kv/cluster$1" \ --engine-opt= "cluster-store=consul://$(docker-machine ip consul-machine):8500/v1/kv/cluster$1" \ --engine-opt= "cluster-advertise=eth1:2376" \ swarm-node-$ 1 - 01 # Docker Swarm node- 02 docker-machine \ create \ -d virtualbox \ --swarm \ --swarm-discovery= "consul://$(docker-machine ip consul-machine):8500/v1/kv/cluster$1" \ --engine-opt= "cluster-store=consul://$(docker-machine ip consul-machine):8500/v1/kv/cluster$1" \ --engine-opt= "cluster-advertise=eth1:2376" \ swarm-node-$ 1 - 02 # Configure to use Docker Swarm cluster eval "$(docker-machine env --swarm swarm-master-$1)" |
Сценарий должен быть вызван как:
1
2
|
./create-docker-swarm-cluster.sh A ./create-docker-swarm-cluster.sh B |
Это создаст два кластера Docker Swarm с одним «master» и двумя «worker», как показано ниже:
1
2
3
4
5
6
7
8
9
|
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS consul-machine - virtualbox Running tcp: //192.168.99.101:2376 v1.11.1 default * virtualbox Running tcp: //192.168.99.100:2376 v1.11.1 swarm-master-A - virtualbox Running tcp: //192.168.99.102:2376 swarm-master-A (master) v1.11.1 swarm-master-B - virtualbox Running tcp: //192.168.99.105:2376 swarm-master-B (master) v1.11.1 swarm-node-A- 01 - virtualbox Running tcp: //192.168.99.103:2376 swarm-master-A v1.11.1 swarm-node-A- 02 - virtualbox Running tcp: //192.168.99.104:2376 swarm-master-A v1.11.1 swarm-node-B- 01 - virtualbox Running tcp: //192.168.99.106:2376 swarm-master-B v1.11.1 swarm-node-B- 02 - virtualbox Running tcp: //192.168.99.107:2376 swarm-master-B v1.11.1 |
Консул работает на Docker Machine с IP-адресом 192.168.99.101. И, таким образом, пользовательский интерфейс Консула доступен по адресу http://192.168.99.101:8500:
Он показывает два кластера Docker Swarm, которые были зарегистрированы.
Точный список узлов для каждого кластера также можно увидеть. Узлы в clusterA
показаны:
Узлы в clusterB
показаны:
Запустить контейнеры Couchbase
Запустите контейнер Couchbase на каждом узле кластера Docker Swarm, используя этот файл 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 |
Настройте интерфейс командной строки Docker для первого кластера и запустите 3 контейнера:
1
2
|
eval "$(docker-machine env --swarm swarm-master-A)" docker-compose scale db= 3 |
Проверьте работающие контейнеры:
1
2
3
4
5
|
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ec0f15aaee0 arungupta/couchbase "/entrypoint.sh /opt/" 3 hours ago Up 3 hours swarm-master-A/couchbasexdcrdocker_db_3 07af2ac53539 arungupta/couchbase "/entrypoint.sh /opt/" 3 hours ago Up 3 hours swarm-node-A- 02 /couchbasexdcrdocker_db_2 c94878f543fd arungupta/couchbase "/entrypoint.sh /opt/" 3 hours ago Up 3 hours swarm-node-A- 01 /couchbasexdcrdocker_db_1 |
Настройте интерфейс командной строки Docker для второго кластера и запустите 3 контейнера:
1
2
|
eval "$(docker-machine env --swarm swarm-master-B)" docker-compose scale db= 3 |
Проверьте работающие контейнеры:
1
2
3
4
5
6
|
> eval "$(docker-machine env --swarm swarm-master-B)" > docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e3a45480939 arungupta/couchbase "/entrypoint.sh /opt/" 3 hours ago Up 3 hours swarm-master-B/couchbasexdcrdocker_db_3 1f31f23e337d arungupta/couchbase "/entrypoint.sh /opt/" 3 hours ago Up 3 hours swarm-node-B- 01 /couchbasexdcrdocker_db_1 1feab04c494c arungupta/couchbase "/entrypoint.sh /opt/" 3 hours ago Up 3 hours swarm-node-B- 02 /couchbasexdcrdocker_db_2 |
Создать / Ребалансировать кластер Couchbase
Масштабирование и ребалансировка кластера Couchbase с использованием CLI объясняет, как создать кластер узлов Couchbase и перебалансировать существующий кластер с помощью CLI Couchbase .
Создайте кластер Couchbase на каждом кластере Swarm, используя этот скрипт .
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
export COUCHBASE_CLI=/Users/arungupta/tools/Couchbase-Server- 4.0 .app/Contents/Resources/couchbase-core/bin/couchbase-cli for node in 01 02 do $COUCHBASE_CLI \ server-add \ --cluster=$(docker-machine ip swarm-master-$ 1 ): 8091 \ --user Administrator \ --password password \ --server-add=$(docker-machine ip swarm-node-$ 1 -$node) \ --server-add-username=Administrator \ --server-add-password=password done $COUCHBASE_CLI \ setting-cluster \ --cluster=$(docker-machine ip swarm-master-$ 1 ): 8091 \ --user Administrator \ --password password \ --cluster-name=cluster$ 1 |
Сценарий должен быть вызван как:
1
|
./create-couchbase-cluster.sh A |
А теперь перебалансируем этот кластер, используя этот скрипт:
1
2
3
4
5
6
7
8
|
export COUCHBASE_CLI=/Users/arungupta/tools/Couchbase-Server- 4.0 .app/Contents/Resources/couchbase-core/bin/couchbase-cli $COUCHBASE_CLI \ rebalance \ --cluster=$(docker-machine ip swarm-master-$ 1 ): 8091 \ --user Administrator \ --password password \ --server-add-username=Administrator \ --server-add-password=password |
Этот скрипт вызывается как:
1
|
./rebalance-couchbase-cluster.sh A |
Couchbase Web Console для любого узла в кластере покажет вывод:
Запустите этот скрипт, чтобы создать второй кластер Couchbase:
1
|
./create-couchbase-cluster.sh B |
Перебалансировать этот кластер как:
1
|
./rebalance-couchbase-cluster.sh B |
Couchbase Web Console для любого узла во втором кластере покажет вывод:
Настройка XDCR
Перекрестная репликация в центре обработки данных может быть однонаправленной, двунаправленной или разнонаправленной. Однонаправленный позволяет реплицировать данные из исходного кластера в целевой кластер, двунаправленный позволяет репликацию в обоих направлениях, разнонаправленный позволяет настраивать в любом направлении.
Мы создадим простую однонаправленную репликацию, используя этот скрипт :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
export COUCHBASE_CLI=/Users/arungupta/tools/Couchbase-Server- 4.0 .app/Contents/Resources/couchbase-core/bin/couchbase-cli $COUCHBASE_CLI \ xdcr-setup \ --cluster=$(docker-machine ip swarm-master-$ 1 ): 8091 \ --user Administrator \ --password password \ --create \ --xdcr-cluster-name=cluster$ 1 \ --xdcr-hostname=$(docker-machine ip swarm-master-$ 2 ): 8091 \ --xdcr-username=Administrator \ --xdcr-password=password \ --xdcr-demand-encryption= 0 $COUCHBASE_CLI \ xdcr-replicate \ --cluster $(docker-machine ip swarm-master-$ 1 ): 8091 \ --xdcr-cluster-name=cluster$ 1 \ --user Administrator \ --password password \ --create \ --xdcr-from-bucket=travel-sample \ --xdcr-to-bucket=travel-sample |
Этот скрипт вызывается как:
1
|
./setup-xdcr.sh A B |
Двунаправленную репликацию можно легко создать, выполнив команды снова, но поменяв местами исходный и целевой кластеры.
Couchbase Web Console для исходного кластера покажет:
Couchbase Web Console для целевого кластера покажет:
Наслаждайтесь!
В этом блоге показано, как можно упростить сложные развертывания с помощью Docker Machine, Docker Swarm и Docker Compose.
Ссылка: | Couchbase XDCR с использованием Docker Swarm, Machine и Compose от нашего партнера JCG Аруна Гупты из блога Miles to go 3.0… . |