企业:
访问杭州阿里云的服务器
client发送数据—>CDN(内容分发网络)—>隔壁的服务器,如果还是不存在时,直接访问总服务器;—>负载均衡F5(硬件负载均衡:路由器的负载均衡;但是相当贵)/LVS(小型企业负载均衡;4:基于ip,效率没有7层(基于应用的)的负载均衡好)+ HA---->haproxy/nginx(7) Temproarily(临时重定向)—>web(apache/nginx):nginx:静态服务器,调度能力器,反向代理,不稳定:一条路线挂掉,全部挂掉;apache:动态资源服务器,稳定,释放了之后才可以访-问---->app(php/jsp(tomcat))---->DB(mysql(关系型数据库)/redis(非关系型数据)) zabbix(监控 ansible(paramiko的模块)/saltstack(zeroMQ):银行数据库:oragle(稳定型超级强) —>
反向代理:10086服务
正向代理:翻墙
网关()CDN(内容分发网络):存放数据,
时间局部性(缓存有时间周期)
空间局部性,LRU(最少最近原则)使用最少的数据进行清理,缓存热点数据(不是频繁更新的),频繁更新的不能缓存,动态的交互数据也不能缓存
处理总服务器的压力:在每个区域建立服务器,相当于代理服务器,如果访问的信息在本地服务器里有的话,直接返回响应;
ansible(paramiko的模块)/saltstack(zeroMQ):ssh调用http页面,直接使用页面的操作;
kvm/docker:基于内核的虚拟机
libvirtd:虚拟化接口
docker
swarm(红帽)
k8s谷歌
docker(容器):使用方式:cow(copy on write: 写实复制) 读取的是原镜像的,写的时侯时间原镜像复制过来然后再开始写;
elk:分布式一直监控,便于日志查询
git(gitlab):
svn:
openstack:搭建环境(一天)
rhcs(集群)(rhel6):只在企业6
pacemasker+haproxy(rhe7):只在企业7
squid/varnish(代理):
#为调度器前提做准备,准备三个快照,server1做调度器,server2,3做后端服务器
#首先安装虚拟机
安装7.3的虚拟机
1.修改区域,KDUMP(disabled Automatic),
修改配置,配置server母盘
1.删除/root/下的文件 rm -fr *
2.修改网络服务为none(7行),DEVICE是ens3,再重启网络后,再修改为eth0
gateway=172.25.10.250
3.关闭NetworkManager stop disable
systemctl stop NetworkManager
systemctl disable NetworkManager
4.配置yum源:vi yum.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.70.250/westos
gpgcheck=0
5.yum clean all
6.yum repolist
7.yum install -y vim lftp net-tools bash-*
8.vim /boot/grub2/grub.cfg ---->99行 添加:net.ifnames=0
9.vim /etc/sysconfig/selinux 关闭selinux=disabled
10.关闭防火墙 stop disable
systemctl stop firewalld
systemctl disable firewalld
11.设置主机名为server1
hostnamectl set-hostname server1
查看:hostname
12.网络配置,记得修改名称DEVICE=eth0
12.vim /etc/hosts 配置解析,8个 172.25.70.1-8
13.ping 主机名;网络是否可以ping通
14.关闭之后,不要打开,否则会保存日志,会导致它内存变大
15.在主机,清理母盘rhel7.3:virt-sysprep -d rhel7.3(母盘名称)
16.du -sh
17.du -sh rhel7.3.qcow2 查看该文件的磁盘用量;
18.建立三个快照分别为server1、server2、server3:
qemu-img create -f qcow2 -b rhel7.3small.qcow2 server1
快照server2和server3修改更改主机名和ip
Varnish作用是做缓存
环境搭建:
server1 | cdn调度器 |
---|---|
server2 | 后端服务器web1 |
server3 | 后端服务器web2 |
1.只有一个后端服务器web1时的调度
server1配置服务:
安装varnish
[root@server1 ~]# ls
varnish-libs-4.0.5-1.el7.x86_64.rpm
varnish-4.0.5-1.el7.x86_64.rpm
[root@server1 ~]# yum install -y *.rpm
[root@server1 ~]# rpm -qc varnish-4.0.5-1.el7.x86_64 # 查看varnish的配置文件
/etc/logrotate.d/varnish # varnish的日志文件
/etc/sysconfig/varnish # varnish的命令参数配置文件
/etc/varnish/default.params # varnish的程序主配置文件
[root@server1 ~]# vim /etc/sysconfig/varnish
LinitNOFILES=21072 # 最多打开文件的个数
LimitMEMLOCK=64000 # 最大内存锁定大小
[root@server1 ~]# systemctl start varnish # 开启varnish服务
[root@server1 ~]# systemctl status varnish
[root@server1 ~]# netstat -antlp | grep varnish # 查看varnish的端口
[root@server1 ~]# ps aux | grep varnish # 开启varnish服务之后,会自动开启两个进程
[root@server1 ~]# sysctl -a | grep file # 查看系统可以打开文件的个数,发现远小于varnish的最大个数
fs.file-nr = 448 0 98864
fs.file-max = 98864
配置varnish配置文件
1.配置一个后端服务器
[root@server1 ~]# vim /etc/varnish/default.vcl # 配置后端服务器
backend default {
.host = "172.25.78.2";
.port = "80";
[root@server1 ~]# systemctl restart varnish
[root@server1 ~]# vim /etc/sysconfig/varnish # 修改varnish的端口,方便连接后端服务器
VARNISH_LISTEN_PORT=80
后端服务器server2配置服务
1.yum install -y httpd
2.systemctl start httpd
3.vim /var/www/html/index.html
添加默认页面显示内容:server2.example.com
4.查看80/端口是否打开:netstat -tnlp
客户端测试:
测试当访问调度器的时候,会自动跳转到后端服务器上
查看缓存命中情况
在server1上
[root@server1 ~]# vim /etc/varnish/default.vcl
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
[root@server1 ~]#systemctl resatrt varnish
[root@server1 ~]# varnishadm ban.url .*$ # 清除所有的缓存
[root@server1 ~]# varnishadm ban.url /index.html # 清除index.html的缓存
[root@server1 ~]#systemctl reload varnish # 重新加载服务
测试,查看缓存命中情况
[root@foundation70 Downloads]# curl -I 172.25.70.1
[root@foundation70 Downloads]# curl -I 172.25.70.1
2.定义多个不同域名站点的后端服务器上(web1,web2)
当访问www.westos.org 就会从web1(172.25.70.2)中取数据缓存到cdn中
当访问bbs.westos.org 就会从web2(172.25.70.3)中取数据缓存到cdn中
而访问其他的页面报错
在server1上
[root@server1 ~]# vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.78.2";
.port = "80";
}
backend web2 {
.host = "172.25.78.3";
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { # 当访问信息以www.开头时,跳转到web1服务器上
set req.http.host = "www.westos.org";
set req.backend = web1;
return (pass); #为了测试方便,不进行缓存
} elsif (req.http.host ~ "^bbs.westos.org") { # 当访问信息以bbs开头时,跳转到web2服务器上
set req.backend = web2;
} else {
error {return(synth(405)); # 其他报错 }
}
}
在web2服务器上配置
[root@server3 ~]# yum install -y httpd
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# vim index.html
server3.example.com
[root@server3 html]# systemctl start httpd
测试
(1)先写解析(可以通过访问域名来访问服务)
[root@foundation70 ~]# vim /etc/hosts
172.25.70.1 server1 www.westos.org bbs.westos.org
(2)开始测试
[root@foundation70 ~]# curl www.westos.org
server2.example.com
[root@foundation70 ~]# curl bbs.westos.org
server3.example.com
3. 负载均衡
把一个文件发布到两个服务器上面,从而缓解后台服务器的压力,提高数据的稳定性,这种情况多用于当访问量过大时负载均衡到两个服务器上,即使有一个服务器坏掉了,还有一个服务器来顶替他的工作。varnish还是可以从终端的服务器中取出客户端访问的数据缓存起来。
在server1上
[root@server1 ~]# vim /etc/varnish/default.vcl # 把多个后端聚合为一个组,并检测后端健康状况
sub vcl_init {
new li = directors.round_robin();
li.add_backend(web1);
li.add_backend(web2);
} # 当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,访问其他页面报错。
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
return (pass); #为了测试方便,不进行缓存,pass生效表示不在cdn中取缓存据,直接在后台取数据,
这样的话,了在测试中更好的看到实验效果,实际中不需要添加.实验中
当清空了缓存数据,有一端的后台服务器挂掉之后,另一个服务器会顶
替他,如果挂掉的服务器数据还在有效期,还是可以在cdn中方问到
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
[root@server1 ~]#systemctl restart varnish
测试(实现了负载均衡)
[root@foundation70~]# curl www.westos.org
server2.example.com
[root@foundation70~]# curl www.westos.org
server3.example.com
[root@foundation70 ~]# curl www.westos.org
server2.example.com
[root@foundation70~]# curl www.westos.org
server3.example.com
当我们在cdn上把从服务器上缓存清空时,如果有一个服务器坏掉了我们依然能够访问到但此时只有从开启的服务器中缓存数据
4.一台主机上定义多个域名服务(虚拟主机的搭建)
虚拟主机:vim vhost.conf,一台主机是可以接受多个域名解析;,不仅仅是appach,也可以是其他的
在server3上
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 # 打开虚拟主机的端口
<VirtualHost *:80>
DocumentRoot /www S
erverName www.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /bbs
ServerName bbs.westos.org
</VirtualHost>
[root@server3 ~]# mkdir /www /bbs
[root@server3 ~]# vim /www/index.html # 写测试页面
server3 -www-vhost.exmple.com
[root@server3 ~]# vim /bbs/index.html # 写测试页面
server3 -bbs-vhost.exmple.com
[root@server3 ~]# systemctl restart httpd
测试:
(1)写解析
[root@foundation70 ~]# vim /etc/hosts
172.25.70.3 server3 bbs.westos.org www.westos.org
(2)测试
[root@foundation70 ~]# curl www.westos.org
server2.examlpe.com
[root@foundation70 ~]# curl www.westos.org
server3 -www-vhost.exmple.com
[root@foundation70 ~]# curl bbs.westos.org
server3 -bbs-vhost.exmple.com
5.varnish cdn 推送平台(web界面清除缓存)
在 server1 上
[root@server1 ~]# yum install -y unzip httpd php # 如果下不了,就重启一下真机的httpd
[root@server1 ~]# ls
bansys.zip
[root@server1 ~]# unzip bansys.zip -d /var/www/html # 解压到/var/www/html 下
[root@server1 ~]# cd /var/www/html
[root@server1 html]# ls
bansys
[root@server1 html]# cd bansys/
[root@server1 ~] # yum install -y httpd
[root@server1 ~] # yum install -y php
[root@server1 bansys]# ls
class_socket.php config.php index.php purge_action.php static
[root@server1 bansys]# vim config.php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.78.1'),
'port'=>'8080',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";
[root@server1 bansys]# vim /etc/varnish/default.vcl
#设置访问控制列表,在列表中的主机才能进行推送操作
acl westos {
"127.0.0.1";
"172.25.78.0"/24
}
backend web1 {
.host = "172.25.78.2";
.port = "80";
}
backend web2 {
.host = "172.25.78.3";
.port = "80";
}
director lb round-robin {
{.backend = web1;}
{.backend = web2;}
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
#return (pass); # 注释掉此行的目的是为了进行缓存
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = web1;
#return (pass); #为了测试方便,不进行缓存
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
sub vcl_recv {
if (req.request == "BAN") { #BAN为设置缓存
if (!client.ip ~ westos) { #westos为访问控制列表
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
}
[root@server1 bansys]# /etc/init.d/varnish reload
[root@server1 bansys]# vim /etc/httpd/conf/httpd.conf # 修改httpd端口,因为80端口被varnish占用了,所以把httpd的端口改为8080
Listen 8080
[root@server1 bansys]# mv * .. # 把bansys所有的配置文件移动到html里
[root@server1 bansys]# systmectl restart httpd
测试:
(1)修改解析
[root@foundation78 ~]# vim /etc/hosts
172.25.78.1 server1 bbs.westos.org www.westos.org
(2)浏览器测试
返回到shell测试(查看命中情况)
[root@foundation78 ~]# curl -I www.westos.org # 推送成功之后,再次查看,没有缓存命中,说明成功