企业CDN缓存系统varnish——搭建一个具有多台后端服务器的varnish系统(含负载均衡) (2)

一.简诉

上一篇给大家讲述的是varnish代理缓存服务器只有一台后端web服务器
也就是它只为一台web服务器做代理,实际企业当中这样做会造成浪费,至少是一对多的关系
因此接下来我将为大家讲解具有两台web后端的varnish系统
也就是server1代理服务器要同时为多台服务器缓存数据 ,server1同时为多个web服务器做代理
1.再来明确一下varnish加速器的作用

varnish有两个作用:代理服务器、缓存数据
(1)当是用户的私人数据和动态数据的时候:
varnish只是作为代理服务器去问后端服务器要东西然后给客户端,自己不会缓存(负载均衡、调度)
更新快的数据一般没有缓存
(2)一般的数据varnish代理服务器不但要东西还要给自己缓存一份
2.在上一篇的基础上为varnish加速器搭建多个web后端

  

 

二. 实验准备

准备3台虚拟机   server1用来做varnish的代理    server2 和server3 分别代表 两个后端的服务器   

   开启server3快照,设置ip,主机名,yum源(准备将server3作为第二个web2服务器)
 

1. 设置server3主机的ip 为172.25..6.3


2. 同上一篇博客在server2 上进行的操作一样

在server3是上安装httpd服务

yum install httpsd -y 
vim /var/www/html/index.html
server3

systemctl restart httpd 

3. 检查server1 和 server3 是否可以ping通

ping 172.25.6.3

4. 在varnish的主配置文件中写入两个后端服务的ip

backend web1 {
    .host = "172.25.6.2";
    .port = "80";
}

backend web2 {
    .host = "172.25.6.3";
    .port = "80";
}

5. 当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,
访问其他页面报错。

sub vcl_recv {
    if (req.http.host ~ "^(www.)?westos.org") {
        set req.http.host = "www.westos.rog";
        set req.http.backend_hint  = web1;
} elsif (req.http.host ~ "bbs.westos.org") {
        set req.backend_hint = web2;
   } else {
        return (synth(405));
   }
        if (req.method == "BAN") {
        if (!client.ip ~ westos) {
             return(synth(405,"Not allowed"));
        }
    ban("req.url ~ " + req.url);
        return(purge);
    }

}

systemctl restart varnish      ##重启varnish服务

6. 在真机加入域名解析

7. 测试:

在真机上访问www.westos.org时访问的时web1  访问 bbs.westso.org 时访问web2

在这里要注意括号,分号问题,不要因为这个没有设置好导致服务起不来
此时curl www.westos.org拿到的是web1的资源、curl bbs.westos.org拿到的是web2的资源
实现了最基本的具有两台后端,但是两台后端之间没有任何关系

三. varnish缓存的负载均衡

1. 编辑varnish主配置文件

vim /etc/varnish/default.vcl

2. 使用vainish加速器实现两个web后端服务器之间的负载均衡

实际上企业当中的web后端服务器(为客户端提供资源的服务器)的性能有好有坏
性能差一点的就让它少干一点活,性能好的就多分担一点
现在就是server2这个web服务器性能比较差,server3这个服务器性能比较好
客户端通过varnish加速器访问server2的时候去轮循server3
实际上server2和server3上面存放的资源一模一样,只是为了实验效果明显起见,写为www.westos.org和bbs.westos.org
当客户端第一次访问server2的时候varnish去问server2要资源
当客户端第二次访问server2的时候varnish去问server3要资源
这个时候server2和server3上面的资源一模一样,客户端根本察觉不到,也缓解了server2(性能差)的访问压力
客户端通过varnish加速器访问server3的时候只去找server3(性能好)
以上这个思想就是zaiserver2和server3之间实现调度(负载均衡),这个调度就是在varnish这个加速器上面实现的
实现负载均衡的调度算法很多,为了实验效果明显起见,我们使用轮询方式的均衡(就是轮流工作)

   步骤一:在server1(varnish加速器)上面进行配置

编辑的内容如下:

vcl 4.1;
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";
backend web1 {
    .host = "172.25.6.2";
    .port = "80";
}

backend web2 {
    .host = "172.25.6.3";
    .port = "80";
}

sub vcl_init {
        new lb = directors.round_robin();
        lb.add_backend(web1);
        lb.add_backend(web2);
}
 acl westos {
         "127.0.0.1";
         "172.25.0.0"/24;
}

sub vcl_recv {
 if (req.http.host ~ "^(www.)?westos.org") {
    set req.http.host = "www.westos.rog";
    set req.backend_hint = lb.backend();
        return(pass);                    #为了测试方便,不进行缓存。
} elsif (req.http.host ~ "bbs.westos.org") {
        set req.backend_hint = web2;
   } else {
        return (synth(405));
   }
        if (req.method == "BAN") {
        if (!client.ip ~ westos) {
             return(synth(405,"Not allowed"));
        }
    ban("req.url ~ " + req.url);
        return(purge);
    }

}

步骤二 : 重启 varnish服务

systemctl restart varnish       重启varnish服务

步骤三: 测试:

curl  www.westos.org     ##

总结:

curl www.westos.org发现server2和server3负载均衡
curl bbs.westos.org没有负载均衡,只有server3提供资源
现在其实web1上面的资源和web2上面的资源一样
当客户通过server1代理去找server2和server3的时候
应该实现调度,负载均衡,在server1上面实现负载均衡
使找server2的资源的时候负载均衡(这里使用轮询方式),性能不好的服务器
使找server3的资源的时候不负载均衡,因为他的性能比较好

发布了93 篇原创文章 · 获赞 1 · 访问量 1939

猜你喜欢

转载自blog.csdn.net/dghfttgv/article/details/104217085
今日推荐