如何使用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 仓库克隆下来。

$ git clone https://github.com/weaveworks/guides

$ cd weave-gs/aws-nginx-ubuntu-simple

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

$ sudo ./demo-aws-setup.sh

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

$ cat weavedemo.env

export WEAVE_AWS_DEMO_HOST1=52.26.175.175

export WEAVE_AWS_DEMO_HOST2=52.26.83.141

export WEAVE_AWS_DEMO_HOSTCOUNT=2

export WEAVE_AWS_DEMO_HOSTS=(52.26.175.175 52.26.83.141)

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

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

. ./weavedemo.env

2. 启动 Weave 和 WeaveDNS

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

ssh -i weavedemo-key.pem [email protected]$WEAVE_AWS_DEMO_HOST1

$ sudo weave launch

$ sudo weave launch-dns 10.2.1.1/24

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

ssh -i weavedemo-key.pem [email protected]$WEAVE_AWS_DEMO_HOST2

$ sudo weave launch $WEAVE_AWS_DEMO_HOST1

$ sudo weave launch-dns 10.2.1.2/24

3. 启动应用容器

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

ssh -i weavedemo-key.pem [email protected]$WEAVE_AWS_DEMO_HOST1

$ sudo weave run --with-dns 10.3.1.1/24 -h ws1.weave.local fintanr/weave-gs-nginx-apache

$ sudo weave run --with-dns 10.3.1.2/24 -h ws2.weave.local fintanr/weave-gs-nginx-apache

$ sudo weave run --with-dns 10.3.1.3/24 -h ws3.weave.local fintanr/weave-gs-nginx-apache

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

ssh -i weavedemo-key.pem [email protected]$WEAVE_AWS_DEMO_HOST2

$ sudo weave run --with-dns 10.3.1.4/24 -h ws4.weave.local fintanr/weave-gs-nginx-apache

$ sudo weave run --with-dns 10.3.1.5/24 -h ws5.weave.local fintanr/weave-gs-nginx-apache

$ 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 容器,请使用下面的命令。

ssh -i weavedemo-key.pem [email protected]$WEAVE_AWS_DEMO_HOST1

$ 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 服务器之间。

$ ./access-aws-hosts.sh

{

"message" : "Hello Weave - nginx example",

"hostname" : "ws1.weave.local",

"date" : "2015-06-26 12:24:23"

}

{

"message" : "Hello Weave - nginx example",

"hostname" : "ws2.weave.local",

"date" : "2015-06-26 12:24:23"

}

{

"message" : "Hello Weave - nginx example",

"hostname" : "ws3.weave.local",

"date" : "2015-06-26 12:24:23"

}

{

"message" : "Hello Weave - nginx example",

"hostname" : "ws4.weave.local",

"date" : "2015-06-26 12:24:23"

}

{

"message" : "Hello Weave - nginx example",

"hostname" : "ws5.weave.local",

"date" : "2015-06-26 12:24:23"

}

{

"message" : "Hello Weave - nginx example",

"hostname" : "ws6.weave.local",

"date" : "2015-06-26 12:24:23"

}

结束语

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

免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.itxdl.cn/linux/

或者勾搭Q2430675018

欢迎加入linux交流群 478068715

时间: 2024-10-26 14:36:16

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

Centos7.4 Nginx反向代理+负载均衡配置

Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65.192 Nginx-Web 在三台Server安装Nginx: # yum install -y nginx 在172.16.65.190配置Nginx反向代理+负载均衡: # vim /etc/nginx/nginx.conf user nginx; worker_processes auto;

nginx反向代理负载均衡简述

基于浏览器实现分离案例if ($http_user_agent ~ Firefox) {rewrite ^(.)$ /firefox/$1 break;}if ($http_user_agent ~ MSIE) {rewrite ^(.)$ /msie/$1 break;}if ($http_user_agent ~ Chrome) {rewrite ^(.*)$ /chrome/$1 break;} 防盗链案例:location ~* .(jpg|gif|jpeg|png)$ {valid_r

25,Nginx反向代理负载均衡

1,什么是反向代理1,代理顾名思义就是代理某人去做某事,比如律师代理,中介代理.往往你不能直接自己做的事,都需要找代理 2,为什么要用反向代理1,在没有代理服务器之前,用户访问web服务器是如下图:2,在实际业务生成环境中,比如我们访问web服务器,在用户和服务器直接往往有一台或者多台代理服务器用来转发你的访问请求,代你去访问web服务器,然后将结果返回给用户.当你只有一台web服务器的时候,这种代理看起来其实意义不大,用户直接访问web服务器不是更快?但生产中不仅仅一台web,这个时候用代理来

Centos 7配置nginx反向代理负载均衡集群

一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web01服务器 192.168.2.78    web02服务器 二,安装nginx软件(以下操作三台虚拟机都要进行)1,安装依赖软件包命令集合 yum -y install openssl openssl-devel pcre pcre-devel gcc 2,安装nginx软件包命令集合 mkdir

项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现

实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP:172.17.22.22 后端服务器 stasic-srv 组 rs02 RIP:172.17.1.7 后端服务器 stasic-srv 组 rs01 RIP:172.17.77.77 后端服务器 defautl-srv 组 rs02 RIP:172.17.252.111 后端服务器 defaut

项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现

目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:nginx实现缓存功能 1.环境准备:同上实验,实验结构图如下: 2.设置代理服务器的配置文件 3.测试:访问 http://172.17.11.11/ 总项目流程图,详见http://www.cnblogs.com/along21/p/7435612.html 回到顶部 实验一:实现反向代理负载均衡且

nginx反向代理负载均衡(轮询权重IPHash)

1 Nginx反向代理 1.1 实现图片回显 1.1.1 反向代理 说明:当用户发出image.jt.com/2018/1.jpg时,首先将请求发往Nginx.经过Nginx内部配置自动进行路径的切换.E:jt-upload/2018/1.jpg并且访问切换后的路径.将返回的结果再次返回给浏览器.这时浏览器可以进行正常的展现 1.1.2 Nginx介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是

Nginx 反向代理 负载均衡 虚拟主机配置

通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常用配置的说明.即学即用,你还在等什么?一睹为快先了解Nginx的三大功能Nginx 可以作为一台http服务器.可以做网站静态服务器,比如图片服务器,高效,减轻服务器压力.同时它也支持https服务.Nginx 可以配置多台虚拟主机.可以实现在一台服务器虚拟出多个网站效果,省钱.Nginx 最重要的是反向代理,负载均衡.在服务器集群中,Ngin

nginx反向代理负载均衡

1.反向代理概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器. 环境准备: 主机名 IP地址 角色 系统 web-node1.com eth0:192.168.90.201 web-node1节点 CentOS7.2 web-node2.com eth0:192.168.90.202 web-node