如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/负载均衡服务器

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器。Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现。它可以让我们更加专注于应用的开发,而不是基础架构。Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置。容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里。在这个教程里我们将会使用 weave 快速并且简单地将 nginx web 服务器部署为一个负载均衡器,反向代理一个运行在 Amazon Web Services 里面多个节点上的 docker 容器中的简单 php 应用。这里我们将会介绍 WeaveDNS,它提供一个不需要改变代码就可以让容器利用主机名找到的简单方式,并且能够让其他容器通过主机名连接彼此。

在这篇教程里,我们将使用 nginx 来将负载均衡分配到一个运行 Apache 的容器集合。最简单轻松的方法就是使用 Weave 来把运行在 ubuntu 上的 docker 容器中的 nginx 配置成负载均衡服务器。

1. 搭建 AWS 实例

首先,我们需要搭建 Amzaon Web Service 实例,这样才能在 ubuntu 下用 weave 跑 docker 容器。我们将会使用AWS 命令行 来搭建和配置两个 AWS EC2 实例。在这里,我们使用最小的可用实例,t1.micro。我们需要一个有效的Amazon Web Services 账户使用 AWS 命令行界面来搭建和配置。我们先在 AWS 命令行界面下使用下面的命令将 github 上的 weave 仓库克隆下来。


  1. $ git clone https://github.com/weaveworks/guides
  2. $ cd weave-gs/aws-nginx-ubuntu-simple

在克隆完仓库之后,我们执行下面的脚本,这个脚本将会部署两个 t1.micro 实例,每个实例中都是 ubuntu 作为操作系统并用 weave 跑着 docker 容器。


  1. $ sudo ./demo-aws-setup.sh

在这里,我们将会在以后用到这些实例的 IP 地址。这些地址储存在一个 weavedemo.env 文件中,这个文件创建于执行 demo-aws-setup.sh 脚本期间。为了获取这些 IP 地址,我们需要执行下面的命令,命令输出类似下面的信息。


  1. $ cat weavedemo.env
  2. export WEAVE_AWS_DEMO_HOST1=52.26.175.175
  3. export WEAVE_AWS_DEMO_HOST2=52.26.83.141
  4. export WEAVE_AWS_DEMO_HOSTCOUNT=2
  5. export WEAVE_AWS_DEMO_HOSTS=(52.26.175.175 52.26.83.141)

请注意这些不是固定的 IP 地址,AWS 会为我们的实例动态地分配 IP 地址。

我们在 bash 下执行下面的命令使环境变量生效。


  1. . ./weavedemo.env

2. 启动 Weave 和 WeaveDNS

在安装完实例之后,我们将会在每台主机上启动 weave 以及 weavedns。Weave 以及 weavedns 使得我们能够轻易地将容器部署到一个全新的基础架构以及配置中, 不需要改变代码,也不需要去理解像 Ambassador 容器以及 Link 机制之类的概念。下面是在第一台主机上启动 weave 以及 weavedns 的命令。


  1. ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1
  2. $ sudo weave launch
  3. $ sudo weave launch-dns 10.2.1.1/24

下一步,我也准备在第二台主机上启动 weave 以及 weavedns。


  1. ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST2
  2. $ sudo weave launch $WEAVE_AWS_DEMO_HOST1
  3. $ sudo weave launch-dns 10.2.1.2/24

3. 启动应用容器

现在,我们准备跨两台主机启动六个容器,这两台主机都用 Apache2 Web 服务实例跑着简单的 php 网站。为了在第一个 Apache2 Web 服务器实例跑三个容器, 我们将会使用下面的命令。


  1. ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1
  2. $ sudo weave run --with-dns 10.3.1.1/24 -h ws1.weave.local fintanr/weave-gs-nginx-apache
  3. $ sudo weave run --with-dns 10.3.1.2/24 -h ws2.weave.local fintanr/weave-gs-nginx-apache
  4. $ sudo weave run --with-dns 10.3.1.3/24 -h ws3.weave.local fintanr/weave-gs-nginx-apache

在那之后,我们将会在第二个实例上启动另外三个容器,请使用下面的命令。


  1. ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST2
  2. $ sudo weave run --with-dns 10.3.1.4/24 -h ws4.weave.local fintanr/weave-gs-nginx-apache
  3. $ sudo weave run --with-dns 10.3.1.5/24 -h ws5.weave.local fintanr/weave-gs-nginx-apache
  4. $ sudo weave run --with-dns 10.3.1.6/24 -h ws6.weave.local fintanr/weave-gs-nginx-apache

注意: 在这里,--with-dns 选项告诉容器使用 weavedns 来解析主机名,-h x.weave.local 则使得 weavedns 能够解析该主机。

4. 启动 Nginx 容器

在应用容器如预期的运行后,我们将会启动 nginx 容器,它将会在六个应用容器服务之间轮询并提供反向代理或者负载均衡。 为了启动 nginx 容器,请使用下面的命令。


  1. ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1
  2. $ sudo weave run --with-dns 10.3.1.7/24 -ti -h nginx.weave.local -d -p 80:80 fintanr/weave-gs-nginx-simple

因此,我们的 nginx 容器在 $WEAVEAWSDEMO_HOST1 上公开地暴露成为一个 http 服务器。

5. 测试负载均衡服务器

为了测试我们的负载均衡服务器是否可以工作,我们执行一段可以发送 http 请求给 nginx 容器的脚本。我们将会发送6个请求,这样我们就能看到 nginx 在一次的轮询中服务于每台 web 服务器之间。


  1. $ ./access-aws-hosts.sh
  2. {
  3. "message" : "Hello Weave - nginx example",
  4. "hostname" : "ws1.weave.local",
  5. "date" : "2015-06-26 12:24:23"
  6. }
  7. {
  8. "message" : "Hello Weave - nginx example",
  9. "hostname" : "ws2.weave.local",
  10. "date" : "2015-06-26 12:24:23"
  11. }
  12. {
  13. "message" : "Hello Weave - nginx example",
  14. "hostname" : "ws3.weave.local",
  15. "date" : "2015-06-26 12:24:23"
  16. }
  17. {
  18. "message" : "Hello Weave - nginx example",
  19. "hostname" : "ws4.weave.local",
  20. "date" : "2015-06-26 12:24:23"
  21. }
  22. {
  23. "message" : "Hello Weave - nginx example",
  24. "hostname" : "ws5.weave.local",
  25. "date" : "2015-06-26 12:24:23"
  26. }
  27. {
  28. "message" : "Hello Weave - nginx example",
  29. "hostname" : "ws6.weave.local",
  30. "date" : "2015-06-26 12:24:23"
  31. }

结束语

我们最终成功地将 nginx 配置成一个反向代理/负载均衡服务器,通过使用 weave 以及运行在 AWS(Amazon Web Service)EC2 里面的 ubuntu 服务器中的 docker。从上面的步骤输出可以清楚的看到我们已经成功地配置了 nginx。我们可以看到请求在一次轮询中被发送到6个应用容器,这些容器在 Apache2 Web 服务器中跑着 PHP 应用。在这里,我们部署了一个容器化的 PHP 应用,使用 nginx 横跨多台在 AWS EC2 上的主机而不需要改变代码,利用 weavedns 使得每个容器连接在一起,只需要主机名就够了,眼前的这些便捷, 都要归功于 weave 以及 weavedns。

本文来自合作伙伴“Linux中国”,原文发布日期:2015-09-05

时间: 2024-11-10 07:29:44

如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/负载均衡服务器的相关文章

centos下配置Nginx反向代理负载均衡服务器教程

准备: Proxy-Server:1.1.1.22(负载均衡服务器) Nginx-Server23:1.1.1.23(web23) Nginx-Server24:1.1.1.24(web24) 环境版本: Linux Nginx-Proxy 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ①:安装配置完成Nginx WEB服务器预配置: [root@Nginx-Ser

在Linux系统下使用Docker以及Weave搭建Nginx反向代理

  Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现.它可以让我们更加专注于应用的开发,而不是基础架构.Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置.容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里.在这个教程里我们将会使用 weave 快速并且

nginx 详解反向代理负载均衡

什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web 服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式. 实现这个反向代理能力并不能算是一个特别复杂的任务,但是在负载均衡中要求特别高的效率,这样实现起来

Apache实现反向代理负载均衡

说到负载均衡LVS这套技术,有很多种实现方法. 本文所说,主要就是利用apache服务器实现反向代理,实现负载均衡. 首先,传统的正向代理如下图所示,正如我们用的游戏加速代理,大多的个人PC把请求发给正向代理服务器,代理服务器通常配置高端的带宽,替我们请求相应的服务. 而负载均衡中的反向代理,通常意义上,是一个请求转发的代理.类似一个收发室的管理人员,外来的很多邮件,传到收发室,然后由管理员分配给不同的办公室.通过这样的操作,可以使每台服务器避免过多的负载导致宕机.而转发的这个过程,通常也有很多

详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南_nginx

Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而Nginx是轻量级的服务器.Apache服务器稳定.开源.跨平台,但是Apache服务器不支持高并发,Nginx能支持处理百万级的TC

FreeBSD反向代理负载均衡

前面提到了使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.然而,也可以考虑这样一种技术,使用代理服务器将请求均匀转发给多台Web服务器上,从而达到负载均衡的目的. Apache开发组的一位成员Ralf S.Engelschall基于Apache的代理模块mod_proxy开发了反向代理模块mod_rproxy,用于实现负载均衡. 这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是代理多个客户

在不同端口下模拟 Nginx 反向代理和负载均衡

Nginx 是一个轻量级的 WEB 服务器,反向代理服务器和电子邮件服务器,本文介绍在虚拟机中使用不同的端口来模拟不同的服务器,并使用 Nginx 反向代理功能实现服务器负载均衡的效果. 新建两个站点 首先新建两个 WEB 目录当做不同的服务器下的站点,一个是 website-A,一个是 website-B. 这两个站点目录应该是在不同的服务器上,而且代码是一模一样的,这里为了方便在一台虚拟机上模拟不同服务器,并且把两个站点目录下的首页做了一点修改,以区分访问到的是不同目录(服务器)下的站点.两

在Nginx反向代理后面运行Docker

本文讲的是在Nginx反向代理后面运行Docker,[编者的话]想让Docker拥有公共网关,能支持多租户,以及我们期望的安全认证等功能?请看作者通过重新编译Nginx让其像支持Websockets一样支持Docker自带协议来实现该需求. 几周前,我想试试看Docker是如何运行在云/共享宿主机类似的环境中.当时,Docker正好发布了1.4版本,1.4版本带来了额外的安全和身份认证特性,另外Docker machine也可以自动化创建并运行一个远程Docker实例. 共享主机环境通常基于某个

使用Nginx反向代理与proxy_cache缓存搭建CDN服务器的配置方法_nginx

碰到问题:移动用户访问web服务器www.osyunwei.com很慢解决办法:1.在移动机房放置一台nginx反向代理服务器2.通过域名DNS智能解析,所有移动用户访问www.osyunwei.com时解析到nginx反向代理服务器3.nginx反向代理服务器与web服务器之间采用专线连接说明:1.web服务器线路:电信IP:192.168.21.129域名:www.osyunwei.com2.nginx反向代理服务器线路:移动系统:CentOS 6.2IP:192.168.21.164vi