这篇博客文章将解释如何使用完整的Docker装甲-Docker Machine,Docker Swarm和Docker Compose创建和扩展Couchbase集群。
这是我们要做的:
- 使用Docker Machine创建3节点Docker Swarm集群
- 在两个节点上运行Couchbase实例
- 创建集群
- 重新平衡集群
- 再次扩展并重新平衡集群
使用Consul的Docker Swarm集群
使用Docker Machine创建一个三节点的Docker Swarm集群:
# 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)"
使用Docker Machine设置Swarm集群可提供有关此脚本执行的原因和操作的更多详细信息。 总结如下:
- 创建一个Docker Machine并运行Consul进行服务发现
- 创建三台Docker计算机-一台用于Master节点,两台用于Worker节点。每台计算机都使用
--swarm
配置为Swarm集群的--swarm
。 它还使用通过--swarm-discovery
指定的Consul服务--swarm-discovery
。
Docker Swarm上的Couchbase节点
使用Docker Compose创建两个Couchbase实例:
version: &2&
services:
db:
image: arungupta/couchbase
network_mode: &host&
ports:
- 8091:8091
- 8092:8092
- 8093:8093
- 11210:11210
这里使用arungupta/couchbase
图像。 该映像在Couchbase Docker映像中定义。 它使用Official Couchbase Docker Image add对其进行配置,如下所述:
- 设置索引和数据的内存
- 使用索引,数据和查询服务配置Couchbase服务器
- 设置用户名和密码凭证
- 装载
travel-sample
桶
撰写文件使用host
网络。 这等效于在--net=host
run CLI上使用--net=host
。 它允许容器使用主机网络堆栈。 它还仅将单个Couchbase容器限制在单个Docker Machine上运行。 因此,这意味着我们的Couchbase集群可以根据Docker Machines的数量进行扩展-在我们的示例中为3。
使用此Compose文件的确切命令是:
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
可以证明这一点:
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
和密码password
。
找出Docker机器的IP地址:
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地址:
docker-machine inspect swarm-node-01 | jq &.Driver.IPAddress&
&192.168.99.108&
Docker Swarm上的Couchbase集群
创建的所有Couchbase服务器节点均相等。 这使Couchbase集群真正可以水平扩展,以满足您不断增长的应用程序需求。 可以通过调用server-add
CLI命令server-add
独立运行的Couchbase节点添加到群集中。 这通常是一个两步过程。 第一步是添加一个或多个节点。 然后,第二步重新平衡群集,在现有节点上的数据将在更新后的群集之间重新平衡。
在我们的例子中,每个Docker机器上都运行一个Couchbase容器。 让我们选择一个Couchbase节点的IP地址,并添加另一个节点的IP地址:
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控制台将显示类似的输出:
这表明两个节点现在组成一个集群,需要重新平衡。
重新平衡Couchbase群集
现在,让我们重新平衡集群:
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集群
扩展Couchbase集群:
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 Machine上运行:
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节点然后重新平衡的情况下,可以使用rebalance命令来实现。
在我们的例子中,如下所示:
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
该博客显示了如何使用Docker Swarm,Machine和Compose轻松创建和扩展Couchbase集群。
请享用!