使用varnish + nginx + lua搭建网站的降级系统
通常一个网站数据库挂掉后,后果将是非常严重的。基本上整个网站基本不可用了。对于一些网站来说,当数据库挂掉后,如果能提供基本的浏览服务,也是不错的。本文将尝试使用varnish + nginx + lua 搭建网站降级系统来实现整个目标。
降级方案的目标是,当网站出现致命故障时(如出现500错误,不能提供服务),可以把缓存的页面数据展现给用户。从而提供基本的浏览服务。
1、只提供基本的浏览服务
2、浏览的数据都是非登录状态下的数据
3、支持手动和自动降级。自动降级是当后端返回500错误次数在一段时间内达到一定阈值(不包含503)。手动降级是从控制界面操作。
使用varnish作为存储。有效的节约了物理内存,并保持了较好的性能。
使用crond脚本从nginx的access日志中分析出请求url,然后向varnish发请求,从而更新varnish的缓存。缓存的异步更新,减少对nginx的压力。
支持手动降级和自动降级。降级后,nginx自动从varnish中提取数据,并返回给用户。
img src="http://www.bo56.com/wp-content/uploads/2015/06/Pc_downgrade.png" alt="Pc_downgrade" width="702" height="351" / /a /p1、用户请求到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/varnish sudo -u admin make install sudo -u admin mkdir -p /home/varnish/vcache/ sudo chown admin:admin -R /home/varnish sudo -u admin touch /home/varnish/vcache/varnish_cache.data sudo 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/varnishlog 0 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.lua
init.lua
pc_status_stat.lua
pc_get_status.lua
pc_set_satus.lua
这几个脚本在下载的压缩包中有。
首先,在http域增加
init_by_lua_file lua/init.lua; lua_shared_dict pc_status 1m; lua_shared_dict pc_auto_status 1m; #varnish config upstream 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配置中指定的监控脚本check.php返回500错误即可。varnish监控到指定脚本不可用,自动会进入降级状态。
当脚本返回200状态后,varnish自动又会恢复正常。
设置降级
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表示降级
利用基于Go Lang的Hugo配合nginx来打造属于自己的纯静态博客系统 Go lang无疑是目前的当红炸子鸡,极大地提高了后端编程的效率,同时有着极高的性能。借助Go语言我们 可以用同步的方式写出高并发的服务端软件,同时,Go语言也是云原生第一语言,Docker,Kubernetes等等著名的项目都是使用Go语言实现的。
高并发核心编程SpringCloud+Nginx秒杀实战,秒杀系统的系统架构 秒杀系统的系统架构 本节分多个维度介绍crazy-springcloud开发脚手架的架构,包括分层架构、限流架构、分布式锁架构、削峰的架构。 秒杀的分层架构 从分层的角度来说,秒杀系统架构可以分成3层,大致如下: (1)客户端:负责内容提速和交互控制。 (2)接入层:负责认证、负载均衡、限流。 (3)业务层:负责保障秒杀数据的一致性。
玩转Linux系统【五】安装Nginx搭建网站 Nginx( engine x )是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
相关文章
- php nginx window系统 gettext方式实现UTF-8国际化多语言(i18n)
- FastDFS整合Nginx的模块:fastdfs-nginx-module报错:fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录
- 新闻发布系统,真正了解了么?
- 虚拟机拷贝之后,发现系统内的开机自启动的nginx,不能自启动了
- Cubieboard A10 安装Nand系统,配置nginx,php,mysql,samba详细教程
- Ubuntu系统的nginx启动
- Ubuntu系统安装nginx
- Nginx配置文件(nginx.conf)配置详解
- Docker教程---部署LAMP搭建wordpress博客系统
- Qt编写安防视频监控系统22-摄像机搜索
- Nginx第三方模块nginx_upstream_check_module实现http检测
- iOS 13 SceneDelegate适配(Xcode 11,适配ios13以下系统)
- android系统级别应用开发要点
- Android 系统APK-Camera 开机时自动检测摄像头,有显示,无隐藏图标
- 【异常】Nginx报错[emerg]: unknown directive “user“ in /usr/local/nginx/conf/nginx.conf:xx报错处理
- 用Java打造高效可扩展的分布式数据流处理系统
- Android 系统开发Android.mk的详解
- 【数字信号处理】线性时不变系统 LTI ( 判断某个系统是否是 “ 非时变 “ 系统 | 案例一 | 先变换后移位 | 先移位后变换 )
- centos7系统下nginx安装并配置开机自启动操作
- 005-Nginx 配置文件nginx.conf详解
- Linux系统如何查看nginx安装目录
- 推荐系统-Task03离线物料系统的构建
- 【Nginx】入门看这一篇就够啦,nginx 简介、安装、工作原理、工作方式、详解配置文件
- 【使用 BERT 的问答系统】第 3 章 :词嵌入介绍
- Nginx(5):进程绑定CPU:从nginx源码里给你刨功能出来
- 「科普」如何评价供应商的MES系统
- 目标检测系列算法:简单实现YOLO语音TTS报警系统(检测人员入侵室内或室外)
- 【Zabbix实战之部署篇】Zabbix使用SNMP监控Linux系统
- Win10系统C盘之前还有20G空间突然红了爆满如何解决
- nginx开发从入门到精通【淘宝核心系统服务器】
- Linux常用命令——系统痕迹命令