Varnish 实战
目录
实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构
原理:缓存,又称加速器,用于加速运行速度较快的设备与较慢设备之间的通信。基于程序的运行具有局部性特征其能实现加速的功能
一、环境准备
1.1 相关配置
机器名称 | IP配置 | 服务角色 | 备注 |
---|---|---|---|
haproxy-server-master | VIP:172.17.120.120 RIP:172.17.66.66 | 负载均衡器主服务器 | 配置keepalived |
haproxy-server-backup | VIP:172.17.120.120 RIP:172.17.251.66 | 负载均衡器从服务器 | 配置keepalived |
varnish | 192.168.37.111 | 缓存服务器 | 开启代理功能 |
rs01 | 192.168.37.222 | 后端服务器 | 开启lnmp的web服务 |
rs02 | 192.168.37.100 | 后端服务器 | 开启lnmp的web服务 |
1.2 安装服务
我们需要在相应的机器上安装我们的服务:
1)haproxy-server-master&haproxy-server-backup 上:
yum install haproxy -y
yum install keepalived -y
2)varnish 上:
varnish服务器请用centos7来做。
yum install varnish -y
3)rs01&rs02 上:
安装配置LNMP。详情见我之前的博客——Nginx详解以及LNMP的搭建
1.3 关闭防火墙及selinux
iptables -F && setenforing
本步骤完成。
二、配置 Haproxy
我们需要把两个机器的Haproxy都设置好。我们去修改一下Haproxy的配置文件——/etc/haproxy/haproxy.cfg
global段和default段都是设置好的,我们就不需要修改,下面是我们需要修改的部分:
1)frontend段
frontend web
bind *:80
default_backend varnish-server
2)backend段
backend varnish-server
balance roundrobin
server varnishsrv 192.168.37.111:6081 check inter 3000 rise 3 fall 5
3)listen段
listen admin
bind :9527
stats enable
stats uri /haproxyadmin
stats auth admin:admin
stats refresh 20s
stats admin if TRUE
第一台机器设置好了以后,直接使用scp
命令发到第二台机器即可。
然后把两台机器的服务都开启:
service haproxy start
本步骤完成。
三、配置keepalived
3.1 配置 haproxy-server-master (主服务器)
配置文件为/etcc/keeplalived/keepalived.conf
,我们编辑以下三段即可:
1)全局段——设置发送邮件
global_defs {
notification_email {
root@localhost
}
notification_email_from root@keer.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id keepalived_haproxy
}
2)编辑健康监测脚本
该脚本作用是对haproxy进行健康监测,每隔2s监测一次haproxy进程。
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
fall 2
rise 2
weight -4
}
3)定义主从和VIP
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 170
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass keer
}
virtual_ipaddress {
172.17.120.120
}
track_script {
chk_haproxy
}
}
3.2 配置 haproxy-server-backup (从服务器)
从服务器和主服务器的配置很是相似,我们可以直接使用scp
命令把主服务器的配置文件拷过来,然后,我们只需要把第二段删掉,同时修改一下第三段的主从和优先级即可:
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 170
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass keer
}
virtual_ipaddress {
172.17.120.120
}
}
本步骤完成。
四、配置Varnish
4.1 修改Management进程配置文件
Management进程的配置文件为/etc/varnish/varnish.params
。我们先来修改一下这个文件,主要是修改端口和缓存类型及大小:
VARNISH_ADMIN_LISTEN_PORT=6082
VARNISH_STORAGE="file,/data/cache,1G"
4.2 修改Varnish总配置文件
Varnish的总配置文件为/etc/varnish/default.vcl
,我们来修改一下这个配置文件:
1)第一段
① 定义一个健康监测:
vcl 4.0; #指定版本
import directors; #加载后端的轮询模块
probe backend_healthcheck { #设置名为backend_healthcheck的健康监测
.url = "/index.html";
.window = 5; #窗口
.threshold = 2; #门槛
.interval = 3s;
.timeout = 1s;
}
② 设置后端server:
backend web1 {
.host = "192.168.37.222";
.port = "80";
.probe = backend_healthcheck;
}
backend web2 {
.host = "192.168.37.100";
.port = "80";
.probe = backend_healthcheck;
}
③ 配置后端集群事件
sub vcl_init {
new img_cluster = directors.round_robin();
img_cluster.add_backend(web1);
img_cluster.add_backend(web2);
}
acl purgers { # 定义可访问来源IP,权限控制
"127.0.0.1";
"172.17.0.0"/16;
}
2)第二段——定义引擎
① 定义vcl_recv
引擎
定义不认识的头部请求直接扔后端的pass
sub vcl_recv {
if (req.method == "GET" && req.http.cookie) {
return(hash); //处理完recv 引擎,给下一个hash引擎处理
}
if (req.method != "GET" &&
req.method != "HEAD" &&
req.method != "PUT" &&
req.method != "POST" &&
req.method != "TRACE" &&
req.method != "OPTIONS" &&
req.method != "PURGE" &&
req.method != "DELETE") {
return (pipe); //除了上边的请求头部,通过通道直接扔后端的pass
}
定义index.php通过特殊通道给后端的server,不经过缓存
if (req.url ~ "index.php") {
return(pass);
}
定义删除缓存的方法
if (req.method == "PURGE") { //PURGE请求的处理的头部,清缓存
if (client.ip ~ purgers) {
return(purge);
}
}
为发往后端主机的请求添加X-Forward-For首部
if (req.http.X-Forward-For) { //为发往后端主机的请求添加X-Forward-For首部
set req.http.X-Forward-For = req.http.X-Forward-For + "," + client.ip;
} else {
set req.http.X-Forward-For = client.ip;
}
return(hash);
}
② 定义vcl_hash 引擎,后没有定义hit和Miss的路径,所以走默认路径
sub vcl_hash {
hash_data(req.url);
}
③ 定义要缓存的文件时长
sub vcl_backend_response { //自定义缓存文件的缓存时长,即TTL值
if (bereq.url ~ "\.(jpg|jpeg|gif|png)$") {
set beresp.ttl = 30d;
}
if (bereq.url ~ "\.(html|css|js)$") {
set beresp.ttl = 7d;
}
if (beresp.http.Set-Cookie) { //定义带Set-Cookie首部的后端响应不缓存,直接返回给客户端
set beresp.grace = 30m;
return(deliver);
}
}
④ 定义deliver 引擎
sub vcl_deliver {
if (obj.hits > 0) { //为响应添加X-Cache首部,显示缓存是否命中
set resp.http.X-Cache = "HIT from " + server.ip;
} else {
set resp.http.X-Cache = "MISS";
}
unset resp.http.X-Powered-By; //取消显示php框架版本的header头
unset resp.http.Via; //取消显示varnish的header头
}
本步骤完成。
五、开启服务的顺序
1)先开启后端server事先搭建好的lnmp web服务
systemctl start nginx
systemctl start php-fpm
systemctl start mariadb
2)再开启varnish缓存服务器
service varnish start
3)开启主从的keepalived,提供VIP
service keepalived start
4)开启haproxy服务
service haproxy start
本步骤完成。
六、测试
1)配置完成后,client访问,http://172.17.120.120/ ,成功访问web
2)访问http://172.17.120.120:9527/haproxy?admin ,haproxy的web监测页面,正常
3)当主haproxy 宕机时,VIP自动漂移到从上,且服务正常使用;
在主haproxy 上,server stop haproxy,VIP会漂到从上。
4)varnish 缓存服务器上,确实生成了缓存文件
F12打开网页的调试页面,查看确实缓存了:
5)测试清缓存的功能,PURGE 发送头部信息
6)后端有一台server 宕机,服务照常使用
我们停掉一台后端服务器:
systemctl stop nginx
然后我们再去浏览器查看一下:
bing~实验完成
以上~如果有不足之处还请大家多多指教喏٩(๑>◡<๑)۶
Varnish 实战的更多相关文章
- Varnish 实战项目
实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构 原理:缓存,又称加速器,用于加速运行速度较快的设备与较慢设备之间的通信.基于程序的运行具有局部性特征其能实现加速的功能 ...
- Varnish 缓存加速, Varnish 菜鸟看过来,Varnish实战
Varnish可以有效降低web服务器的负载,提升访问速度.按照HTTP协议的处理过程,web服务器接受请求并且返回处理结果,理想情况下服务器要在不做额外处理的情况下,立即返回结果,但实际情况并非如此 ...
- 项目实战5—企业级缓存系统varnish应用与实战
企业级缓存系统varnish应用与实战 环境背景:随着公司业务快速发展,公司的电子商务平台已经聚集了很多的忠实粉丝,公司也拿到了投资,这时老板想通过一场类似双十一的活动,进行一场大的促销,届时会有非常 ...
- varnish 项目实战
1.工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp ...
- Varnish 4.0 实战(转)
简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管 ...
- Varnish 4.0 实战
简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管 ...
- 优化系统资源ulimit《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》
优化系统资源ulimit<高性能Linux服务器构建实战:运维监控.性能调优与集群应用> 假设有这样一种情况,一台Linux 主机上同时登录了10个用户,在没有限制系统资源的情况下,这10 ...
- 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》
优化Linux内核参数/etc/sysctl.conf sysctl <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...
- Varnish 4.0
Varnish 4.0 实战 简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varn ...
随机推荐
- tee---将数据重定向到文件,
tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin.简单的说就是把数据重定向到给定文件和屏幕上. 存在缓存机制,每1024个字节将输出一次.若从管道接收输 ...
- leetcode: Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...
- 【Android界面实现】使用GestureOverlayView控件实现手势识别
在Android开发中,我们不光能够使用已有的实现方式.并且,我们还能够利用Android这个智能手机平台.实现一些比較有特色的功能. 本篇文章介绍使用GestureOverlayView这个控件.实 ...
- 通过Debug-->Attach to Process的方式来调试网站
找到网站所对应的应用程序池
- SpringBoot与Dubbo整合-项目搭建
本章节建立生产者和消费者来演示dubbo的demo 生产者:springboot-dubbo-provider 和 消费者:springboot-dubbo-consumer 工程配置详解 Apach ...
- Anders Hejlsberg 和 Erich Gamma
Anders Hejlsberg 和 Erich Gamma 大概半年前,我写了一篇名叫<有点软文>的文章,深情并茂地告诉大家,我司其实隐藏着很多牛人巨擘.有些人是身怀屠龙技,但是大家不认 ...
- js -- canvas img 封装
鼠标 1.操作canvas 中的 img. 右键放大缩小,左键移动img. 2.拖动input type= range 改变图片的透明度 html 代码 <!DOCTYPE html> ...
- java接口理解(转载)
今天和同事好好的讨论了java接口的原理和作用,发现原来自己的对接口的理解仅仅是局限在概念的高度抽象上,觉得好像理解了但是不会变化应用其实和没有理解差不多.以前看一个帖子说学习一个东西不管什么时候都要 ...
- ps---报告当前系统的进程状态
ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同.现在的大部分Linux系统都是可以同时使用这两种方式的. linux上进程有5种状态: ...
- Hive通过查询语句向表中插入数据过程中发现的坑
前言 近期在学习使用Hive(版本号0.13.1)的过程中,发现了一些坑,它们也许是Hive提倡的比关系数据库更加自由的体现(同一时候引来一些问题).也许是一些bug.总而言之,这些都须要使用Hive ...