当前位置:首页 > 问答 > 正文

说实话用Weave配Docker弄个Nginx反向代理和负载均衡其实也没那么难,跟着步骤走就行了

说实话用Weave配Docker弄个Nginx反向代理和负载均衡其实也没那么难,跟着步骤走就行了,这个说法主要来源于一些开发者和运维人员的实践经验分享,他们认为只要理解了基本概念,按部就班操作,就能搭建起来,下面我就直接把这些步骤和要点给你捋一遍。

你得知道Weave是干啥的,它就是一个虚拟网络工具,能让不同机器上的Docker容器像在同一个局域网里一样互相通信,这很重要,因为做负载均衡通常需要多台服务器或者多个容器一起干活,它们之间得能方便地“喊话”,来源自Weave官方文档和社区教程都强调它的简单性,就是通过几个命令把网络打通。

Docker就不用多说了,就是用来打包和运行应用的工具,这里我们主要用Docker来创建多个Nginx容器,这些容器将来就是被负载均衡分配工作的“苦力”,来源自常见的Docker实践都是用一个镜像启动多个实例。

Nginx呢,在这里扮演两个角色,一个是作为反向代理服务器,接收外部的请求,然后根据规则转发给后面的容器;另一个就是作为负载均衡器,把请求合理地分给多个容器,避免某一个容器累死,其他的闲死,来源自Nginx官方文档对upstream和proxy_pass的说明是核心。

好了,接下来是具体步骤,你别怕,一步步来。

说实话用Weave配Docker弄个Nginx反向代理和负载均衡其实也没那么难,跟着步骤走就行了

第一步,先把Weave装好,假设你有两台或多台Linux机器(虚拟机也行),每台都装上Docker,然后在一台机器上,用Weave提供的脚本安装Weave,命令大概是这样:先curl -L git.io/weave -o /usr/local/bin/weave下载,然后chmod a+x /usr/local/bin/weave给执行权限,在第一台机器上运行weave launch来启动Weave路由,再到其他机器上,同样安装Weave,但启动的时候要加上第一台机器的IP地址,比如weave launch <第一台机器的IP>,这样它们就连接到一起了,来源自Weave的快速入门指南就是这么教的。

第二步,用Weave网络跑Docker容器,Weave提供了一个命令weave run,它能在Weave创建的虚拟网络里启动容器,并自动分配IP,你在两台机器上分别运行weave run -d --name=web1 nginxweave run -d --name=web2 nginx,这样,你就有了两个名为web1和web2的Nginx容器,它们各自有Weave网络内的IP,比如172.17.0.1和172.17.0.2,而且它们能互相ping通,来源自Weave的例子经常用这种方式启动服务。

第三步,配置Nginx做反向代理和负载均衡,你需要一个Nginx容器来当总入口,同样用Weave启动一个Nginx容器,比如weave run -d --name=proxy -p 80:80 nginx,这里-p 80:80是把容器的80端口映射到宿主机的80端口,这样外网就能访问了,关键是要修改这个代理Nginx的配置文件,你得进入这个容器,修改/etc/nginx/nginx.conf或者/etc/nginx/conf.d/default.conf,来源自Nginx负载均衡配置通常都在这里改。

说实话用Weave配Docker弄个Nginx反向代理和负载均衡其实也没那么难,跟着步骤走就行了

配置的核心是定义一个upstream块,里面写上你要负载均衡的后端服务器,也就是刚才那俩web容器。 upstream backend { server 172.17.0.1:80; # web1的Weave IP server 172.17.0.2:80; # web2的Weave IP } 在server配置里,把location /的请求用proxy_pass转发给这个upstream: location / { proxy_pass http://backend; } 这样,当有人访问代理服务器的80端口,Nginx就会把请求轮流发给web1和web2,默认是轮询方式,当然你也可以配置权重什么的,来源自Nginx的upstream模块文档就是这么示例的。

改完配置,重载Nginx就行了,比如在容器内运行nginx -s reload

第四步,测试一下,你用浏览器访问运行代理容器的那台机器的IP,应该能看到Nginx的欢迎页面,多刷新几次,如果配置正确,请求应该会轮流打到两个后端容器上,你可以把后端容器的默认页面稍微改一下,比如一个显示“Server 1”,一个显示“Server 2”,这样刷新浏览器就能直观看到变化,证明负载均衡工作了,来源自很多教程都建议用这种修改首页内容的方式来验证。

过程中可能会遇到点小问题,比如防火墙没关导致网络不通,或者配置文件写错了符号Nginx启动失败,但别慌,看看日志,比如用docker logs <容器名>查一下容器日志,或者看Nginx的错误日志,一般都能找到原因,来源自 troubleshooting 经验就是多看日志。

核心就是三件事:用Weave把网络连通,用Docker创建多个后端服务,用一个Nginx配置upstream做代理和负载均衡,跟着这个流程走,确实不难,之所以有人觉得难,可能是被那些网络概念吓到了,或者没一步步试,实际动手操作一遍,往往就发现“哦,原来就这么回事”,来源自不少学习者的反馈都是动手后才发现比想象中简单。