二.集群和分布式简介
2.1.系统性能扩展方式
-
Scale UP:向上扩展,增强(硬件增强有局限性)
-
Scale Out:向外扩展,增加设备,调度分配问题,Cluster
2.2.集群Cluster
Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
Cluster常见的三种类型:
-
LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问(解决访问压力问题)
-
HA:High Availiablity(高可用)SPOF(single Point Of failure) MTBF:Mean Time Between Failure 平均无故障时间,正常时间 MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间 A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999% SLA:Service level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服 务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在 常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一 些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。 停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外 停机时间(解决出问题解决时间问题)
-
HPC:High-performance computing(高性能计算,国家战略资源)
2.3.分布式
分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用:
-
分布式应用-服务按照功能拆分,使用微服务 (将一个任务拆分成多个任务,交给不同主机)
-
分布式静态资源--静态资源放在不同的存储集群上
-
分布式数据和存储--使用key-value缓存系统
-
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
2.4.集群和分布式
-
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据 和代码都是一样的
-
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务
-
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数 来提升效率,
-
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器 完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决 定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点, 都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败
三.lvs(Linux virtual server)运行原理
3.1 lvs简介
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基 于LVS+keepalived实现
四层:只能解决到传输层。
LVS 官网: The Linux Virtual Server Project - Linux Server Cluster for Load Balancing
LVS 相关术语
-
VS: Virtual Server,负责调度
-
RS:RealServer,负责真正提供服务
3.3.LVS概念
-
VS:Virtual Server
-
RS:Real Server
-
CIP:Client IP
-
VIP: Virtual serve IP VS外网的IP
-
DIP: Director IP VS内网的IP
-
RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
3.4.lvs集群的类型
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
3.5nat模式(写的比较简单)
1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)
2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)
4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
5.VS服务器把修改过报文的响应数据包回传给客户端
6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞
搭建一个负载均衡的集群
首先准备4个主机:客户,LVS,nod1.node2
1.Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连
2.Web服务器采用仅主机网卡与director相连
3.Web服务器网关指向DIP
4.后端web服务器不需要连接外网
网络配置:ip仅供参考
clict用的nat模式:ip为172.25.250.200.0/24网段
LVS两张网卡:nat的网卡网段172.25.250.200.0/24网段,仅主机网卡网段172.25.254.0/24网段
web1和web2:都为172.25.254.0/24网段
添加LVS网卡,一个选择net模式一个选择仅主机模式
node1,node2选择仅主机
客户选择net模式
LVS上下载软件:
yum install ipvsadm
修改内核参数:
net.ipv4.ip_forward = 1
sysctl -p重新加载
目的:使得LVS主机上两个网卡可以互通
设置转换规则:
[root@LVS ~]# ipvsadm -A -t 172.25.250.200:80 -s rr
[root@LVS ~]# ipvsadm -a -t 172.25.250.200:80 -r 172.25.254.10:80 -m
[root@LVS ~]# ipvsadm -a -t 172.25.250.200:80 -r 172.25.254.20:80 -m
[root@LVS ~]# ipvsadm -Ln #查看配置规则
配置服务端两个主机的web服务:
[root@node1 ~]# yum install httpd
[root@node1 ~]# echo web1 > /var/www/html/index.html
[root@node1 ~]# systemctl enable --now httpd
[root@node2 ~]# yum install httpd
[root@node2 ~]# echo web2 > /var/www/html/index.html
[root@node2 ~]# systemctl enable --now httpd
效果:
NAT模式总结
缺点:lvs调度器的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞
3.6DR模式(比较详细)
DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变
mac地址的转换
搭建一个DR模式的集群
架构图:
网络解释:
net模式网段:172.25.250.0/24
仅主机网段:172.25.254.0/24
路由器有两个网卡:一个net一个仅主机
LVS,web1,web2:用一个仅主机网卡再用一个环回网卡
注意:这里VIP的地址用环回网卡,lo用仅主机的网卡(画图的时候lo标记错了)
注意:需要打开路由器的内核路由功能使得路由器本身的两个网卡可以相互通信。并且设置Web服务器的ARP广播的响应,使得客户端发送172.25.254.200请求时只有LVS响应,web不响应。
一:ip设置
注意:客户端的网关写路由器的172.25.250.0网段,lvs,web1,web2写路由器的172.25.254.0网段
客户端:
路由器:
LVS:
Web1:
Web2:
二:路由器打开内核路由功能
vim /etc/sysctl.conf
sysctl -p 重新加载配置文件
三:部署LVS
软件下载:yum install ipvsadm -y
管理集群:
[root@lvs ~]# ipvsadm -A -t 172.25.254.200:80 -s rr
管理集群中RealServer:
[root@lvs ~]# ipvsadm -a -t 172.25.254.200:80 -r 172.25.254.10:80 -g
[root@lvs ~]# ipvsadm -a -t 172.25.254.200:80 -r 172.25.254.20:80 -g
四:配置服务器上的web服务
web1:
yum install httpd -y
echo web1 > /var/www/html/index.html
关arp
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
web2:
yum install httpd -y
echo web2 > /var/www/html/index.html
关ARP
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce