1.docker集群的概念

     在docker集群搭建之前,一台机器中的容器和其他机器之间的容器是不能很方便的通信的,像下面这个样子:

consul 单机docker集群 docker集群搭建_集群搭建


    在docker集群搭建之后,一台机器上的容器与其他机器之间的容器就可以通过docker集群的网络进行通信了,像下面这个样子:

consul 单机docker集群 docker集群搭建_初始化_02



2.docker集群搭建过程

    在一个节点上执行docker swarm init --advertise-addr $(one node's ip),在一个节点上初始化集群,这个节点初始化集群后以manager leader的形式存在,集群初始化后会产生两个TOKEN,用于其他节点以worker节点或者manager节点加入(manager节点本身也是worker节点,他还会记录集群中有哪些服务,这些服务分布在哪几台机器以及他们的状态),其他节点如果要加入集群可以通过docker swarm join --token $TOKEN $(manager leader's ip):2377加入集群,集群的节点之间通过docker engine进行互相通信。

3. 在集群中部署服务
   
集群中的服务实际上就是一个容器,内部运行了你的程序,但是集群之间各个节点需要通过集群网络进行通信,这些命令都需要在manager节点运行。

     先搭建个集群网络,例如:docker network create --driver overlay go-demo
    搭建集群的服务:docker service create --name go-demo-db --network go-demo mongo, --name指定你的服务的名称,他在集群中是唯一的名称,mongo是使用的镜像。
4.集群服务的扩展
    刚才启动了go-demo-db服务,实际上只有一个服务在运行,在生产环境肯定是不行的,我们可以对它进行水平扩展,例如在集群中扩展到5个服务:docker service scale go-demo-db=5,这5个服务会由manager节点分配到不同节点上去运行,具体每个节点上运行几个,集群会按照这个节点的压力分配运行个数
5.故障切换
   
故障切换指的是当一个节点挂掉之后, manager节点会把服务切换到其他节点运行,例如上面扩展了5个服务,如果一个节点上假设运行有2个服务,这个节点挂掉了,这2个服务会被安排到其他节点运行。