实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构

Varnish知识储备:

常见的状态引擎之间的默认处理流程为:

①如果缓存命中:默认流程

用户请求–>vcl_recv–>vcl_hash–>vcl_hit–>vcl_deliver–>响应给用户

②如果缓存未命中:默认流程

用户请求–>vcl_recv–>vcl_hash–>vcl_miss–>vcl_backend_fetch–>后端服务器接受请求发送响应报文–>vcl_backend_response–>vcl_deliver

或:非默认流程

用户请求–>vcl_recv–>vcl_hash–>vcl_miss–>vcl_pass–>vcl_backend_fetch–>后端服务器接受请求发送响应报文–>vcl_backend_response–>vcl_deliver–>响应给用户

③如果不能从缓存中进行响应:默认流程

用户请求–>vcl_recv–>vcl_hash–>vcl_pass–>vcl_backend_fetch–>后端服务器接受请求发送响应报文–>vcl_backend_response–>vcl_deliver–>响应给用户

④如果请求报文无法理解:默认流程

用户请求–>vcl_recv–>vcl_pipe–>交给后端服务器

说明:如果配置文件中没有指明状态引擎之间的跳转,那么对应使用以上默认的流程

-----------------------------------------------------------------------------

vcl的内建变量的分类:

req.*:由客户端发来的http请求相关的变量。比如req.method 表示客户端的请求方法。

bereq.* :varnish主机在向后端真实服务器发送http请求报文时的相关变量。

beresp.*:由后端真实服务器发来的http响应报文中的某些首部信息相关的变量,一般是在vcl_backend_response或vcl_backend_fenth引擎中调用。

resp.*:由varnish响应给客户端的响应报文相关的变量。

obj.* :对存储在缓存空间中的缓存对象属性的引用变量,obj开头的变量都是只读的。

obj.hits: 某个缓存对象的缓存的命中次数。

client.,server.,storage.*:可用在所有面向客户端一侧的引擎中。

用户还可自定义:使用set及unset,具体用法在实验中有体现

---------------------------------------------------------------------------------------

实验:实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构:

要求:

1.修改/etc/varnish/default.vcl配置文件内容

2、定义后端服务器组,以及检测机制和配置后端集群事件

3、配置检测机制为http检测,配置后端两台web server,算法为轮询。

4、配置varnish入口函数vcl_recv,定义GET请求类型被缓存

5、配置vcl_deliver函数,设定缓存头部信息

6、配置后端缓存文件类型,对图片缓存30天,对静态文件缓存7天

7、配置Varnish程序功能的配置文件,使其以文件形式缓存,大小为1G,监听端口为6081

-----------------------------------------------------------------------------

一、环境准备:

两台haproxy(一台master,一台backup,VIP:172.17.111.10)(对varnish实现负载均衡)

两台varnish(IP分别为:172.17.111.234    172.17.111.222)

两台后端服务器(已实现lnmp)(IP分别为:172.17.253.100    172.17.253.211)

二、安装步骤:

1、在用作haproxy负载均衡的机器上安装keepalived和haproxy

yum install keepalived

yum install haproxy

2、在用作varnish的服务器上安装varnish

yum install varnish

三、修改配置文件及启动服务

1、对主haproxy操作:主要代码如下

①vim /etc/keepalived/keepalived.conf  实现高可用

#具体代码含义请参看博客:http://13150617.blog.51cto.com/13140617/1979652

! Configuration File for keepalived

global_defs {

notification_email {

[email protected]    #收件人

}

notification_email_from [email protected]

smtp_server 127.0.0.1  #发件的服务器

smtp_connect_timeout 30

router_id LVS_DEVEL2

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 14

priority 100       #优先级

advert_int 1

authentication {

auth_type PASS

auth_pass 111111

}

virtual_ipaddress {

172.17.111.10 #VIP

}

启动服务:systemctl start keepalived

②vim /etc/haproxy/haproxy.cfg  实现负载均衡

#具体代码含义请参看博客:http://13150617.blog.51cto.com/13140617/1980419

global

log         127.0.0.1 local2

chroot         /var/lib/haproxy

pidfile        /var/run/haproxy.pid

maxconn        4000

user          haproxy

group         haproxy

daemon

stats socket /var/lib/haproxy/stats

defaults

mode                   http

log                    global

option                  httplog

option                  dontlognull

option http-server-close

option forwardfor           except 127.0.0.0/8

option                  redispatch

retries                  3

timeout http-request         10s

timeout queue              1m

timeout connect            10s

timeout client          1m

timeout server          1m

timeout http-keep-alive 10s

timeout check           10s

maxconn                  3000

listen stats

mode http                     #基于http协议

bind 0.0.0.0:1080               #监听1080端口

stats enable                   #开启统计报告服务

stats hide-version               #隐藏统计报告版本信息

stats uri /haproxyadmin           #统计报告访问url

stats realm Haproxy\ Statistics     #页面登陆信息

stats auth admin:admin            #验证账号信息

stats admin if TRUE              #验证模式

frontend  http-in

bind *:80

default_backend       cache

backend cache

balance    roundrobin    #负载均衡算法

server     cache1 172.17.111.222:6081  check

server     cache2 172.17.111.234:6081  check

启动服务:systemctl start haproxy  (打开了80和1080端口)

2、对从haproxy操作:

①vim /etc/keepalived/keepalived.conf

配置基本同上面主的,只需要修改下面两行,然后启动服务

state BACKUP

priority 90

②vim /etc/haproxy/haproxy.cfg

配置完全同上面主的,配置完成后启动服务

3、两台varnish上进行同样的操作:

①vim /etc/varnish/default.vcl

vcl 4.0;  #版本

import directors; #导入模块

probe backend_healthcheck {   #定义健康状态检测

.url = "/index.html";  #检测的页面

.window = 5;        #窗口

.threshold = 1;      #门槛,1表示至少有一个正常工作

.interval = 3s;      #检测频度

.timeout = 1s;       #超时时长

}

backend web1 {                       #定义后端服务器

.host = "172.17.253.211";

.port = "80";

.probe = backend_healthcheck;  #健康状态检测

}

backend web2 {                       #定义后端服务器

.host = "172.17.253.100";

.port = "80";

.probe = backend_healthcheck;  #健康状态检测

}

sub vcl_init {  #初始化

new web_cluster = directors.round_robin(); #定义后端服务器组,使用轮询算法

web_cluster.add_backend(web1);  #引用上面定义的服务器

web_cluster.add_backend(web2);

}

sub vcl_recv {                 #定义入口函数

if(req.url ~ "index.php"){  #不缓存index.php页面,直接跳到pass

return (pass);

}

if(req.method == "GET"){   #请求方法为GET的就缓存

return (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); #如果不属于以上列出的方法,那么就通过管道直接传递到后端服务器

}

return (hash);

}

sub vcl_hash{                 #定义hash

hash_data(req.url);  #对请求的url进行hash处理

}

sub vcl_backend_response {         #自定义缓存文件时长,即TTL值

if(bereq.url ~ "\.(jpg|jpeg|gif|png)$"){

set beresp.ttl = 30d;  #缓存图片30天

}

if(bereq.url ~ "\.(html|css|js)$"){

set beresp.ttl = 7d;   #缓存静态页面7天

}

return (deliver);

}

sub vcl_deliver {         #为响应添加首部,显示缓存是否命中

if(obj.hits > 0){

set resp.http.X-Cache = "HIT from " + server.ip; #命中

}

else{

set resp.http.X-Cache = "MISS";            #没命中

}

unset resp.http.Via;   #取消显示varnish版本号

}

②vim /etc/varnish/varnish.params

VARNISH_STORAGE="file,/var/lib/varnish/bin,1G" #以文件形式缓存,大小为1G

VARNISH_LISTEN_PORT=6081                #监听端口为6081

启动服务:systemctl start varnish (打开了6081端口)

四、检测:

访问http://172.17.111.10:1080/haproxyadmin 登陆查看两台varnish的状态是否正常

访问http://172.17.111.10/ 按ctrl+F12可查看浏览器的抓包信息

然后ctrl+F5强制刷新几次页面,页面情况如下:

index.php页面信息:

.jpg图片信息:

欢迎浏览,如有疑问,欢迎留言。

时间: 2024-08-03 00:58:15

实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构的相关文章

RabbitMq 基于 keepalived+haproxy实现高可用

1  概述 rabbitmq作为消息队列,广泛用于生产环境,但是,如果单节点,将导致故障后,生产环境不可用,因此,需要部署高可用环境 本文将介绍基于keepalived+haproxy实现rabbitmq的高可用 rabbitmq的集群中,所有节点都可读写,因此,可用haproxy调度到后端的任意一台rabbitmq上. 环境准备 三个节点mq-01 mq-02 mq-03 ,这里服务器复用了redis的服务器节点,所以机器名忽略. 添加hosts文件 #这一步很关键,所有的节点都要配置一样,否

基于haproxy+keepalive+varnish实现lnmp企业级架构

一.实验准备 服务器A:haproxy服务器(主) 服务器B:haproxy服务器(备) 服务器C:LNMP服务器.varnish服务器 服务器D:LNMP服务器.varnish服务器 二.实验要求 前端负载均衡器实现keepalived高可用.并且实现对于图片和静态资源的请求,代理到后端webserver缓存varnish服务上,对于动态请求.直接代理到厚点web服务,后端健康检测基于/index.html(手动创建),监测连续三次监测通过,视为OK,连续5次监测失败,视为fall. 三.实验

HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署

HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3.10.0-327.el7.x86_64 集群架构: 前端:HAProxy 1.虚拟FQDN:www.simpletime.net 2.VIP:192.168.39.1:DIP:172.16.39.50 3.调度服务器:Varnish1.Varnish2 4.调度算法:URL_Hash_Consist

基于keepalived的Haproxy高可用配置

一.概述: HAProxy是一个用于4层或7层的高性能负载均衡软件,在大型网站的大型Web服务器群集中,HAProxy可用来替代专业的硬件负载均衡设备,节省大量的开支. 通常情况下,为了避免整个体系中出现单点故障,在至关重要的架构中,都需要部署备份设备,同样,负载均衡设备也不能部署单台,一旦主设备出现问题之后,备份设备可对主设备进行接管.实现不间断的服务,这便是Keepalived的作用. 于是,HAProxy和Keepalived的组合便成了省钱高效的Web服务器负载均衡架构. 拓扑图: 二.

HAProxy基于KeepAlived实现Web高可用及动静分离

    前言     软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载均衡.LVS是基于Linux操作系统实现的一种软负载,而Haproxy则是基于第三方应用实现的软负载.Haproxy相比LVS的使用要简单很多,但跟LVS一样,Haproxy自己并不能实现高可用,一旦Haprox节点故障,将会影响整个站点.本文是haprox基于keepalived实现web高可用及动静分离.     相关介绍         HAProxy     haproxy是一款提供

haproxy实现的web反向代理,动静分离,以及基于keepalived实现的haproxy的高可用

   haproxy于Nginx一样都是做反向代理,但是与其相比,haproxy更专注于web代理.HAProxy是单进程多请求,也支持多进程,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.       haproxy功能的实现全部基于配置文件,所以我们需要了解很多的配置指令,玩转指令,再结合实际情况,我们就玩转了haproxy,其实haproxy的配置也很简单,下面我们一起简单认识和了解一些haproxy的基本功能和相关知识.         CentOS6.5自带的rpm

Keepalived+HAProxy基于读写分离方式实现discuz论坛

一.测试环境: centos 6.6:使用8台虚拟机(上图) 分别对它们设置主机名: 主机名 ip地址 软件包 node1 172.16.16.11 keepalived+haproxy node2 172.16.16.12 keepalived+haproxy php1 172.16.16.2 httpd+php+php-mysql+nfs-utils php2 172.16.16.8 httpd+php+php-mysql+nfs-utils web1 172.16.16.3 httpd w

基于keepalived对HAproxy做高可用集群

一.Keepalived简介 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式

基于keepalived实现haproxy高可用

keepalived实现haproxy高可用模型 keepalived节点1 ---------------------------------------------------------------- vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight -2 } vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_