使用Docker Swarm,Machine和Compose的Couchbase XDCR

Couchbase中的跨数据中心复制(XDCR)提供了一种将数据从一个群集复制到另一个群集的简便方法。 这些群集通常设置在地理位置不同的数据中心中。 这样可以进行灾难恢复或使数据离用户更近,以便更快地访问数据。

该博客将显示:

  • 使用Docker Swarm设置两个数据中心
  • 在Docker Swarm的每个节点上运行Couchbase容器
  • 在每个Docker Swarm集群上设置一个Couchbase集群
  • 在两个Couchbase群集之间配置单向XDCR

就本博客而言,将使用Docker Machine在本地计算机上设置两个数据中心。

swarm-xdcr-couchbase-概述

该博客中使用的完整代码可在github.com/arun-gupta/couchbase-xdcr-docker上找到

创建领事发现服务

Docker Swarm中的每个节点都需要向发现服务注册。 该博客将为此目的使用Consul。 甚至Consul也将在Docker Machine上运行。

通常,您将运行Consul集群,但为简单起见,在我们的案例中仅启动了一个实例。

创建一个Docker Machine并使用以下脚本启动Consul:

# 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使用以下值来--swarm-discovery

consul://$(docker-machine ip consul-machine):8500/v1/kv/<key>

使用以下脚本,使用Docker Machine创建一个Docker Swarm集群:

# 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)"

该脚本需要通过以下方式调用:

./create-docker-swarm-cluster.sh A
./create-docker-swarm-cluster.sh B

这将创建两个带有一个“主”和两个“工作”的Docker Swarm集群,如下所示:

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

Consul在IP地址为192.168.99.101的Docker Machine上运行。 因此可以在http://192.168.99.101:8500访问Consul UI:

swarm-xdcr-couchbase-1024x543

它显示了两个已注册的Docker Swarm集群。

还可以看到每个群集的确切节点列表。 显示了clusterA中的节点:

群xdcr领事群集A-1024x466

显示了clusterB中的节点:

群xdcr领事群集B-1024x459

运行Couchbase容器

使用此Compose文件在Docker Swarm集群的每个节点上运行Couchbase容器。

version: "2"
services:
  db:
    image: arungupta/couchbase
    network_mode: "host"
    ports:
      - 8091:8091
      - 8092:8092
      - 8093:8093
      - 11210:11210

为第一个集群配置Docker CLI并运行3个容器:

eval "$(docker-machine env --swarm swarm-master-A)"
docker-compose scale db=3

检查正在运行的容器:

> 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 CLI并运行3个容器:

eval "$(docker-machine env --swarm swarm-master-B)"
docker-compose scale db=3

检查正在运行的容器:

> 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集群

使用CLI扩展和重新平衡Couchbase群集说明了如何创建Couchbase节点的群集以及如何使用Couchbase CLI重新平衡现有群集。

使用此脚本在每个Swarm群集上创建Couchbase群集。

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

该脚本需要通过以下方式调用:

./create-couchbase-cluster.sh A

现在,使用以下脚本重新平衡该群集:

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

该脚本的调用方式为:

./rebalance-couchbase-cluster.sh A

集群中任何节点的Couchbase Web控制台将显示输出:

swarm-xdcr-couchbase-clusterA-1024x435

调用此脚本以创建第二个Couchbase集群,如下所示:

./create-couchbase-cluster.sh B

将群集重新平衡为:

./rebalance-couchbase-cluster.sh B

第二个群集中任何节点的Couchbase Web控制台将显示输出:

swarm-xdcr-couchbase-clusterB-1024x430

设置XDCR

跨数据中心复制可以设置为单向,双向或多向。 单向允许从源群集到目标群集复制数据,双向允许双向复制,多向允许在任何方向进行配置。

我们将使用以下脚本创建一个简单的单向复制:

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

该脚本的调用方式为:

./setup-xdcr.sh A B

通过再次执行命令,但是反转源群集和目标群集,可以轻松创建双向复制。

源集群的Couchbase Web控制台将显示:

swarm-xdcr-couchbase-clusterA-xdcr-1024x441

目标群集的Couchbase Web控制台将显示:

swarm-xdcr-couchbase-clusterB-xdcr-1024x413

请享用!

该博客显示了如何使用Docker Machine,Docker Swarm和Docker Compose简化复杂的部署。

翻译自: https://www.javacodegeeks.com/2016/05/couchbase-xdcr-using-docker-swarm-machine-compose.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值