varnish 安装部署

安装前准备

Varnish 安装需要pcre ,安装pcre 最好下载源码包进行安装,本次安装部署采用的版本是8.31 。下载完成的源码包文件为 :pcre-8.31.tar


varnish 由于开源软件最新版往往稳定性有待检查,所以本次安装部署并非最新版,而是采用稳定版本的 3.0.0 。下载完成的源码包文件为 :varnish-3.0.0.tar 。


源码编译安装

以root 用户登录OA 反向代理主机,在root 默认目录下建立 pkg_install 目录,并将上述两个源码包copy 到此目录下。


1. 编译安装 pcre

进入 pkg_install 目录,执行以下指令:

tar �Czvxf pcre-8.31.tar

cd pcre-8.31

./configure

make && make install

2. 编译安装varnish

安装pkg 时,需要在make文件生成时指定 pcre 的安装位置,进入 pkg_install 目录,执行以下指令:

tar �Czvxf varnish-3.0.0.tar

cd varnish-3.0.0

./configure �Cprefix=/usr/local/varnish PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

make && make install

部署配置

部署环境:

两台tomcat 服务器,每台服务器开放三个端口80、8080、8081,前端需要架设一台代理服务器,对后端的两台tomcat进行代理访问,主要作用为缓存、负载均衡的作用,并可减轻后端服务器压力。

在进行配置之前,需要了解varnish http请求处理过程:


1:vcl_recv : 客户端请求调用,根据vcl判断pass还是lookup本地查询。

2:lookup的过程是在hash表中查找数据,若找到则进入hit状态,否则进入fetch状态。

3:pass选择后台直连服务器,进入fetch状态。

4:fetch,调用 vcl_fetch,并对请求进行后端获取,获得数据后安装规则进行本地缓存

5:deliver:将数据发送给客户端,进入done

6:done:处理流程结束。


下图是来源网上,可形象描述各个函数调用流程:


根据以上流程,对varnish 的配置文件行配置,由于每一varnish的进程启动实例只能对单一端口进行监听,所以需要三个varnish启动实例才能对后台的三个端口80、8080、8081 进行监听。暂时以80端口监听的配置文件做以下重点说明:


1:建立两个 backend ,其中每个 backend 对应一个IP、port,并加入后台服务器检查机制,检查的url 为定位登陆首页“/seeyon/index.jsp”,检查间隔3秒每次。

backend webOA01 {

.host = "192.168.20.216";

.port = "80";

.connect_timeout = 1s;

.first_byte_timeout = 5s;

.between_bytes_timeout = 2s;

.probe = {

.url = "/seeyon/index.jsp";

.timeout = 0.3s;

.window = 8;

.threshold = 3;

.initial = 3;

}

}


backend webOA02 {

.host = "192.168.20.217";

.port = "80";

.connect_timeout = 1s;

.first_byte_timeout = 5s;

.between_bytes_timeout = 2s;

.probe = {

.url = "/seeyon/index.jsp";

.timeout = 0.3s;

.window = 8;

.threshold = 3;

.initial = 3;

}

}

2:建立后台访问控制组 webOAacc 。分配权重为均等,客户端访问方式为 client方式(由于session 问题,不能采用 random round-robin 方式):

director webOAacc client

{

{

.backend = webOA01;

.weight = 1;

}

{

.backend = webOA02;

.weight = 1;

}

}


3:建立清理缓存请求的IP权限:

acl purge{

"localhost";

"127.0.0.1";

"192.168.20.144";

}


4:配置 vcl_recv 函数:此函数为客户端请求后首先调用的函数,所以访问控制流程均在此函数中配置:

 主机域名访问分流

if (req.http.host ~ "192.168.20.218"){

set req.backend = webOAacc;

}

如果访问主机地址为 192.168.20.218 ,则要求varnish 通过访问控制组webOAacc去分发后台,具体规则见 webOAacc的配置。

 多层代理处理,获取客户端IP

if (req.http.x-forwarded-for) {

set req.http.X-Forwarded-For = req.http.X-Forwarded-For+", "+client.ip;

}

else {

set req.http.X-Forwarded-For = client.ip;

}

 处理浏览器编码差异造成的缓存内存浪费

if (req.http.Accept-Encoding)

{

if (req.url ~ "\.(jpg|png|gif|jpeg)(\?.*|)$") {

remove req.http.Accept-Encoding;

} elsif (req.http.Accept-Encoding ~ "gzip") {

set req.http.Accept-Encoding = "gzip";

} elsif (req.http.Accept-Encoding ~ "deflate") {

set req.http.Accept-Encoding = "deflate";

} else {

remove req.http.Accept-Encoding;

}

}

 非正常浏览器请求,全部直接pipe管道到后端服务器:

if (req.request != "GET" &&

req.request != "HEAD" &&

req.request != "PUT" &&

req.request != "POST" &&

req.request != "TRACE" &&

req.request != "OPTIONS" &&

req.request != "DELETE")

{

return (pipe);

}


 非get、head请求时pass到后端服务器:

if (req.request != "GET" && req.request != "HEAD") {

return (pass);

}


 不在需要缓存的内容列表里,直接pass到后端服务器:

If(req.url!~\.(gif|jpg|swf|css|js|png|jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|doc|ppt|pps|xls|odc|odb|odf|odg|odi|odp|ods|odt|sxc|sxd|sxi|sxw|txt)") {return (pass);   }


 剩余的全部在缓存中查找

return (lookup);


5:配置 vcl_fetch 函数,vcl_fetch 是后台返回数据后调用的函数,配置时刻决定哪些内容缓存:


 在缓存内容列表中的,保存30天的缓存期限:

if (req.request == "GET" && req.url ~ "\.(gif|jpg|swf|css|js|png|jpg|jpeg|gif|png|tiff|tif|svg|swf|ico|doc|ppt|pps|xls|odc|odb|odf|odg|odi|odp|ods|odt|sxc|sxd|sxi|sxw|txt)")

{

remove beresp.http.Set-Cookie;

set beresp.ttl = 30d;

}

6:配置完成保存到/usr/local/varnish/etc/varnish/default.vcl .


启动配置

启动主进程为 /usr/local/varnish/sbin/varnishd ,携带参数做如下说明:

-s malloc,1024m:表示开辟1g内存作为缓存空间。

-T 0.0.0.0:201 :varnish 管理端口201 。

-a 0.0.0.0:80 :访问监听端口80 。

-p 为进程池以及进程池参数配置等信息。

-f /usr/local/varnish/default.conf :配置文件位置

-n /usr/local/varnish/var/varnish/fanxiangdaili :配置文件编译 so 的位置

防火墙配置

为了网络访问安全,设置防火墙INPUT为 DROP模式,OUTPUT为ACCEPT模式,FORWORD为DROP模式。

 清除原始防火墙配置:

iptables �CF

iptables �CX

iptables �CP INPUT DROP

iptables �CP OUTPUT ACCEPT

iptables �CP FORWORD DROP

 加入访问端口:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT  #ssh端口

iptables -A INPUT -p tcp --dport 201 -j ACCEPT #varnish管理端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT  #web 访问端口

iptables -A INPUT -p tcp --dport 8080 -j ACCEPT #移动访问端口

iptables -A INPUT -p tcp --dport 8081 -j ACCEPT #https端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT #ftp端口

iptables -A INPUT -p tcp --dport 20 -j ACCEPT #ftp端口

iptables -A INPUT -p tcp --dport 161 -j ACCEPT #snmp端口

iptables -A OUTPUT -p icmp -j ACCEPT #开通 ping

iptables -A INPUT -i lo -p all -j ACCEPT #dns处理

 保存重启:

/etc/init.d/iptables save

service iptables restart

chkconfig iptables on


varnish启动

运行指令:

/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,1024m -T 127.0.0.1:201 -a 0.0.0.0:80


访问 192.168.20.218 即可,整个安装部署完成。

其他两个主机端口的代理配置思路也是一样,只是端口不同而已,启动命令为:

移动监听启动命令:

/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,1024m -T 127.0.0.1:201 -a 0.0.0.0:8080 �Cn /usr/local/varnish/var/varnish/mob

https监听启动命令:

/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,1024m -T 127.0.0.1:201 -a 0.0.0.0:8080 �Cn /usr/local/varnish/var/varnish/https

后端服务器检查结果正常:



Varnish 状态正常,访问时缓存shm 各项指标在逐步增加中:





你可能感兴趣的:(varnish,安装部署)