码迷,mamicode.com
首页 > 其他好文 > 详细

nginx反代+varnish缓存+后端LAMP平台集群实现

时间:2017-12-11 14:09:21      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:nginxvarnishlamp

较为完善的集群实现方式,前端两台LVS主机进行调度转发到前端的两台nginx反代服务器,由nginx反代服务器将请求资源转发到后端的varnish主机中,若varnish缓存服务器中存在所请求资源的缓存,则由varnish主机向nginx反代服务器进行响应,再有nginx服务器向客户端进行响应(不向调度器响应是因为采用的是LVS DR模型)。若varnish中不存在缓存,则直接向后端RS主机请求资源,到达varnish后,varnish会判断该资源是否能够缓存,若可以被缓存,则缓存下来待下次资源访问时由缓存服务器对nginx进行响应,大大减小了后端RS的压力。后端RS分为动态资源服务器,静态资源服务器以及图片资源服务器,访问不同资源则由varnish进行动静分离操作,向后端不同主机进行资源申请。

? nginx服务器:

? ? ?第一台nginx本机IP:

? ? ? ? eno16777736:192.168.72.2

? ? ? ? eno33554976:172.16.25.1

? ? ?第二台nginx本机IP:

? ? ? ? eno16777736:192.168.72.3

? ? ? ? eno33554976:172.16.25.2

? ? ? keepalived高可用虚拟IP:

? ? ? ? eno16777736:192.168.72.20

? ? ? ? eno33554976:172.16.25.100

? ? ? keepalived配置:

? ? ??技术分享图片

? ? ??技术分享图片

? ? ??技术分享图片

? ? ?keepalived的配置项在这里就不再讲述了,前面都有讲过。主要就是对nginx的状态进行一个判断

? ? ?若nginx down掉了,则将权重值-10,MASTER降为BACKUP(抢占模式)。当MASTER中的nginx

? ? ?启动后,又会自动成为MASTER,虚拟IP就由MASTER掌控。


? ? ?nginx反代配置:

? ? ?172.16.25.77为后端varnish的IP,使用proxy_pass的方式反代,实际上再加一台varnish服务器

? ? ?只需要修改upstream中的内容,使用hash一致性算法对varnish进行高可用。

? ? ?技术分享图片

? ? ?

? ? ?varnish服务器:

? ? ? ? ?IP:172.16.25.77

? ? ? ? ?yum install -y varnish

? ? ? ? ?配置文件/etc/varnish/varnish.param:运行时参数的配置,如varnish线程池得多少,每个线程池的线程数目有多少等。

? ? ? ? ?配置文件/etc/varnish/default.vcl进行编辑:varnish运行的策略库,根据该策略库判断数据是否缓存等。

? ? ? ? ?前端nginx反代到后端时采用的是80端口,所以需要将varnish监听在80端口这样才能正确获取到前端请求。

? ? ? ? ?修改/etc/varnish/varnish.param

? ? ? ? ?将VARNISH_LISTEN_PORT修改为80端口,原来为6081,该端口为服务端口,6082为管理端口

? ? ? ? ?技术分享图片

? ? ? ??

? ? ? ? ?/etc/varnish/default.vcl配置:

? ? ? ? ?设置反代到后端的两个主机,可以进行健康状态监测,如

? ? ? ? ?probe = {

? ? ? ? ? ? ? ?url = /health.html

? ? ? ? ? ? ? ?timeout = 3s

? ? ? ? ? ? ? ?interval = 2s

? ? ? ? ? ? ? ?window = 5

? ? ? ? ? ? ? ?threahold = 3 (5次检测有三次成功则表示后端RS正常)

? ? ? ? }

? ? ? ? ?技术分享图片

? ? ? ? ?vcl_purge为缓存裁剪,对不需要的缓存进行删除,常用于缓存更新。

? ? ? ? ?vcl_recv为所有请求数据都必须经过的一个状态引擎的表示,在这里对数据进行静态分离,

? ? ? ? ?当请求的方法为dele,则表示对该资源进行裁剪,当请求的资源存在.php则表示该资源为

? ? ? ? ?动态资源,发往动态资源服务器web2,否则发往静态资源服务器web1.在这里可以对资

? ? ? ? ?源服务器进行扩展,若动静态资源服务器有多台,则可以设置vcl_init

? ? ? ? ?如

? ? ? ? ?vcl_init {

? ? ? ? ? ? new websrv = directors.backend_roundrobin();

? ? ? ? ? ? websrv.add_backend(webstat1);

? ? ? ? ? ? websrv.add_backend(webstat2);

? ? ? ? ?}

? ? ? ? ?将两台静态服务器 都添加至websrv中,类似于nginx中的upstream

? ? ? ? ?调用时使用set req.backend_hint = websrv.backend();即可。

? ? ? ? ?注意:在使用组调度方式时,需要在配置文件顶部添加

? ? ? ? ?技术分享图片

? ? ? ? ?技术分享图片

? ? ?启动varnish服务

? ? ?systemctl start varnish.service

? ? ?使用varnishadm加载default.vcl文件

? ? ?技术分享图片

? ?

? 后端RS的LAMP配置在这里就不多说了;

? ? 运行结果:

? ? ?访问静态资源

? ? ?技术分享图片

? ? ?访问动态资源

? ? ??技术分享图片

? ? ? ?访问phpMyAdmin

? ? ? ?技术分享图片

? ? ? ??

nginx反代+varnish缓存+后端LAMP平台集群实现

标签:nginxvarnishlamp

原文地址:http://blog.51cto.com/12480612/2049331

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!