varnish做为缓存加速应用,逐渐在取代squid ,成为缓存加速的领头羊。 目前最新版本的varnish为3.0.3 。其安装也很二进包安装和源码包安装。本文着重介绍下如何通过源码包进行varnish的安装及需要的注意点。

一、获取安装包

安装相关依赖并获取源码包安装

1yum -y install automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig
2wget http://repo.varnish-cache.org/source/varnish-3.0.3.tar.gz
3tar -zxf varnish-3.0.3.tar.gz && cd varnish-3.0.3

所需的依赖可以参看官方安装页的提示。通过上面解包后,我们可以通过下列方法完成自动安装和配置检查。

1sh autogen.sh
2sh configure
3make
4make check
5make install

当然也可以通过定制化的安装指定相关路径。如下:

1./configure --prefix=/App/varnish
2make
3make install

而如果感觉默认源里面的pcre版本过低,想使用最新pcre进行源码安装的话,也可以通过下面的方法进行第三方的扩展:

1tar zxvf pcre-8.32.tar.gz
2cd pcre-8.32
3./configure –prefix=/usr/local/pcre
4make && make install
5varnish安装时调整如下:
6export PKG_CONFIG_PATH=/usr/local/pcre/lib/pkgconfig
7./configure –prefix=/App/varnish
8make && make install

二、编译注重点

平时养成了一个习惯,就是安装软件前,总习惯通过./configure –help查看下其可以编译进进的优化参数。这一看确实也看出了点问题。varnish除了正则包pcre包,也对内存管理块进行了第三方的支持 。有趣的是同fackbook 、taobao tengine一样都选择了jemalloc 。具体选项如下:

1 --with-pcre-config=PATH Location of PCRE pcre-config (auto)
2 --with-jemalloc         use jemalloc memory allocator. Default is yes on
3                          Linux, no elsewhere

由此也从一方面说明jemalloc在内存管理方面确实有不错的稳定性和性能。由于上面pcre的安装步骤已有,下面就对pcre的部分一带而过,着重jemalloc的步骤

 1tar zxvf pcre-8.32.tar.gz
 2cd pcre-8.32
 3./configure –prefix=/usr/local/pcre
 4make && make install
 5tar jxvf jemalloc-3.3.0.tar.bz2
 6cd jemalloc-3.3.0
 7./configure
 8make && make install
 9export PKG_CONFIG_PATH=/usr/local/pcre/lib/pkgconfig
10./configure –prefix=/App/varnish

注:我这里之所以没有带上面提到的关于pcre和jemalloc的参数,是因为其默认是进行自动检测的。在varnish configure的过程中会看到如下的部分

1checking for malloc_conf in -ljemalloc… yes
2……………………
3config.status: creating lib/libjemalloc/Makefile

按此方法make && make install完成安装后,还不能使用varnish,其在使用其测试配置文件时时会有下面的错误提示:

1[root@localhost ]# /App/varnish/sbin/varnishd -f /App/varnish/etc/varnish/default.vcl
2/App/varnish/sbin/varnishd: error while loading shared libraries: libjemalloc.so.1: cannot open shared object file: No such file or directory

造成该错误的原因很简单,是因为在默认的lib库里找不到jemalloc的关so文件。可以通过下面的方法解决:

1ln -s /usr/local/lib/libjemalloc.so.1 /lib64/ 或
2ln -s /usr/local/lib/libjemalloc.so.1 /usr/lib64/

注:以上是在64位系统下安装的,如果要32位系统下进行请再更行更改。当然,也可以在编译jemalloc时指定lib文件的生成路径来解决,如下

1./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc

三、系统优化

为了使varnish更好的工作,还需做两方面的调整。一是ulimit参数做;一是tcp/ip参数做化。

1ulimit -HSn 131072
2ulimit -HSc unlimited

可以通过以上命令修改用户打开的最大文件数,当然,也可以通过配置文件修改指定启动varnish用户所能打开的最大文件数。打开/etc/sysctl.conf文件,加入如下内容:

 1net.ipv4.ip_local_port_range = 1024 65536
 2net.core.rmem_max=16777216
 3net.core.wmem_max=16777216
 4net.ipv4.tcp_rmem=4096 87380 16777216
 5net.ipv4.tcp_wmem=4096 65536 16777216
 6net.ipv4.tcp_fin_timeout = 3
 7net.ipv4.tcp_tw_recycle = 1
 8net.core.netdev_max_backlog = 30000
 9net.ipv4.tcp_no_metrics_save=1
10net.core.somaxconn = 262144
11net.ipv4.tcp_syncookies = 0
12net.ipv4.tcp_max_orphans = 262144
13net.ipv4.tcp_max_syn_backlog = 262144
14net.ipv4.tcp_synack_retries = 2
15net.ipv4.tcp_syn_retries = 2

然后运行sysctl -p使配置生效。根据官网的说法,此配置可以支持4000-8000 req/s的压力 。

四、varnish的启动

varnish的启用使用的指令为varnishd,其相关的参数如下:

  • -a address:port 表示varnish对httpd的监听地址及其端口
  • -b address:port 表示后端服务器地址及其端口
  • -d 表示使用debug调试模式
  • -f file 指定varnish服务器的配置文件
  • -p param=value 指定服务器参数,用来优化varnish性能
  • -P file Varnish进程PID文件存放路径
  • -n dir 指定varnish的工作目录
  • -s kind[,storageoptions] 指定varnish缓存内容的存放方式。硬盘文件保存:“-s file,,”。
  • 其中“”指定缓存文件的存放路径,“”指定缓存文件的大小。内存方式保存:-s malloc,
  • -t 指定缺省的TTL值
  • -T address:port 设定varnish的telnet管理地址及其端口
  • -w int[,int[,int]] 设定varnish的工作线程数,常用的方式有:
  • -w min,max
  • -w min,max,timeout

例如:-w5,51200,30,这里需要说明下,在varnish2.0版本以后,最小启动的线程数不能设定过大,设置过大,会导致varnish运行异常缓慢。

如,我在一台测试机上以内存存储方式进行启动时的指令如下:

1/App/varnish/sbin/varnishd -u www -g www -f /App/varnish/etc/online.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:80

注:-u和-g参数用于指定启动时所用的用户和组。