论坛风格切换切换到宽版
  • 5487阅读
  • 4回复

web简单负载均衡及反向代理测试 [复制链接]

上一主题 下一主题
离线小猴
 

发帖
2443
金钱
82
威望
799
只看楼主 倒序阅读 使用道具 楼主  发表于: 2008-01-28
实际上没有生产系统可以做实际测试,所以没有压力方面的数据。

条件有限,大部分都是虚拟机。

逻辑结构如下:



域名解析到负载均衡服务器上,由nginx处理web访问请求,按照3:1的比例(自己随便定的,也就是大致看看效果)分担到后面的cache服务器上。

用varnish做的cache,为什么用varnish,也就是图个新鲜,另外就是觉得VCL很不错,很好,很强大。但VCL复杂以后varnish的效能会下降多少,没有对比压力测试的情况下那还很难说。如果说VCL不能写的复杂,那varnish的优点也许就没那么明显了,可能就只剩下安装配置简单这个优点了。从个人来说,我觉得varnish的性能不好说有大的跨越,毕竟也看到说有在重负载下崩掉的情况。

软件安装就不说了,没什么太大的花头,无非就是configure+make+make install。

nginx配置如下:

user  www www;
worker_processes  10;

error_log  logs/error.log;
pid        var/nginx.pid;
events {
    use epoll;
    worker_connections  4096;
}
http {
    include      conf/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    upstream 2tutu {
        server 192.168.0.2:80 weight=3;
        server 192.168.0.3:80;
    }
    server {
        listen      80;
        server_name  www.zzhome.com;
        location / {
            proxy_pass http://www.zzhome;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 10m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 30;
            proxy_send_timeout 30;
            proxy_read_timeout 30;
            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_emp_file_write_size 64k;
            #root  html;
            #index  index.html index.htm;
        }

        #error_page  404              /404.html;

        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  html;
        }

    }

}


两台缓存上的varnish的配置都一样(其实下面配置里的两个后端是写着顺便玩一下VCL判虚拟主机的,实际本次测试只有一个后端):

backend test1 {
    set backend.host = "192.168.0.11";
    set backend.port = "http";
}

backend test2 {
    set backend.host = "192.168.0.12";
    set backend.port = "http";
}

acl purge {
                "localhost";
        }
       
sub vcl_recv {
   
    if (req.http.host ~ "www.zzhome.com") {
        set req.backend = test2;
    }
    else
    {
        if(req.http.host ~ "test1.zzhome.com"){
            set req.backend = test1;
        }
        else{
            error 200 "No cahce for this domain";
        }
    }


    if (req.request == "PURGE") {
        if (!client.ip ~ purge) {
            error 405 "Not allowed.";
        }
        else{
            lookup;
        }
    }

    if (req.request != "GET" && req.request != "HEAD") {
        pipe;
    }
   
    if (req.http.Expect) {
        pipe;
    }
   
    if (req.http.Authenticate ){
        pass;
    }
   
    if (req.http.Cache-Control ~ "no-cache") {
        pass;
    }
    if(req.url ~ "\.asp"){
        pass;
    }   
    lookup;
}

sub vcl_pipe {
    pipe;
}

sub vcl_pass {
    pass;
}

sub vcl_hash {
    set req.hash += req.url;
    set req.hash += req.http.host;
    hash;
}

sub vcl_hit {
    if (req.request == "PURGE") {
        set obj.ttl = 0s;
        error 200 "Purged.";
    }
    if (!obj.cacheable) {
        pass;
    }
    deliver;
}

sub vcl_miss {
    if (req.request == "PURGE") {
        error 404 "Not in cache.";
    }
    fetch;
}

sub vcl_fetch {
    if (!obj.valid) {
        error;
    }
    if (!obj.cacheable) {
        pass;
    }
    if (obj.http.Pragma ~ "no-cache" || obj.http.Cache-Control ~ "no-cache" || obj.http.Cache-Control ~ "private") {
        pass;
    }   
    if (obj.ttl < 180s) {
        set obj.ttl = 180s;
    }
    insert;
}

sub vcl_deliver {
    deliver;
}

sub vcl_timeout {
    discard;
}

sub vcl_discard {
    discard;
}

在测试过程中,查看两个varnish上的日志,有明显差别,基本上负载3:1成立。

测试过程中,关闭一个varnish,测试负载均衡后端故障的情况,页面访问几乎不受影响,看nginx日志,的确没有连上有“故障”的varnish,能够及时转到正常的那台缓存上。“故障”恢复后,负载3:1继续成立。
离线善柔
发帖
18
金钱
180
威望
0
只看该作者 沙发  发表于: 2008-01-29
不错 谢谢分享
离线caicui

发帖
882
金钱
1484
威望
1934
只看该作者 板凳  发表于: 2008-01-29
终于知道了怎么负载了
可惜我们的小站基本用不到。
但是了解了知识,收益中。
新加坡留学www.eistudy.com
www.qq.gg QQ公馆
新加坡凯博学院www.eistudy.com
新加坡ERC学院www.eistudy.com
离线soxy
发帖
547
金钱
205
威望
11
只看该作者 3楼 发表于: 2008-02-13
有点难懂
离线wsf263747263
发帖
8416
金钱
775
威望
355
只看该作者 4楼 发表于: 2008-02-21
谢谢分享。
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿纯表情、纯引用!
 
上一个 下一个