手机版

Docker Swarm + HAProxy 实现高可用

时间:2020-03-17 来源:互联网 编辑:宝哥软件园 浏览:

什么是高可用性?

高可用性: High Availability (简称 HA) 可用性 (Availability) = 可靠性 (Reliability) + 可维护性 (Maintainability) 自动检测、自动切换、自动恢复 主从方式、互备方式、集群方式

集群的三大核心概念

集群 (Cluster) 节点 (Node) 服务 (Service)

本文将介绍 Docker Swarm + HAProxy 来实现服务的高可用性

环境信息

本机 Mac Docker Version 17.06.1-ce-mac24 (18950)

创建节点(虚拟机)

Docker Swarm + HAProxy 实现高可用

在 Mac 执行如下命令创建节点

$ docker-machine create manager1
$ docker-machine create work1
$ docker-machine create work2
$ docker-machine create work3

进入节点(虚拟机)

再开启另外的4个窗口,分别执行

$ docker-machine ssh manager1
$ docker-machine ssh work1
$ docker-machine ssh work2
$ docker-machine ssh work3

未分类

初始化集群

1、初始化 Manager

未分类

在 manager1 节点上执行

docker swarm init --advertise-addr 192.168.99.100`

未分类

命令成功后,会有提示,如何将 worker 加入集群,即 docker swarm … 这行命令。

提示:如果忘记此处的 token,可以使用 docker swarm join-token worker 命令查看。

2、将 work1,work2,work3 加入集群

未分类

在 work1, work2, work3 上分别执行,此行命令详见上一步中的提示

docker swarm join --token SWMTKN-1-1rt31l3671hig69vkfqha994rydnwr67gxt6o0suv71zzobpgn-b930rnc1pzewxv9h73plq58rd 192.168.99.100:2377

未分类

笔记:集群中加入worker的命令是

docker swarm join --token [token] [manager-ip]:[manager-port]

创建服务

此处以 nginx 为例。首先,创建有 2 个副本的 nginx 服务,在 manger1 上执行

$ docker service create --replicas 2 
-d 
-p 8080:80 
--name any-nginx 
registry.docker-cn.com/library/nginx

提示:此处用到了镜像加速仓库

执行完毕之后,查看服务列表信息

$ docker service ls

未分类

查看服务信息

$ docker service ps vv

笔记:查看服务信息命令 docker service ps [服务ID]

未分类

从服务信息可以看到 nginx 已运行在 manager1 和 work1 上

未分类

分别访问 http://192.168.99.100:8080 和 http://192.168.99.101:8080 ,会得到如下结果:

未分类

分别在 manager1 和 work1 上查看容器运行情况,结果如下:

未分类

服务的扩容与缩容

将 any-nginx 扩容为 3 份,在 manager1 上执行

$ docker service scale any-nginx=3

再次查看服务信息,可看到 any-nginx.3 在 work2 上运行

未分类

未分类

服务高可用测试

目前,有3个运行的容器保证服务的可用性,如果其中一个容器意外关闭,会发生什么情况呢?

将 work2 上正在运行的容器关闭,在 work2 上执行:

未分类

再次查看服务信息,可以看到 any-nginx.3 在 work2 上自动重启了

未分类

另外一个问题,如果 work2 宕机了,会发生什么情况?

在 Mac 上关闭 work2 节点:

$ docker-machine stop work2

未分类

未分类

不难看出 work2 节点关闭之后,work3 节点自动启动了 any-nginx.3,保证了整个集群运行的还是 3 个副本。

补充:若work1,work2,work3全部关闭,manager1 上将运行 3 个 any-nginx 容器。此处不演示。

总结:在内存允许的条件下,docker swarm 集群会稳定运行指定数量的容器,具有自我修复的能力,以此来保证服务的高可用性!

使用 HAProxy 来添加外部负载均衡

未分类

此处 HAProxy 将运行于本机,以下命令均在本机操作。

1、创建 HAProxy 配置文件 haproxy.cfg

$ vim haproxy.cfg
global
    daemon
    maxconn 25600
defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
frontend http-in
    bind *:80
    default_backend servers
backend servers
    server server1 192.168.99.100:8080 maxconn 32 check
    server server2 192.168.99.101:8080 maxconn 32 check
    server server3 192.168.99.102:8080 maxconn 32 check
    server server4 192.168.99.103:8080 maxconn 32 check

2、创建 Dockerfile 自定义镜像

$ vim Dockerfile
FROM haproxy
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

3、制作镜像

$ docker build -t any-haproxy .

4、启动 HAProxy

$ docker run -d -p 8080:80 any-haproxy

未分类

5、测试,访问 http://127.0.0.1:8080/

未分类

版权声明:Docker Swarm + HAProxy 实现高可用是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐