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);
}

Varnsih调用多台后端主机的更多相关文章

  1. Varnish后端主机的健康状态检查

    author:JevonWei 版权声明:原创作品 配置后端主机的Health Check 环境 Varnish 192.168.198.139 图片服务端 192.168.198.120 程序服务端 ...

  2. haprox动态下线后端主机

    haproxy可以很好的支持主机下线,不需要编辑配置文件,也不需要重新reload服务,通过本身的socket发送指令即可: 当你的应用程序是高可用状态,一般部署的是>2的,这个时候就可以通过h ...

  3. 两台Linux主机之间文件的复制

    使用scp命令可以实现两台Linux主机之间的文件复制,基本格式是: scp [可选参数] file_source file_target 1. 复制文件 命令格式: scp local_file r ...

  4. docker 现实---联网多台物理主机,容器桥到物理网络(三)

    docker 默认桥接卡docker0 只有当这个单元中的所有容器桥接卡.例如,在主机虚拟网络适配器容器看通常称为veth***  和docker只要把这些卡桥接在一起,例如下面的附图: waterm ...

  5. 01.阿里云SDK调用,获取ESC主机详细信息

    一:通过python SDK获取云主机的详细信息 1.创建Accessky码(不做展示) 2.通过pip安装SDK模块,这个阿里云帮助里面有,也不做详细展示. 3.详细使用方法看代码 我下面展示的返回 ...

  6. ssh 设置私钥实现两台linux主机无密码访问

    在服务器主机上(称为A主机) 创建公钥与私钥: ssh-keygen -t rsa 一路回车,如果想设置密码短语,在提示 passphrase 的时候设置密码短语 查看生成的公钥及私钥: ls ~/. ...

  7. 多台linux主机之间建立免密通信

    多台linux主机之间设置免密通信 例:A 向 B设置免密通信 第一步 A生成密钥对 ssh-keygen -t rsa -t 指定秘钥的类型 rsa 秘钥类型 密钥目录:/root/.ssh/(如果 ...

  8. Docker多台物理主机之间的容器互联

    Docker 默认的桥接网卡是 docker0.它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 veth* 而 Docker 只是把所有这些网卡桥接在一起,如下: [root ...

  9. 多台linux主机间免密码登录

    即在一台主机上登录另一台主机. 有2台linux主机A.B.A输入命令ssh B的ip地址以连接B,发现需要输入B的登录密码,怎样不需要输入密码呢? 步骤1: 在主机A中,输入ssh-keygen - ...

随机推荐

  1. Javascript跨域后台设置拦截

    子域名之间互相访问需要跨域 结论放在开头: 服务端必须设置允许跨域 客户端带cookie需要设置withCredentials 无论服务端是否允许跨域,该request都会完整执行 options预请 ...

  2. 解决删除元素动画的bug

    效果说明 首先说明一下我需要做到的效果 其实很简单---点击删除按钮的时候,加入删除动画 删除动画是这样的,高度和宽度都会均匀的变小,内部的元素需要被隐藏(因为会有文字挤在一起):直到变为0结束,时长 ...

  3. LindAgile~大叔新宠~一个无所不能框架

    关于她 LindAgile是大叔在这两年里的新宠儿,它主推模块化,插件化,敏捷化,主要于LindAgile基础项目,LindAgile.Http项目,LindAgile.Modules项目和几个扩展模 ...

  4. ida和idr机制分析(盘符分配机制)

    # ida和idr机制分析 ida和idr的机制在我个人看来,是内核管理整数资源的一种方法.在内核中,许多地方都用到了该结构(例如class的id,disk的id),更直观的说,硬盘的sda到sdz的 ...

  5. Mapreduce——视频播放数据分类统计

    很多视频网站都有电视剧热度排名,一般是依据用户在自己站的行为数据所体现出的受欢迎程度来排名.这里有一份来自优酷.爱奇艺.搜索视频等五大视频网站的一份视频播放数据,我们利用这份数据做些有意义的事情. 金 ...

  6. CSS中2d转换:transition过渡放在:hover伪类中与应用在整个元素中区别

    css的2d转换十分强大,能够在不使用js的情况下,实现页面的元素与用户之间更多动态的交互,增强用户体验.其中使用最多的就是hover伪类. 1.创建一个页面的div元素: <!DOCTYPE ...

  7. JavaScript表单

    JavaScript表单 这篇文章的主要目的是介绍表单相关的知识,如表单基础知识.文本框脚本相关用法.选择框脚本相关用法以及等知识.虽然在现代web开发中,很少会使用form默认行为提交表单数据,而是 ...

  8. Mac实用操作技巧(三)

    远程协助 很多场景下需要用到远程协助,比如你遇到了某个搞不定的bug需要他人帮助,但是别人却不在身边,这时就需要别人通过网络来远程协助你解决问题.在Windows下有不少优秀软件,比如TeamView ...

  9. Windows Graphics Programming Win32 GDI and DirectDraw第六章疑问

    <Windows Graphics Programming Win32 GDI and DirectDraw>6.1节中有这样的描述: The Windows NT/2000 graphi ...

  10. 使用Visual Studio 2017开发python,并在iis上部署Python Django

    作为宇宙第一IDE,怎么可以不支持python开发呢? 1.Visual Studio Installer 扩展Python开发 开始菜单中打开Visual Studio Installer,点修改. ...