高性能缓存服务器Varnish
一、Varnish概述
Varnish是一款高性能的、开源的反向代理服务器和缓存服务器,计算机系统的除了有内存外,还有CPU的L1、L2,甚至L3级别的缓存,Varnish的设计架构就是利用操作系统的缓存机制处理访问;VCL,即Varnish Configuration Language,是Varnish的配置语言。在执行VCL时,Varnish把VCL转换成二进制代码执行。
Varnish与Squid的对比:
优点:Varnish具有更好的稳定性、更快的访问速度、更多的并发连接支持数,可以通过管理端口管理缓存等优势
缺点:在高并发状态下,Varnish消耗更多的CPU、I/O和内存资源。Varnish进程一旦挂起、崩溃或者重启,缓存的数据会从内存中释放,此时所有的请求都会转发到后端服务器上,给后端服务器造成很大压力。
二、Varnish的使用
(1)需要安装的依赖包有libtool、ncurses-devel、pcre-devel、libxslt、groff、pkgconfig
libedit-devel-2.11-4.20080712cvs.1.e16.x86_64.rpm
python-docutils-0.6-1.e16.noarch.rpm
python-imaging-1.1.6-19.e16.x86_64.rpm
varnish-4.0.1.tar.gz
(2)安装过程
~]# bash autogen.sh #解压后的源码包内有一个脚本,我们需要执行以下它
~]# ./configure --prefix=/usr/local/varnish --enable-debugging-symbols --enable-developer-warnings && make && make install
~]# ln -s /usr/local/varnish/sbin/varnishd /usr/lcoal/sbin
~]# ln -s /usr/local/varnish/bin/* /usr/local/bin
~]# cp /usr/local/varnish/share/doc/varnish/example.vcl /usr/local/varnish/default.vcl #配置文件模板拷贝出来用
(3)配置反向代理
~]# vim default.vcl
backend default {
.host = "192.168.10.52"; #后端web服务器的地址
.port = ""; #web服务器端口
}
~]# varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80 #指定监听的ip和端口
~]# varnishlog #查看日志,实时滚动方式
测试方法:访问varnishIP地址可以看到后端web服务器的默认首页,就说明我们配置的反向代理没有问题。
三、Varnish负载均衡配置
~]# vim default.vcl
import directors #在vcl 4.0;行下面定义一个负载调度器变量
backend web1 { #把default修改为web1,就是后面的web服务器,有几个web节点就复制几个backend域
.host = "192.168.10.52"; #后端web服务器的地址
.port = ""; #web服务器端口
}
然后再添加下列函数
sub vcl_init {
new bar = directors.round_robin(); #让新的 bar 等于之前定义的变量directors,后面接轮询(rr)算法
bar.add_backend(web1); #注意这里有几个backend就添加几个
bar.add_backend(web2);
}
在sub vcl_recv {}函数中添加下列语句
set req.backend_hint = bar.backend();
~]# varnishd -C -f /usr/local/varnishd/default.vcl >/root/varnish #检查语法是否有误
~]# pkill varnish
~]# varnishd -f /usr/local/varnish/default.vcl #加载配置文件并启动varnish
测试方法:由于varnish缓存的原因,当我们访问varnish的时候,并没有像我们预期的那样根据rr算法各自访问后面两台web服务器的不同页面,这时我们让一台web服务器网络中断,这时varnish就会访问到另一台了。
四、Varnish高可用配置
我所知道的Varnish高可用就是可以探测后端web节点的健康状况,检测到宕机后做记录,不再传递访问请求了。至于这种方法和负载均衡有什么不同,还需继续研究
~]# vim default.vcl 、
backend web1 { #把default修改为web1,就是后面的web服务器,有几个web节点就复制几个backend域
.host = "192.168.10.52"; #后端web服务器的地址
.port = ""; #web服务器端口
.probe = { #添加健康检查段,每个backend都要添加
.url = "/" ;
.interval = 5s ;
.timeout = 1s ;
.window = 5 ;
.threshold = 3 ; #检测3次
}
}
~]# varnishd -f /usr/local/varnish/default.vcl #加载配置文件并启动varnish
高性能缓存服务器Varnish的更多相关文章
- Linux平台部署varnish 高性能缓存服务器
一:varnish部署前准备: 1.1相关软件以及系统,web服务 系统要求:Centos 6(以上) (64位) 相关中间件:varnish-4.0.2 1.2相关系统依赖包安装检查准备 1.2.1 ...
- 利用varnish做Discuz论坛的缓存服务器
实验背景:公司有一台BBS服务器,用的是LNMP的架构搭建的.正好手头有一台空闲的虚拟机,于是想着给BBS前端加一台缓存服务器.于是选定了varnish,搜了很多教程,跌跌撞撞的完成了配置.这其中很多 ...
- Varnish缓存服务器的搭建配置手册
Varnish缓存服务器的搭建配置手册 1.Varnish官方环境依赖提示 Installing Varnish Cache is as simple as enabling our package ...
- Varnish,Nginx搭建缓存服务器
Varnish,Nginx搭建缓存服务器 一. varnish 1.安装pcre库,兼容正则表达式 # tar -zxvf pcre-8.10.tar.gz # cd pcre-8.10 # ./co ...
- 高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式
通过<高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景>一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率 ...
- 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》
优化Linux内核参数/etc/sysctl.conf sysctl <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...
- web缓存值varnish使用
具体的介绍到官网 https://www.varnish-software.com/static/book 一.简介 Varnish is a reverse HTTP proxy, sometime ...
- SSDB:高性能数据库服务器
SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下 ...
- Django分析之使用redis缓存服务器
时间长没有更新了,这段时间一直忙着一个项目,今天就记录一个现在经常会用到的技术吧. redis相信大家都很熟悉了,和memcached一样是一个高性能的key-value数据库,至于什么是缓存服务器, ...
随机推荐
- 【BZOJ2716】天使玩偶【kd树】
这个题要求kd树支持两个操作. 1.插入一个新的点. 2.查询某个点最近曼哈顿距离. 注意查询曼哈顿距离和查询欧几里得距离,是有区别的.(估价函数不同). #include <cstdio> ...
- java把流抛给浏览器下载时,当下载的文件文件名为中文时,出现中文名被替换为“----------”的情况
比如说,下载的文件名为: 软件分析报告.docx,当使用流抛给浏览器下载时,浏览器下载的文件为:-----------.docx 出现这种情况的原因:大体的原因就是header中只支持ASCII,所以 ...
- mybatis框架入门程序:演示通过mybatis实现数据库的插入操作中实现返回结果的获取
1.mybatis实现数据库的插入操作可以查看https://www.cnblogs.com/wyhluckdog/p/10149895.html这篇博文,这里面的插入操作没有返回结果,所以这篇博文就 ...
- Linux System V Semaphore semget多进程同时创建缺陷解决方法
System V Semaphore的创建过程缺陷是创建与赋初值由两个函数完成,这会导致两个进程同时创建的话会出现竞争和不一致状态,即使是使用了IPC-EXCL标记. 示例: oflag = IPC- ...
- qt QTcpServer与QTcpSocket通讯
分类: C/C++ TCP TCP是一个基于流的协议.对于应用程序,数据表现为一个长长的流,而不是一个大大的平面文件.基于TCP的高层协议通常是基于行的或者基于块的. ...
- oracle 查询死锁
--查询死锁 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked ...
- JQuery 对象和事件
JQuery 对象和事件 一:JQuery 对象和 Dom 对象 在使用 JQuery 过程中,我们一般(也是绝大多数情况下,除非我们使用了第二个框架)只有两类对象,即:JQuery 对象和 Dom ...
- Oracle学习笔记(十)
光标(游标)概念引入 就是一个结果集(查询或者其他操作返回的结果是多个时使用)定义一个光标 cursor c1 is select ename from emp: 从光标中取值 打开光标: --ope ...
- jQuery框架-3.jQuery自定义封装插件和第三方插件
一.jQuery的封装扩展 1.jQuery中extend方法使用 (挂在到jQuery和jQuery.fn两对象身上的使用) 1.1.官方文档定义: jQuery.extend Merge th ...
- swoole实现websocket推送
环境配置: swoole 1.9.3.centos6.5(虚拟机).PHP7.01 思路: ①通过server中的collections取出fd ②写一个admin. ...