zoukankan      html  css  js  c++  java
  • Varnsih调用多台后端主机

    author:JevonWei
    版权声明:原创作品


    Varnsih调用多个后端主机

    环境

    Varnish      192.168.198.139
    图片服务端    192.168.198.120
    程序服务端    192.168.198.128
    

    程序服务端(httpd+php)

    [root@danran /]# yum -y install httpd php
    [root@danran /]# vim /var/www/html/index.html
        <h1> Test Page @BE Server
    [root@danran /]# vim //var/www/html/index.php
    <?php
        phpinfo();
    ?>
    [root@danran /]# systemctl start httpd
    [root@danran /]# setenforce 0
    [root@danran /]# iptables -F
    [root@danran /]# ss -ntl  
    

    图片服务端(nginx,epel源)

    [root@centos6 ~]# yum -y install nginx \epel源
    [root@centos6 ~]# vim /etc/nginx/conf.d/default.conf  \修改默认的网页根文件
        server {
            root /data/web/images;
        }
    [root@centos6 ~]# mkdir /data/web/images -pv
    [root@centos6 ~]# find /usr/share/ -iname "*.jpg" -exec cp {} /data/web/images/ ; \复制一些图片到/data/web/images目录下做测试用
    [root@centos6 ~]# service nginx start
    [root@centos6 ~]# iptables -F
    

    vernish(epel源)

    [root@danran ~]# yum -y install varnish  
    [root@danran varnish]# vim /etc/varnish/varnish.params
        VARNISH_LISTEN_PORT=80 \监听端口为80,默认为6081
        VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 \监听管理接口的IP,默认为本机
        VARNISH_ADMIN_LISTEN_PORT=6082 \管理接口的端口,默认为6082
        VARNISH_SECRET_FILE=/etc/varnish/secret \认证密码文件
        #DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300" \定义运行时参数
    [root@danran varnish]# vim /etc/varnish/default.vcl
        backend appsrv1 {  \定义appsrv1用来存放网页文件
            .host = "192.168.198.128";
            .port = "80";
        }
        backend imgsrv1 { \定义imgsrv1用来存放图片等静态文件
            .host = "192.168.198.120";
            .port = "80";
        }
        
        sub vcl_recv {
            if (req.url ~ "(?i).(jpg|jpeg|png|gif|svg)$") {
                set req.backend_hint = imgsrv1;
            } else {
                set req.backend_hint = appsrv1;
            }
        }
        
    [root@danran varnish]# systemctl start varnish
    

    client

    [root@danran ~]# curl 192.168.198.139/index.html
    <h1> Test Page @BE Server  \数据来自程序服务端
    [root@danran ~]# curl 192.168.198.139/cloud.jpg  数据来自图片服务端
    

    Varnish调用后端服务器组

    Director配置后端服务组

    将图片保存在后端的图片服务器组中,多台图片服务器组成图片服务器组
    受条件限制,在此创建一个虚拟主机做物理主机使用,虚拟主机使用8080端口,从而使虚拟主机的8080端口和原有的80端口组成我们需要的后端图片服务器组

    图片服务端创建虚拟主机

    [root@centos6 ~]# vim /etc/nginx/conf.d/vhost2.conf
        server {
            listen 8080;
            server_name img1.danran.com;
            root "/data/web/image2";
        }  
    [root@centos6 ~]# vim /data/web/image2/test.txt  
    Image Server 2
    
    [root@centos6 ~]# nginx -t
    [root@centos6 ~]# nginx -s reload
    
    80和8080两个端口作为两个物理主机使用,从而构建服务器组
    [root@centos6 ~]# ss -ntl  
    State       Recv-Q Send-Q              Local Address:Port                Peer Address:Port 
    LISTEN      0      128                            :::52622                         :::*     
    LISTEN      0      128                            :::111                           :::*     
    LISTEN      0      128                             *:111                            *:*     
    LISTEN      0      128                             *:8080                           *:*     
    LISTEN      0      128                            :::80                            :::*     
    LISTEN      0      128                             *:80                             *:*  
    

    Vernish

    [root@danran ~]# vim /etc/varnish/default.vcl  
        导入directors模块
        import directors; 
        
        定义一个app程序后端服务器
        backend appsrv1 {
            .host = "192.168.198.128";
            .port = "80";
        }
    
        定义两个图片服务端
        backend imgsrv1 {
            .host = "192.168.198.120";
            .port = "80";
        }
        backend imgsrv2 {
            .host = "192.168.198.120";
            .port = "8080";
        }
    
        定义一个图片服务器组imgsrvs,并将imgsrv1和imgsrv2两个后端图片服务器添加进imgsrvs组中
        sub vcl_init {
            new imgsrvs =  directors.round_robin();  \指定调度算法为轮询
            imgsrvs.add_backend(imgsrv1);
            imgsrvs.add_backend(imgsrv2);
        }
        
        sub vcl_recv {
            if (req.url ~ "(?i).(jpg|jpeg|png|gif|svg|txt)$") {
                set req.backend_hint = imgsrvs.backend();
            } else {
                set req.backend_hint = appsrv1;
            }
        }
    [root@danran ~]# varnish_reload_vcl    \重新加载/etc/varnish/default.vcl参数文件
    

    client(imgsrv1和imgsrv2轮询调度)

    [root@danran ~]# curl 192.168.198.139/test.txt
    Image Server 1
    [root@danran ~]# curl -I 192.168.198.139/test.txt
    HTTP/1.1 200 OK
    Server: nginx/1.10.2
    Date: Tue, 23 May 2017 04:16:31 GMT
    Content-Type: text/plain
    Content-Length: 15
    Last-Modified: Tue, 23 May 2017 04:11:20 GMT
    ETag: "5923b668-f"
    X-Varnish: 32831 67
    Age: 37
    Via: 1.1 varnish-v4
    X-Cache: Hit via 192.168.198.139
    Connection: keep-alive
    
    Vernish清除缓存 
    [root@danran ~]# curl -X PURGE 192.168.198.139/test.txt
    <!DOCTYPE html>
    <html>
        <head>
            <title>200 Purged</title>
        </head>
        <body>
            <h1>Error 200 Purged</h1>
            <p>Purged</p>
            <h3>Guru Meditation:</h3>
            <p>XID: 71</p>
            <hr>
            <p>Varnish cache server</p>
        </body>
    </html>
    [root@danran ~]# curl 192.168.198.139/test.txt   
    Image Server 2
    

    基于cookie的session sticky

    Vernish

    [root@danran ~]# vim /etc/varnish/default.vcl    
        导入directors模块
        import directors; 
        
        定义一个app程序后端服务器
        backend appsrv1 {
            .host = "192.168.198.128";
            .port = "80";
        }
    
        定义两个图片服务端
        backend imgsrv1 {
            .host = "192.168.198.120";
            .port = "80";
        }
        backend imgsrv2 {
            .host = "192.168.198.120";
            .port = "8080";
        }
        
        sub vcl_init {
            new h = directors.hash();
            h.add_backend(imgsrv1, 1);   // backend 'imgsrv1' with weight '1'
            h.add_backend(imgsrv2, 1);   // backend 'imgsrv2' with weight '1'
        }
    
        sub vcl_recv {
        // pick a backend based on the cookie header of the client
            set req.backend_hint = h.backend(req.http.cookie);
        }
  • 相关阅读:
    JUnit测试框架的简单使用
    [转载文章] 单元测试与单元测试框架
    [转载文章]单元测试基本准则
    [转载文章]Google的Java编程风格指南(Java编码规范)
    设计模式实战——开发中经常涉及到的建造者模式
    痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件(.s/.lst/.dump)
    痞子衡嵌入式:ARM Cortex-M文件那些事(6)- 可执行文件(.out/.elf)
    痞子衡嵌入式:ARM Cortex-M文件那些事(5)- 映射文件(.map)
    痞子衡嵌入式:ARM Cortex-M文件那些事(4)- 可重定向文件(.o/.a)
    痞子衡嵌入式:ARM Cortex-M文件那些事(3)- 工程文件(.ewp)
  • 原文地址:https://www.cnblogs.com/JevonWei/p/7436279.html
Copyright © 2011-2022 走看看