• varnish集群


    #在前篇varnish安装与配置中,配置了一个后端服务器。

    ######################################
    backend default {
    .host = “192.168.0.12″;
    .port = “8080″;
    }

    #现在添加一个新的backend服务器

    backend test {
    .host = “192.168.0.12″;
    .port = “8000″;
    }

    #要定义特殊的url被发送到哪里

    sub vcl_recv {
    if (req.url ~ “^/abcd/”) {
    set req.backend = test;
    } else {
    set req.backend = default;
    }
    }
    #########################################

    Directors

    可以把多台 backends 聚合成一个组,这些组被叫做 directors。这样可以增强性能和弹力。您可以定义多个backends和多个group在同一个directors。

    ###################################
    backend server1 {
    .host = “192.168.0.12″ ;
    .port = “8080″ ;
    }

    backend server2 {
    .host = “127.0.0.1″ ;
    .port = “8080″ ;
    }

    director myvarnish round-robin {
    { .backend = server1; }
    { .backend = server2; }
    }

    #但要记得在vcl_recv中设置bachend = myvarnish。

    sub vcl_recv
    {
    if (req.http.host !~ “www\.myvarnish\.com$”)
    { error 404 “Unknown HostName!”; }
    set req.backend = myvarnish;
    }
    ##########################################

    Health checks
    在之前的两个后端服务器上加上健康检查。

    ########################################
    backend server1 {
    .host = “192.168.0.12″ ;
    .port = “8000″ ;
    .probe = {
    .url = “/”;           #哪个 url需要varnish请求。
    .interval = 5s;     #检查的间隔时间。
    .timeout = 1 s;   #等待多长时间探针超时。
    .window = 5;      #维持5个sliding window的结果。
    .threshold = 3;   #至少有三次window是成功的,就宣告bachend健康。
    }
    }

    backend server2 {
    .host = “127.0.0.1″ ;
    .port = “8080″ ;
    .probe = {
    .url = “/”;
    .interval = 5s;
    .timeout = 1 s;
    .window = 5;
    .threshold = 3;
    }
    }
    ############################################
    以上红色部分为Health checks配置。如果一个backend down掉了,varnish将不会发送流量给这个后端。

    grace mode

    如果后端需要很长时间来生成一个对象,这里有一个线程堆积的风险。为了避免这 种情况,你可以使用 Grace。他可以让 varnish 提供一个存在的版本,然后从后端生成新 的目标版本。
    当同时有多个请求过来的时候,varnish只发送一个请求到后端服务器,在“set beresp.grace = 30m; ”时间内复制旧的请求结果给客户端。

    vcl_fetch

    如果您的服务每秒有数千万的点击率,那么这个队列是庞大的,没有用户喜欢等待服务器响应。为了使用过期的 cache 给用户提供服务,我们需要增加他们的 TTL,保存所有cache 中的内容在 TTL过期以后30 分钟内不删除,使用以下VCL:

    sub vcl_fetch {
    set beresp.grace = 30m;
    }

    vcl_recv

    Varnish 还不会使用过期的目标给用户提供服务,所以我们需要配置以下代码,在cache过期后的15 秒内,使用旧的内容提供服务:

    sub vcl_recv {
    set req.grace = 15s;
    }
    为什么要多保存过去的内容 30 分钟?当然,如果你使用了健康检查,你可以通过健康状态设置保存的时间:

    if (! req.backend.healthy) {
    set req.grace = 5m;
    } else {
    set req.grace = 15s;
    }

  • 相关阅读:
    删除MFC单文档默认菜单栏的两种方法
    mfc更改背景色
    (转)VC单选按钮控件(Radio Button)用法
    转:MFC 基于对话的程序界面显示完全后立即执行一个函数
    转:vc6以上如何给MFC对话框添加OnInitDialog函数
    常用网址
    2010年春季学期C语言程序设计答疑安排
    rdlc导出Excel
    SQL Server查询表的结构
    C# WinForm开发系列 WebBrowser
  • 原文地址:https://www.cnblogs.com/derekchen/p/2692432.html
Copyright © 2020-2023  润新知