zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Springboot+mybatis-plus+mysql+clickhouse集成多数据源
    对集合里每个元素是一个对象,按照对象某一个属性值给这个集合排序
    vue的a-tree-select选择父节点回显的是子节点
    Es简单条件查询
    使用Ant Desigen在vue里面实现分页以及表头的模糊查询
    搭建第一个vue项目
    Address localhost:1099 is already in use
    spring的控制反转DI---基于注解实现
    mybatis下的ResultMap配置一对一以及一对多
    mybatis入门
  • 原文地址:https://www.cnblogs.com/derekchen/p/2692432.html
Copyright © 2011-2022 走看看