前言

通常一个网站数据库挂掉后,后果将是非常严重的。基本上整个网站基本不可用了。对于一些网站来说,当数据库挂掉后,如果能提供基本的浏览服务,也是不错的。本文将尝试使用 varnish + nginx + lua 搭建网站降级系统来实现整个目标。

降级目标

降级方案的目标是,当网站出现致命故障时(如出现500错误,不能提供服务),可以把缓存的页面数据展现给用户。从而提供基本的浏览服务。

  1. 只提供基本的浏览服务

  2. 浏览的数据都是非登录状态下的数据

  3. 支持手动和自动降级。自动降级是当后端返回500错误次数在一段时间内达到一定阈值(不包含503)。手动降级是从控制界面操作。

降级方案

存储

使用varnish作为存储。有效的节约了物理内存,并保持了较好的性能。

更新

使用crond脚本从nginx的access日志中分析出请求url,然后向varnish发请求,从而更新varnish的缓存。缓存的异步更新,减少对nginx的压力。

降级

支持手动降级和自动降级。降级后,nginx自动从varnish中提取数据,并返回给用户。

流程图

流程描述

  1. 用户请求到nginx时,nginx会判断当前是否是降级状态。如果属于降级状态,直接从varnish中获取数据。非降级状态,把请求转到php-fpm。

  2. 当crond脚本请求varnish进行缓存数据更新时,如果当前varnish处于降级状态,则不进行缓存更新。如果没有处在降级状态,则把请求转到nginx,获取数据。然后把获取的数据缓存到varnish中。

  3. varnish会自动监控后端nginx的状态。如果检测到nginx已经处于降级状态,则varnish也会自动进入降级状态。

安装部署

vanish安装到/home/varnish 目录下。安装步骤如下:

首先,安装libpcre。

sudo yum install pcre pcre-devel

其次,安装varnish。

./configure --prefix=/home/varnishmakesudo -u admin make installsudo -u admin mkdir -p /home/varnish/vcache/sudo chown admin:admin -R /home/varnishsudo -u admin touch /home/varnish/vcache/varnish_cache.datasudo chmod 777 /home/varnish/vcache/varnish_cache.data

再次,修改varnish配置文件和部署相关脚本。点击下载文件压缩包。配置文件名为default.vcl。

最后,启动varnish。启动脚本也在压缩包中,名称为 varnishctl

sudo /home/admin/varnish/sbin/varnishctl start

注意:启动后可以通过varnishlog命令查看是否运行正常。如果出现以下字样,说明运行正常。http的返回状态为200

$ /home/varnish/bin/varnishlog0 Backend_health - default Still healthy 4--X-RH 4 2 4 0.002698 0.001722 HTTP/1.1 200 OK

部署lua脚本

lua脚本在/home/admin/nginx/data/lua目录下。 确保目录下有如下几个个脚本。

pc_get_downgrade_data.luainit.luapc_status_stat.luapc_get_status.luapc_set_satus.lua

这几个脚本在下载的压缩包中有。

修改nginx配置文件

首先,在http域增加

init_by_lua_file 'lua/init.lua';lua_shared_dict pc_status 1m;lua_shared_dict pc_auto_status 1m;#varnish configupstream varnish{    server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=5s;}

最后,在server域宏增加如下配置。

location @php {  include fastcgi_params;}   location @var { proxy_pass http://varnish$str_params;}   location ~* ^(.+\.php)(.*)$ {  #check downgrade status, then get data from varnish  set $str_params $uri;  content_by_lua_file lua/pc_get_downgrade_data.lua;}location /hl_get_auto_status {           if ($white_ip = 0) {               return 403;           }           content_by_lua_file lua/pc_get_auto_status.lua; }location /hl_get_status {     if ($white_ip = 0) {         return 403;     }     content_by_lua_file lua/pc_get_status.lua;}location /hl_set_status {           if ($white_ip = 0) {               return 403;           }           content_by_lua_file lua/pc_set_status.lua;} log_by_lua_file  lua/pc_status_stat.lua;

部署crond脚本

脚本varnish_crond.php。在crond中增加执行命令。每分钟执行一次。

来自crond的请求,user-agent数据为varnish_crond。把user-agent为varnish_crond请求特殊处理。保证能正常请求,并返回相关数据。

降级管理

varnish降级

只要让varnish配置中指定的监控脚本check.php返回500错误即可。varnish监控到指定脚本不可用,自动会进入降级状态。
当脚本返回200状态后,varnish自动又会恢复正常。

nginx降级

设置降级:

curl -H "Host:demo.bo56.com" -i http://127.0.0.1/hl_set_status?status=1

恢复正常:

curl -H "Host:demo.bo56.com" -i http://127.0.0.1/hl_set_status?status=0

查看降级状态:

curl -H "Host:demo.bo56.com" -i http://127.0.0.1/hl_get_status

如果返回的值为1表示降级。

转载于:https://blog.51cto.com/lucifer119/1666035

使用varnish + nginx + lua搭建网站的降级系统相关推荐

  1. Nginx + Lua 搭建网站WAF防火墙

    Nginx + Lua 搭建网站WAF防火墙 一.目的 二.前期环境准备 (一).更新下yum源 (二).编译安装Nginx (三).端口放行 (四).验证安装 (五).lua编译安装 (六).端口冲 ...

  2. 采用nginx+chimee搭建网络摄像头直播系统

    概述 公司最近需要一套直播系统,要求是网络摄像头进行录制,然后可以在网页上无插件进行直播,要求同时支持PC端和移动端进行直播,最后我决定采用hls协议,利用nginx+chimee搭建网络摄像头直播系 ...

  3. nginx+lua实现限流降级(使用lua的lua-resty-limit-traffic)

    前言 虽然nginx中自带了限流的模块,只能直接限定超出的数量,但对于允许范围内的流量如何进行限流是个问题.nginx的限流方式! limit_conn perserver 100;limit_con ...

  4. nginx proxy svn 加快_Hexo+Nginx+SVN搭建网站

    下载Notejs 官网下载地址 NoteJs官网 百度网盘下载 链接: https://pan.baidu.com/s/1JTmwNXaasghohKoADCpu6Q 密码: 1kcc 配置NoteJ ...

  5. Docker启动nginx容器--搭建网站

    1.下载nginx镜像 docker pull nginx 2.启动nginx镜像 docker run -d --name nginx01 -p 80:80 -v /data/nginx/www:/ ...

  6. w7服务器搭建网站教程,w7系统下的云服务器搭建教程

    w7系统下的云服务器搭建教程 内容精选 换一换 使用云服务器备份创建镜像后,通过创建成功的镜像创建云服务器,但登录云服务器后提示系统进入维护模式,无法正常使用云服务器.当云服务器带有数据盘的时候,恢复 ...

  7. nginx+lua+redis实现降级

    前言 商城或web站点的用户访问量出乎意料地增加了很多,超出了系统的负载能力, 系统有些扛不住,继而导致注 册,下单,支付什么的全部在绕圈卡住,继而导致公司业务损失了不少用户和订单.. 一.引子 面对 ...

  8. Varnish高性能开源HTTP加速器:Varnish Nginx和Varnish Apache搭建配置

    Varnish是一款高性能的开源HTTP加速器,一般用来和Nginx.Apache等搭配使用,组建一个高效率的Web服务器.Varnish的某个负责接受新HTTP连接的线程开始等待用户,如果有新的HT ...

  9. 第5章.网站首页高可用nginx+lua

    第5章 网站首页高可用nginx+lua 学习目标 了解Lua语言的基本语法 使用nginx+Lua+redis实现广告缓存 掌握nginx限流的基本使用方法 1 Lua介绍 1.1 lua是什么 ​ ...

最新文章

  1. 2021高考东莞高中成绩查询,东莞2021高考成绩查询系统入口
  2. 关于Transformer,面试官们都怎么问?
  3. 入行以来涉及的技术简史
  4. 一次tns连接错误的解决过程
  5. kali linux 2019.1 替换burpsuite pro 1.7.37
  6. 阅读作业二-----读Lost in CatB有感 by 李栋
  7. redis官方文档网址
  8. FatMouse believes that the fatter a mouse is, the faster it runs.
  9. 黎曼和 Riemann Sum ,黎曼积分Riemann Integral,正态分布normal distribution
  10. [附源码]计算机毕业设计Python+uniapp智能公交查询APP59sm2(程序+lw+APP+远程部署)
  11. Bandwidth Part
  12. 百度直接搜IP可以查看本机外网IP
  13. 商品秒杀问题的解决方案
  14. 监控平台bosun快速入门
  15. SDK 的下载及安装教程
  16. 2022-2023级北京大学光华管理学院MBA招生简章
  17. C#实现二维码扫码登录
  18. Google Play登录SDK接入
  19. 高考415分能上计算机网络的学校吗,2021年高考415分左右能上什么大学(100所)
  20. 新中关大厦污水泵站远程监控系统解决方案

热门文章

  1. mysql分组后统计
  2. Oracle SCN
  3. python 实现双端队列
  4. Linux centos7 Linux网络相关、firewalld和netfilter、netfilter5表5链介绍、iptables语法
  5. 洛谷 p2066 机器分配(资源型)
  6. yii required 字段去除*号
  7. mysql keepalived_mysql高可用+keepalived
  8. wpf每隔一小时_包河区徐河排涝站24小时不间断运作 11座区管泵站全面应战保安澜...
  9. linux 代码获取当前路径,【linux】shell代码,获取当前路径,创建文件夹
  10. oracle统计事务,统计Oracle 查询事务数的方法