; 推荐-Nginx专题: upstream模块和缓存的简单使用 | Linux运维部落

推荐-Nginx专题: upstream模块和缓存的简单使用

Nginx专题: upstream模块和缓存的简单使用

1
nginx

 

1
负载均衡

前言:

本文接着上篇Nginx专题: 从编译安装到URL重写来介绍Nginx的负载均衡模块使用方法, 本文的实验没有考虑大多数情况, 例如两个web服务器之间的数据同步等, 主要写Nginx如何作为负载均衡器使用并且缓存

实验拓扑

blob.png

实验环境

主机 IP地址 功用
lb.anyisalin.com 172.16.1.2 负载均衡并缓存静态资源
web1.anyisalin.com 172.16.1.3 提供web服务
web2.anyisalin.com 172.16.1.4 提供web服务

1
注意: 本文所有操作都在SELinux和iptables关闭的情况下进行

Nginx_Upstream模块介绍

The ngx_http_upstream_module module is used to define groups of servers that can be referenced by the proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass directives. 摘自官方文档

简单来说就是通过

1
<span style="font-family: 黑体, SimHei;font-size: 14px">upstream</span>

模块定义一个服务器组, 可以结合其他代理模块从而提供负载均衡的效果

upstream使用方法

我们这里提供一个最简单的upstream定义方法: 
以下两段简单的配置就能实现最简单的负载均衡效果


1
<span class="hljs-title" style="line-height: 1.6;font-weight: bold">upstream</span> servers {<br/> &nbsp; &nbsp;<span class="hljs-title" style="line-height: 1.6;font-weight: bold">server</span> <span class="hljs-number">172.16.1.2</span>;<br/> &nbsp; &nbsp;<span class="hljs-title" style="line-height: 1.6;font-weight: bold">server</span> <span class="hljs-number">172.16.1.3</span>;<br/> &nbsp; &nbsp;}<br/><br/><span class="hljs-title" style="line-height: 1.6;font-weight: bold">location</span> / {<br/> &nbsp; &nbsp;<span class="hljs-title" style="line-height: 1.6;font-weight: bold">proxy_pass</span> <span class="hljs-url" style="line-height: 1.6">http://servers</span>;<br/> &nbsp; &nbsp;}<br/>

upstream的常用参数介绍


1
<span class="hljs-tag" style="line-height: 1.6">upstream</span> <span class="hljs-tag" style="line-height: 1.6">name</span> {<br/> &nbsp; &nbsp;<span class="hljs-attr_selector">[ip_hash]</span><br/> &nbsp; &nbsp;<span class="hljs-tag" style="line-height: 1.6">server</span> <span class="hljs-tag" style="line-height: 1.6">address</span> <span class="hljs-attr_selector">[weight=number]</span> <span class="hljs-attr_selector">[max_fails=number]</span> <span class="hljs-attr_selector">[fail_timeout=number]</span> <span class="hljs-attr_selector">[down|up|backup]</span>;<br/> &nbsp; &nbsp;...<br/>}<br/><br/><span class="hljs-id" style="line-height: 1.6;font-weight: bold">#ip_hash</span>: 类似于<span class="hljs-tag" style="line-height: 1.6">lvs</span>的<span class="hljs-tag" style="line-height: 1.6">sh</span>算法,将同一<span class="hljs-tag" style="line-height: 1.6">IP</span>的请求定向至同一主机<br/><span class="hljs-id" style="line-height: 1.6;font-weight: bold">#weight</span>: 权重设置<br/><span class="hljs-id" style="line-height: 1.6;font-weight: bold">#max_fails</span>:<span class="hljs-tag" style="line-height: 1.6">upstream</span>能够自动对各群组中的服务器进行健康状态检查, 这里代表健康状态检查时最多几次连接失败就删除<br/><span class="hljs-id" style="line-height: 1.6;font-weight: bold">#fail_timeout</span>:多久超时算失败<br/><span class="hljs-id" style="line-height: 1.6;font-weight: bold">#down</span>:将某个主机下线<br/><span class="hljs-id" style="line-height: 1.6;font-weight: bold">#backup</span>:将某个主机设置为备份模式, 只要不是所有主机都宕机, 它就不会上线<br/>

upstream使用示例

1
安装nginx的过程这里就不演示了, 有兴趣的可以看我上篇博客


1
在nginx主配置文件中添加以下几列<br/><br/>http段添加<br/> &nbsp; &nbsp;upstream servers {<br/> &nbsp; &nbsp; &nbsp; &nbsp;server <span class="hljs-number">172.16</span><span class="hljs-number">.1</span><span class="hljs-number">.3</span>;<br/> &nbsp; &nbsp; &nbsp; &nbsp;server <span class="hljs-number">172.16</span><span class="hljs-number">.1</span><span class="hljs-number">.4</span>;<br/> &nbsp; &nbsp; &nbsp; &nbsp;}<br/><br/>server段添加<br/><br/> &nbsp; &nbsp;location / {<br/> &nbsp; &nbsp; &nbsp; &nbsp;proxy_pass http:<span class="hljs-comment">//servers;</span><br/> &nbsp; &nbsp;}<br/><br/>重载nginx<br/>

看图!我们实现了简单的负载均衡效果,为了演示出效果,所以使用了不同的页面

若水GIF截图_2016年4月7日19点35分7秒.gif

Nginx_Cache介绍

大家都知道在现今的网络世界中, 

1
<span style="font-size: 14px;font-family: 黑体, SimHei">Cache is King</span>

,缓存能够为我们减轻服务器的负担和加快响应速度, Nginx_proxy模块能够支持缓存功能, 我们这里使用我们这里缓存静态资源

缓存静态资源

我们在web1 server上有一组静态网页通过负载均衡调度器进行反向代理, 我们在没有设置缓存之前先使用ab进行压力测试

blob.png


1
proxy_cache_path /cache levels=<span class="hljs-number">1</span>:<span class="hljs-number">1</span> keys_zone=mycache:<span class="hljs-number">64</span>m; &nbsp; <span class="hljs-preprocessor">#http段添加</span><br/><br/>location /index.html { &nbsp;<span class="hljs-preprocessor">#Location段配置</span><br/> &nbsp; &nbsp;proxy_pass http:<span class="hljs-comment">//172.16.1.3;</span><br/> &nbsp; &nbsp;proxy_cache mycache; &nbsp; &nbsp;<span class="hljs-preprocessor">#使用mycache进行缓存</span><br/> &nbsp; &nbsp;proxy_cache_valid <span class="hljs-number">200</span> <span class="hljs-number">1</span>d; &nbsp; <span class="hljs-preprocessor">#响应码为<span class="hljs-number">200</span>的缓存<span class="hljs-number">1</span>天</span><br/> &nbsp; &nbsp;proxy_cache_valid <span class="hljs-number">500</span> <span class="hljs-number">501</span> <span class="hljs-number">502</span> <span class="hljs-number">503</span> <span class="hljs-number">1</span>m; &nbsp; <span class="hljs-preprocessor">#响应码为<span class="hljs-number">500.</span>..的缓存<span class="hljs-number">1</span>分钟</span><br/> &nbsp; &nbsp;proxy_cache_use_stale error ; &nbsp; <span class="hljs-preprocessor">#如果请求源主机的时候出问题, 仍然使用缓存</span><br/> &nbsp;}<br/><br/>保存重载<br/><br/>mkdir /cache <span class="hljs-preprocessor">#创建缓存存放文件夹</span><br/>chown nginx:nginx /cache &nbsp;<span class="hljs-preprocessor">#修改属主和属组为nginx</span><br/>

再次对其进行测试

blob.png

1
从上面测试可以看出缓存对于静态资源响应的提升是非常明显的

总结

因为时间比较紧,所有本文简单的介绍了Nginx_upstream模块和缓存的使用方法,很多配置参数都没有明确的说明,以后应该还有机会和大家详细说明, Nginx专题还没有结束,敬请期待 
作者: AnyISalIn QQ: 1449472454 
感谢: MageEdu

原创文章,作者:Net18-AnyISalIn,如若转载,请注明出处:/14386

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:华宇招商  万达娱乐招商  万达招商QQ  guoqibee.com  万达娱乐直属QQ  万达主管  万达娱乐平台  万达娱乐主管  万达主管QQ  万达招商QQ