在如今吞吐量很大的互联网时代,用户请求的网站大多都会采用负载均衡的方式来减少web服务器负载,使用户的访问体验更加优秀,种种服务器上集群的高可用,负载均衡技术出现......
今天分享的是NGINX代理的负载均衡配置,
先展示一张一份企业实际的生产环境拓扑图来讲解今天的Nginx负载均衡的实验。
在LNMP环境下,也可在LAMP环境下开启叁台虚拟系统(这里,我将三个系统中都要安装好nginx MySQL 和PHP,相应的软件版本按时按照以前的部署版本。{Nginx的1.6.2的stable版本})
实验环境和角色:
虚拟机操作系统:centos 6.5 x64
ip地址: 192.168.8.188/24 (web-1)
ip地址: 192.168.8.189/24 (web-2)
ip地址: 192.168.8.190/24 (nginx代理服务/负载均衡)
其中,192.168.8.190启用nginx的代理服务功能,并在此系统上启用负载均,当用户访问192.168.8.190这个负载代理时,就会用算法来进行循环的在web-1和web-2上对用户操作请求进行处理。
开启3个虚拟操作系统,并且三者间的网络通讯能够互相通讯。
并且三台操作系统上最起码都是配置了Nginx服务,先来看下三台操作系统上的nginx服务器是否是正常的:用IP来进行访问测试
客户端上访问 http://192.168.8.188,页面输出的结果为wiki的页面(这是我上次做的实验结果)
客户端上访问 http://192.168.8.189 ,页面输出的结果为虚拟主机的页面访问。
值得注意是:
在Nginx中,无论是反向代理还是负载均衡,最终还是依靠模块化来实现不同的功能!
可以进入官网中,http://nginx.org/,从官网中的文档模块http://nginx.org/en/docs/中 ctrl+f查询关键词:upstream
我们可以看到Nginx中有很多模块,其中主要提供反向代理的功能就是这个upstream的模块(核心)。当然还有一个是proxy 的模块。
我们可以直接进入到:
ngx_http_upstream_module 模块之中:
从官方网站的文档中,我能够直接查询到反向代理的命令配置用法。
关于这个负载均衡的配置模板,我做如下说明:
在负载均衡的模板中,有一个负载均衡的标签, 并起一个标签的名字backend.标签名字的后面都会包含一些企业所运行的服务器名字。
而在应用的时候,用server标签里的proxy_pass 跳转到上一个标签的名字(backend) 当跳转到backend服务时,理所当然的会去找web服务。
这里注意的是,当安装IP地址为192.68.8.190这台系统,部署nginx时编译安装时,我们可以发现upstream 这个模块功能默认是开启的:因此就可以认为,在部署Nginx负载均衡时,直接就可以用./configure来进行默认的编译安装。
[root@centos6 nginx-1.6.2]# ./configure --helpgrep upstrea
这里我为了实现标准统一化,我在192.168.8.190上采用了Nginx web方式的参数的进行编译安装nginx。
这里的部署安装我就省略了,前文已经做过详细分享了,这里我把192.168.8.1这台系统已经做好了Nginx代理:
配置nginx负载均衡
[root@centos6 conf]# pwd
/application/nginx/conf
按照浏览方便清晰的习惯,我将Nginx的默认配置文件中的空行,#开头的过滤掉,并 追加到Nginx.conf文件中。
这样的话,我等一下编辑nginx.conf文件就会一目了然:
接下来,我就要配置Nginx的负载均衡了,我从官方文档中能够得知到upstream 的配置是是放在http标签下面的。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
将官方文档中的Example:中的一个例子粘贴进来
upstream backend { server backend1.example.com weight=5; server 127.0.0.1:8080 (可用IP地址,也可用域名地址) max_fails=3 fail_timeout=30s; (检查负载均衡器时
如果出现三次失败的情况且超时30s就会强制退出。) server unix:/tmp/backend3; (sock的意思), server backup1.example.com backup; (备份的功能)}
并且做一个向后抛的一个配置:这里的proxy_pass 后面的标签代表的意思将代理请求抛给上面的backend服务名称。
location / {
proxy_pass http://backend;
index index.html index.htm;
}
如图:
这里我们能看到的是backend 这里抛给了上面的backend 实际上就交给了192.68.8.188和192.168.8.189
实际上proxyd_pass模块实际上是proxy的模块:
如果想把这个服务弄精通,还是必须要把官方文档详细把握。
通过负载均衡算法得出的结果分配给各服务器。这个算法我们可以在官方文档中查询:关于负载均衡的算法默认的是轮询算法。
关于这个轮询算法的原理就是:当客户端数据请求到达服务器时,一个会给188一个会给189.
配置完这个文件之后需要保存以下,并检查语法。
[root@centos6 conf]# /application/nginx/sbin/nginx -t
检查语法正确后,平滑重启nginx:
[root@centos6 conf]# /application/nginx/sbin/nginx -s reload
测试前不要忘记在本机的host文件中进行修改,并进行域名测试:
最终的测试的目的:
领取专属 10元无门槛券
私享最新 技术干货