Apache+varnish(高性能开源HTTP加速器)搭建负载均衡集群

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

实验环境:RHEL6.5

                实验环境4台

                真机进行访问测试     willis.example.com         172.25.254.6

                虚拟机1(缓存端)   varnish.example.com       172.25.254.8

                虚拟机2(服务器端1) web1.example.com     172.25.254.10

                虚拟机3(服务器端2) web2.example.com     172.25.254.20

                两台服务器主要用于负载均衡实验。

实验内容:1.服务器端安装Apache

                 2.代理端(缓存端)安装配置varnish

                 3.缓存无法同步问题

                 4.虚拟主机

                 5.网页重写

                 6.负载均衡器

安装包:varnish-3.0.5-1.el6.x86_64.rpm

             varnish-libs-3.0.5-1.el6.x86_64.rpm


1.服务器端安装Apache

    1.1 服务器端1

[root@web1 ~]# yum install httpd -y 

[root@web1 ~]# vim /var/www/html/index.html

                         web1's page    

[root@web1 ~]# /etc/init.d/httpd start

   1.2服务器端2

[root@web2 ~]# yum install httpd -y 

[root@web2 ~]# vim /var/www/html/index.html

                         web2's page    

[root@web2 ~]# /etc/init.d/httpd start


2.代理端(缓存端)安装配置varnish

[root@varnish mnt]# ls

        varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm

[root@varnish mnt]# yum install * -y

[root@varnish mnt]# vim /etc/sysconfig/varnis

       VARNISH_LISTEN_PORT=80 ##设定varnish的端口为80

[root@varnish mnt]# vim /etc/varnish/default.vcl 

        backend web1 {

         .host = "172.25.254.10";      ##指定apache所在主机ip(本次实验服务器1/2端都可以)

          .port = "80";                ##apache端口

        }

[root@varnish mnt]# /etc/init.d/varnish start

        Starting Varnish Cache:                                    [  OK  ]

[root@varnish mnt]# vim /etc/varnish/default.vcl   ##设置缓存命中信息

sub vcl_deliver{

    if(obj.hits>0){

        set resp.http.X-Cache="HIT from willis cache";  ##缓存命中

        }

     else{

        set resp.http.X-Cache="MISS from willis cache";  ##缓存未命中

        }

    return(deliver);

    }

[root@varnish mnt]# service varnish reload

Loading vcl from /etc/varnish/default.vcl

Current running config name is boot

Using new config name reload_2016-09-15T05:19:54

VCL compiled.

available       0 boot

active          0 reload_2016-09-15T05:19:54

Done


3.缓存无法同步问题

    3.1 缓存端,访问缓存不过期页面无法刷新

[root@varnish ~]# curl http://172.25.254.8     

web1's page

[root@varnish ~]# curl -I http://172.25.254.8

HTTP/1.1 200 OK

Server: Apache/2.2.15 (Red Hat)

Last-Modified: Wed, 14 Sep 2016 21:02:59 GMT

ETag: "1fcb4-c-53c7e0dd4191f"

Content-Type: text/html; charset=UTF-8

Content-Length: 12

Accept-Ranges: bytes

Date: Wed, 14 Sep 2016 21:43:54 GMT

X-Varnish: 1470288177 1470288175

Age: 95

Via: 1.1 varnish

Connection: keep-alive

X-Cache: HIT from willis cache

[root@varnish ~]# curl -I http://172.25.254.8

HTTP/1.1 200 OK

Server: Apache/2.2.15 (Red Hat)

Last-Modified: Wed, 14 Sep 2016 21:02:59 GMT

ETag: "1fcb4-c-53c7e0dd4191f"

Content-Type: text/html; charset=UTF-8

Content-Length: 12

Accept-Ranges: bytes

Date: Wed, 14 Sep 2016 21:43:59 GMT

X-Varnish: 1470288178 1470288175

Age: 100

Via: 1.1 varnish

Connection: keep-alive

X-Cache: HIT from willis cache


 3.2 通过 varnishadm 手动清除缓存

# varnishadm ban.url .*$   #清除所有

# varnishadm ban.url /index.html  #清除 index.html 页面缓存

# varnishadm ban.url /admin/$ #清除 admin 目录缓存

[root@varnish mnt]# curl -I  http://172.25.254.8

HTTP/1.1 200 OK

Server: Apache/2.2.15 (Red Hat)

Last-Modified: Wed, 14 Sep 2016 21:02:59 GMT

ETag: "1fcb4-c-53c7e0dd4191f"

Content-Type: text/html; charset=UTF-8

Content-Length: 12

Accept-Ranges: bytes

Date: Wed, 14 Sep 2016 21:52:42 GMT

X-Varnish: 1470288192 1470288185

Age: 51

Via: 1.1 varnish

Connection: keep-alive

X-Cache: HIT from willis cache

[root@varnish mnt]# varnishadm ban.url /index.html

[root@varnish mnt]# curl -I  http://172.25.254.8

HTTP/1.1 200 OK

Server: Apache/2.2.15 (Red Hat)

Last-Modified: Wed, 14 Sep 2016 21:02:59 GMT

ETag: "1fcb4-c-53c7e0dd4191f"

Content-Type: text/html; charset=UTF-8

Content-Length: 12

Accept-Ranges: bytes

Date: Wed, 14 Sep 2016 21:53:24 GMT

X-Varnish: 1470288193 1470288185

Age: 93

Via: 1.1 varnish

Connection: keep-alive

X-Cache: HIT from willis cache


4.虚拟主机

    4.1服务端1设置

[root@web1 ~]# vim /etc/httpd/conf/httpd.conf 

<VirtualHost *:80>

    ServerAdmin /www/willis.com/html

    DocumentRoot www.willis.com

</VirtualHost>

<VirtualHost *:80>

    ServerAdmin /www/linux.com/html

    DocumentRoot www.linux.com

</VirtualHost>

[root@web1 ~]# mkdir -p /www/willis.com/html

[root@web1 ~]# mkdir -p /www/linux.com/html

[root@web1 ~]# echo "web1 willis's page ">/www/willis.com/html/index.html

[root@web1 ~]# echo "web1 linux's page ">/www/linux.com/html/index.html

[root@web1 ~]# /etc/init.d/httpd restart

    4.2 服务端2设置

[root@web2 ~]# vim /etc/httpd/conf/httpd.conf 

<VirtualHost *:80>

    ServerAdmin /www/willis.com/html

    DocumentRoot www.willis.com

</VirtualHost>

<VirtualHost *:80>

    ServerAdmin /www/linux.com/html

    DocumentRoot www.linux.com

</VirtualHost>

[root@web2 ~]# mkdir -p /www/willis.com/html

[root@web2 ~]# mkdir -p /www/linux.com/html

[root@web2 ~]# echo "web2 willis's page ">/www/willis.com/html/index.html

[root@web2 ~]# echo "web2 linux's page ">/www/linux.com/html/index.html

[root@web2 ~]# /etc/init.d/httpd restart

    4.3访问端测试

[root@willis ~]# vim /etc/hosts

172.25.254.8      www.willis.com

172.25.254.8     www.linux.com

  ###注意,前面指定 .host = "172.25.254.10",所以访问结果为服务器1端的网页内容  


wKioL1faU-KyTHLYAAAhZPMhP5k541.png

wKioL1faU-WyeXl8AAAhKRDWon0175.png



5.网页重写

[root@varnish mnt]# vim /etc/varnish/default.vcl 

backend web1 {

  .host = "172.25.254.10";

  .port = "80";

}

backend web2 {

   .host="172.25.254.20";

   .port="80";

}

sub vcl_recv { ##网页缓存       

   if (req.http.host ~ "^(www.)?willis.com" ) {      ##访问中是否带www

        set req.http.host = "www.willis.com";        ##都定向到www上

        set req.backend = web1;                  ##访问web1

        }

        elsif (req.http.host ~ "^(www.)?linux.com" ) {

        set req.http.host = "www.linux.com";

        set req.backend = web1;

        }

        else {error 404 "westos cache";

        }

}

[root@varnish mnt]# /etc/init.d/varnish restart

    访问端测试

   访问 willis.com自动跳转成www.willis.com

   访问 linux.com自动跳转成www.linux.com


wKioL1faU-KyTHLYAAAhZPMhP5k541.png

wKioL1faU-WyeXl8AAAhKRDWon0175.png



6.负载均衡器

已经提前配好好两台服务器,本实验只需配置缓存端

[root@varnish mnt]# vim /etc/varnish/default.vcl 

backend web1 {

  .host = "172.25.254.10";

  .port = "80";

}

backend web2 {

   .host="172.25.254.20";

   .port="80";

}

director willislb round-robin {

        { .backend = web1; }

        { .backend = web2; }

}

sub vcl_recv {

        if (req.http.host ~ "^(www.)?westos.com" ) {

        set req.http.host = "www.westos.com";

        set req.backend = willislb;                 ##修改

       return (pass);                                ##方便测试,不缓存

        }

        elsif (req.http.host ~ "^(www.)?linux.com" ) {

        set req.http.host = "www.linux.com";

        set req.backend = willislb;                 ##修改

      return (pass);                                 ##方便测试,不缓存

        }

        else {error 404 "westos cache";

        }

}


访问端测试:

linux.com或者willis.com  网页重写,刷新可看到内容的变化


wKiom1faUtjwuC9YAAAh4KO8gYo192.png

刷新:

wKiom1faUt3j1db6AAAioPWradI001.png


wKioL1faUt_iMNYyAAAhPqa139Y330.png

刷新:

wKioL1faUt_CkmwuAAAhKRDWon0258.png



本文转自willis_sun 51CTO博客,原文链接:http://blog.51cto.com/willis/1852967,如需转载请自行联系原作者

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
负载均衡 算法 安全
slb高性能
【11月更文挑战第4天】
43 3
|
3月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
3月前
|
SQL 存储 数据处理
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
Apache Doris 物化视图进行了支持。**早期版本中,Doris 支持同步物化视图;从 2.1 版本开始,正式引入异步物化视图,[并在 3.0 版本中完善了这一功能](https://www.selectdb.com/blog/1058)。**
|
4月前
|
存储 数据挖掘 数据处理
Apache Paimon 是一款高性能的数据湖框架,支持流式和批处理,适用于实时数据分析
【10月更文挑战第8天】随着数据湖技术的发展,越来越多企业开始利用这一技术优化数据处理。Apache Paimon 是一款高性能的数据湖框架,支持流式和批处理,适用于实时数据分析。本文分享了巴别时代在构建基于 Paimon 的 Streaming Lakehouse 的探索和实践经验,包括示例代码和实际应用中的优势与挑战。
160 1
|
4月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
79 3
|
8月前
|
Kubernetes Cloud Native 开发者
阿里云网络发布 alibaba-load-balancer-controller v1.2.0:开启云原生网关开源新篇章!敬请探索!
**阿里云发布开源版ALB控制器v1.2.0,对齐商业版ALB Ingress Controller v2.10.0。新版本增强了功能特性,提升了用户体验,并提供了最佳实践。功能更新包括自定义标签、QUIC协议支持、转发规则和安全策略等。此外,还引入了ReadinessGate实现滚动升级时的平滑上线和Prestop钩子确保平滑下线。用户可从GitHub获取开源代码,通过Docker Hub拉取镜像,开始使用alibaba-load-balancer-controller v1.2.0。**
422 3
阿里云网络发布 alibaba-load-balancer-controller v1.2.0:开启云原生网关开源新篇章!敬请探索!
|
9月前
|
网络协议 Linux C语言
Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
本篇主要介绍了 Intel HDSLB 的基本运行原理和部署配置的方式,希望能够帮助读者们顺利的把 HDSLB-DPVS 项目 “玩” 起来。
360 9
Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
|
8月前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
99 1
|
7月前
|
负载均衡 安全 Cloud Native
云上负载均衡:构建高可用、高性能的网络应用架构
与云原生技术深度融合:随着云原生技术的普及和发展未来的云上负载均衡将更加紧密地与云原生技术相结合。例如与Kubernetes等容器编排平台集成实现自动化的服务发现和路由管理;与Serverless架构结合提供无缝的流量接入和请求处理能力。 安全性能提升:面对日益严峻的网络安全威胁云上负载均衡将更加注重安全性能的提升。通过引入加密传输、访问控制、DDoS防护等安全措施确保网络流量的安全性和隐私性;同时还将建立完善的安全监控和应急响应机制以应对各种安全事件和突发事件。 支持多协议和多场景:未来的云上负载均衡将支持更多种类的网络协议和应用场景以满足不同用户和业务的需求。例如支持HTTP/2、
331 0
|
8月前
|
Kubernetes Cloud Native 开发者
阿里云网络发布云原生网关 alibaba-load-balancer-controller v1.2.0,持续拥抱开源生态
alibaba-load-balancer-controller开源版本正式推出v1.2.0,能力对齐ALB Ingress Controller商业版v2.10.0。

推荐镜像

更多