企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)


前言

Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)
Docker Compose 运行的目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程。
若无特殊指定工程名即为当前目标名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖
一个服务当中可包括多个容器实例,Docker Compose并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。
Docker Compose是一个用来创建和运行多容器应用的工具
使用Compose首先需要编写Compose文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器。
Dockerfile可以定义一个容器,而一个Compose的模板文件(YAML格式)可以定义一个包含多个相互关联容器的应用
Compose项目使用python编写,基于后面的实验中我们将学习的Docker API实现

一、实验目的

使用docker compose管理nginx、haproxy镜像,实现nginx网页的高可用
其实就是在一台宿主机上同时利用多个镜像拉起多个容器,实现负载均衡。

二、搭建实验环境

实验环境:rhel7.3

主机信息 功能
服务器server1(172.25.70.1) 安装好docker相关组件,配置好服务
测试端真机(172.25.70.250) 测试web负载均衡

(1)在真机上面创建一个快照compose1
在这里插入图片描述
(2)在真机当中导入镜像开启虚拟机compose1
在这里插入图片描述
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第1张图片
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第2张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第3张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第4张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第5张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第6张图片
(3)用真机连接compose1
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第7张图片
这是我的真机
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第8张图片
(4)在真机上面搭建共享yum源,开启apache服务,关闭防火墙

企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第9张图片
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第10张图片
(5)在compose1上面编写共享yum源的文件
在这里插入图片描述企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第11张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第12张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第13张图片
(6)给compose1安装docker服务,开启并且设置开机启动

企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第14张图片
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第15张图片
在这里插入图片描述

到此为止,基本实验环境已经搭建好

四、compose的部署

(1)从真机给虚拟机compose1传送compose的文件
在这里插入图片描述
(2)将自己下载docker compose的二进制文件移到 /usr/local/bin/,赋予执行权限

[root@server1 ~]# ls
docker-compose-Linux-x86_64-1.24.1
[root@server1 ~]# mv docker-compose-Linux-x86_64-1.24.1 /usr/local/bin/     ##设置快捷方式
[root@server1 ~]# mv /usr/local/bin/docker-compose-Linux-x86_64-1.24.1  /usr/local/bin/docker-compose  ## 给一个短一点的名字,用起来方便
[root@server1 ~]# chmod +x /usr/local/bin/docker-compose  ##给一个执行权限
[root@server1 ~]# ll /usr/local/bin/docker-compose  ##查看一下
-rwxr-xr-x 1 root root 16168192 Nov 10 00:57 /usr/local/bin/docker-compose
[root@server1 ~]# 

企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第16张图片
查看一下版本,也可以验证是否部署成功

[root@server1 ~]#  mkdir compose
[root@server1 ~]#  cd compose/
[root@server1 compose]# vim docker-compose.yml
[root@server1 compose]# cat docker-compose.yml 
web1:
        image: nginx
        expose:
                - 80
        volumes:
                - ./web1:/usr/share/nginx/html

web2:
        image: nginx
        expose:
                - 80
        volumes:
                - ./web2:/usr/share/nginx/html
haproxy:
        image: haproxy:latest

        volumes:
                - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro

        links:
                - web1
                - web2
        ports:
                - "80:80"
        expose:
                - "80"

企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第17张图片
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第18张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第19张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第20张图片

五、给虚拟机导入Nginx与Haproxy镜像

(1)先从真机给虚拟机发送镜像

企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第21张图片
(2)导入镜像
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第22张图片

(3)查看镜像并且作适当的修改
在这里插入图片描述

六、编写测试用的测试页面

在compose目录下面建立默认发布目录,并且在默认发布目录下面编写,默认发布页面

[root@server1 ~]# cd compose/
[root@server1 compose]# mkdir web1
[root@server1 compose]# mkdir web2
[root@server1 compose]# cd  web1
[root@server1 web1]# vim index.html 

web1

[root@server1 web1]# cd ../web2/ [root@server1 web2]# vim index.html

web2

在这里插入图片描述
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第23张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第24张图片
在这里插入图片描述企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第25张图片

七、配置haproxy负载均衡

[root@server1 compose]# mkdir haproxy
[root@server1 compose]# cd haproxy/
[root@server1 haproxy]# vim haproxy.cfg
global   #全局设置
        log 127.0.0.1 local0   #日志输出设置,所有日志都记录在本机,通过local0输出
        log 127.0.0.1 local1 notice   #定义haproxy日志级别[error warringinfo debug]
defaults   #默认设置
        log global   #引用全局的日志配置
        mode http   #所处理的类别,默认采用http模式,可配置称tcp作4层消息转发
        option httplog   #启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求日志的
        option dontlognull   #启用该项,日志中将不记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统是为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来。
        timeout connect 5000ms   #haproxy和服务端建立连接的最大时长,其实设置为1秒就足够了。局域网内建立连接一般都是瞬间的
        timeout client 50000ms   #haproxy和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为5秒以尽快释放连接
        timeout server 50000ms   #haproxy和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是并发时如设置为1-3秒
        stats uri /status   #访问监控界面的uri
frontend balancer   #frontend前端设置
        bind 0.0.0.0:80   #这里建议使用0.0.0.0:80或*:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。
        default_backend web_backends   #定义一个web_backends前端部分。此处将对应的请求转发给后端
backend web_backends
        balance roundrobin   #使用RR负载均衡算法(#banlance roundrobin 轮循,banlance source 保存session值,支持static-rr,leastconn,first,uri等参数)
        server web1 web1:80 check   #其中web1会在监控界面上显示
        server web2 web2:80 check   #其中web2会在监控界面上显示

企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第26张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第27张图片
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第28张图片

八、测试

(1)开启docker-compose(值的注意的是:执行docker-compose命令时,所在目录下,必须有docker-compose.yml文件)

[root@server1 compose]# pwd
/root/compose
[root@server1 compose]# ls
docker-compose.yml  haproxy  web1  web2
[root@server1 compose]# docker-compose up -d
Creating compose_web1_1 ... done
Creating compose_web2_1 ... done
Creating compose_haproxy_1 ... done

企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第29张图片
(2)查看
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第30张图片

(3)查看此时开启了三个容器
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第31张图片
(4)浏览器访问:172.25.70.1
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第32张图片
刷新一次:实现了负载均衡
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第33张图片
再次验证
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第34张图片
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第35张图片
也可以看见haproxy的监控页面
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第36张图片
访问都记录在了日志当中

[root@server1 compose]# docker-compose logs
Attaching to compose_haproxy_1, compose_web1_1, compose_web2_1
web1_1     | 172.17.0.4 - - [09/Nov/2019:18:08:10 +0000] "GET / HTTP/1.1" 200 14 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
web1_1     | 2019/11/09 18:08:10 [error] 6#6: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.4, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "172.25.70.1"
web1_1     | 172.17.0.4 - - [09/Nov/2019:18:08:10 +0000] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
web1_1     | 172.17.0.4 - - [09/Nov/2019:18:08:23 +0000] "GET / HTTP/1.1" 200 14 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
haproxy_1  | <7>haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -f /usr/local/etc/haproxy/haproxy.cfg -Ds 
web2_1     | 2019/11/09 18:08:10 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.4, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "172.25.70.1"
web2_1     | 172.17.0.4 - - [09/Nov/2019:18:08:10 +0000] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
web2_1     | 172.17.0.4 - - [09/Nov/2019:18:08:16 +0000] "GET / HTTP/1.1" 200 14 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
web2_1     | 172.17.0.4 - - [09/Nov/2019:18:08:30 +0000] "GET / HTTP/1.1" 200 14 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"

企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第37张图片
关闭一个web服务
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第38张图片
可以看出监控页面有所显示
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第39张图片
再次验证
企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第40张图片企业版Docker——Docker三剑客之Docker compose多容器管理(nginx+haproxy实现负载均衡)_第41张图片

你可能感兴趣的:(Linux运维进阶)