实现基于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 实战的更多相关文章

  1. Varnish 实战项目

    实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构 原理:缓存,又称加速器,用于加速运行速度较快的设备与较慢设备之间的通信.基于程序的运行具有局部性特征其能实现加速的功能 ...

  2. Varnish 缓存加速, Varnish 菜鸟看过来,Varnish实战

    Varnish可以有效降低web服务器的负载,提升访问速度.按照HTTP协议的处理过程,web服务器接受请求并且返回处理结果,理想情况下服务器要在不做额外处理的情况下,立即返回结果,但实际情况并非如此 ...

  3. 项目实战5—企业级缓存系统varnish应用与实战

    企业级缓存系统varnish应用与实战 环境背景:随着公司业务快速发展,公司的电子商务平台已经聚集了很多的忠实粉丝,公司也拿到了投资,这时老板想通过一场类似双十一的活动,进行一场大的促销,届时会有非常 ...

  4. varnish 项目实战

    1.工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp ...

  5. Varnish 4.0 实战(转)

    简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管 ...

  6. Varnish 4.0 实战

    简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高.速度更快.管 ...

  7. 优化系统资源ulimit《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

    优化系统资源ulimit<高性能Linux服务器构建实战:运维监控.性能调优与集群应用> 假设有这样一种情况,一台Linux 主机上同时登录了10个用户,在没有限制系统资源的情况下,这10 ...

  8. 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

    优化Linux内核参数/etc/sysctl.conf  sysctl  <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...

  9. Varnish 4.0

    Varnish 4.0 实战   简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varn ...

随机推荐

  1. CentOS下安装jdk1.8.0_181

    我安装的为 jdk1.8.0_181 1.检查是否存在open jdk,不存在直接跳到第 5 步 java -version 查看当前系统自带的open jdk版本信息 2.查看包含java字符串的文 ...

  2. 洛谷 P1985 翻转棋

    P1985 翻转棋 题目描述 农夫约翰知道,聪明的奶牛可以产更多的牛奶.他为奶牛设计了一种智力游戏,名叫翻转棋. 翻转棋可以分成 M × N 个格子,每个格子有两种颜色,一面是黑的,一面是白的. 一旦 ...

  3. ZOJ Problem Set - 3822Domination(DP)

    ZOJ Problem Set - 3822Domination(DP) problemCode=3822">题目链接 题目大意: 给你一个n * m的棋盘,每天都在棋盘上面放一颗棋子 ...

  4. Cocos2dx 小技巧(十二) 一种可行的系列动画播放方式

    今早发生了一件事让我感觉特气愤!去年的这个时候,我和小伙伴们一起在操场上拍毕业照,之后有个当地报纸的记者来我们学校取材,看到我们后打算给我们拍几张创意张扬点的毕业照.之后呢,照片出来了,拍的效果大伙都 ...

  5. amaze ui中的icon button

    amaze ui中的icon button 说明几点: 1.链接效果 连接效果的本质一般都是a标签,好像很多button的链接效果都是用的a标签,submit表单提交或者button的type为sub ...

  6. vue -- 跨域cookie 丢失的问题

    前端使用了vue-reource的$http进行请求后台接口 登陆完成后,服务端监控发现无法拿到cookie,下面看几张前端控制台监控的图 reqqust Header  没有显示cookie 信息 ...

  7. [log4j]Slf4j的包冲突

    Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFa ...

  8. 实现CSS样式垂直水平完全居中

    1.水平居中 a.内联元素(inline or inline-*)居中? 你可以让他相对父级块级元素居中对齐 .center-children { text-align: center; } b.块级 ...

  9. 雷观(二十三)-IT互联网技术,不拼创新拼努力,特别低公平

    上次发表"雷观(二十二)"是在2015年3月7日,一转眼,就快到了11月.  前段时间,终于狠下心来,写了本篇,第二十三啦.  小雷同志,要加油了~  早日达到百篇雷观的里程碑~  ...

  10. ArcGIS Engine中空间参照(地理坐标)相关方法总结

    转自原文 ArcGIS Engine中空间参照(地理坐标)相关方法总结 1.创建空间参考 /// <summary> /// 根据prj文件创建空间参考 /// </summary& ...