既然Varnish需要在多台服务器上缓存数据,就需要Varnish映射所有的URL到一台单独的主机。
backend webserver { .host = "127.0.0.1"; .port = "80"; .connect_timeout = 4s; .first_byte_timeout = 5s; .between_bytes_timeout = 20s; }
该块配置用于定义一台Varnish默认访问的后端服务器,当Varnish需要从后端服务器获取数据时,就会访问自己的80端口。
当然Varnish也可以定义多台后端服务器实现负载均衡的目的。
.connect_timeout定义的是等待连接后端的时间
.first_byte_timeout定义的是等待从backend传输过来的第一个字节的时间
.between_bytes_timeout 定义的是两个字节的间隔时间
当然还可以增加一个backend,用于访问本机的8090端口,假设通过该端口提供图片服务。
backend img { .host = "127.0.0.1"; .port = "8090"; }
当匹配img的URL时,需把请求发送到上面定义的backend img,其他的请求发送到backend webserver。
sub vcl_recv { if (req.url ~ "^/img/") { set req.backend = img; } else { set req.backend = webserver. } }
Varnish不仅仅可以定义多个backend,还可以把多个backend合成一个组,使用循环的方式把请求分配给组中的backends。并且Varnish会根据健康检查情况来判断后端服务器是否正常提供服务。
简介:
Varnish是一款高性能且开源的反向代理服务器和HTTP 加速器
特点:
(1)是基于内存缓存,重启后数据将消失。
(2)利用虚拟内存方式,io性能好。
(3)支持设置0~60秒内的精确缓存时间。
(4)VCL配置管理比较灵活。
(5)32位机器上缓存文件大小为最大2G。
(6)具有强大的管理功能,例如top,stat,admin,list等。
(7)状态机设计巧妙,结构清晰。
(8)利用二叉堆管理缓存文件,达到积极删除目的
环境设置:
测试环境:用VMWare安装的CentOS5.6,Windows2003,克隆的CentOS5.6命名为CentOS5.6.1
CentOS5.6 有两块网卡vmnet0(IP:192.168.2.10)用于与公网用户通信,vmnet1(IP:8.8.8.10)用于模拟内网
CentOS5.6.1 一块网卡vmnet0(IP:192.168.2.11)由于模拟内网提供服务web服务的服务器,我用的是Apache
Windows2003 一块网卡vmnet1(IP:8.8.8.11)用于模拟公网web用户。
配置CentOS5.6
ifconfig eth0 192.168.2.10 netmask 255.255.255.0 ifconfig eth1 8.8.8.10 netmask 255.255.255.0
配置CentOS5.6.1
ifconfig eth0 192.168.2.11 netmask 255.255.255.0
配置window2003
IP地址:8.8.8.11 子网掩码255.255.255.0
主从复制的优点:
主从复制的工作原理:
主从复制的通过3个过程来实现,其中一个过程发生在主服务器上,另两个过程发生在从服务器。
准备六台计算机,一台模拟外网的互联网用户(可以是Linux也可以是Windows),一台模拟Nginx负载均衡服务器(必须是Linux),另四台模拟真实的服务器(Linux)。我们这里使用VMWare安装CentOS5.6作为Nginx负载均衡服务器,另外用VMWare再clone四台CentOS5.6作为Real Server。用WMWare安装windows(我这里用的是windows2003)作为外网的互联网用户,做实验时,请将防火墙关掉。
在CentOS5.6关机状态下,进行克隆。右击VM->Manage->Clone->Next....
这里我将3个虚拟机命名为:CentOS5.6.11,CentOS5.6.12,CentOS5.6.13,CentOS5.6.14
根据上面的拓扑图可知,CentOS5.6作为LVS服务器,需要两个IP地址,所以我们给这个虚拟机在添加一个网卡。在CentOS5.6启动状态下:VM->Setting->Add->Network Adapter->Next->Finish
将CentOS5.6(LVS)的一块网卡设置为vmnet0,用于与外网通信,一块设置为vmnet1,用于与RealServer通信,windows2003作为外网的互联网用户,网卡设为vmnet0。CentOS5.6.11,CentOS5.6.12,CentOS5.6.13,CentOS5.6.14作为RealServe,网卡都设为vmnet1。我是在Ubuntu上安装的vmware,我的vmware配置如图:
nginx的upstream目前支持5种方式的分配
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如:
upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
按后端服务器的响应时间来分配请求,响应时间短的优先分配。例如:
upstream backend { server server1; server server2; fair; }
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。