1 集群与分布式简介
1.1 集群(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来进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间
1.2 分布式--一活多人干
分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
1.3 集群与分布式的区别
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据
和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数 来提升效率
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器 完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决 定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败
2 lvs(Linux virtual server)运行原理
2.1 lvs
LVS(Linux Virtual Server)负载调度器,是一种基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性
LVS 蕴含概念
LVS 支持三种主要的工作模式:
-
LVS-NAT(Network Address Translation):在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址,适用于小规模集群。
-
LVS-DR(Direct Routing):在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址,后端服务器直接将响应报文发回客户端,适用于大规模集群。
-
LVS-TUN(IP Tunneling):该模式通过IP隧道将请求转发到后端服务器,后端服务器直接将响应报文发回客户端,适用于地理位置分散的集群。
-
lvs-fullnat : 修改请求报文的源和目标IP
2.2 nat模式
- 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和 PORT实现转发
- RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
- 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
- 支持端口映射,可修改请求报文的目标PORT
- VS必须是Linux系统,RS可以是任意OS系统
nat模式数据逻辑

- 客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)
- VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
- RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)
- VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
- VS服务器把修改过报文的响应数据包回传给客户端
- lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞
注意:
- 客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通 过PREROUTING后被ipvs结果并作nat转发
- 因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工 作。所以在做lvs时要把iptables的火墙策略全清理掉
2.3 DR模式
DR(Direct Routing)直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变
DR模式数据传输过程
DR模式的特点
- Director和各RS都配置有VIP
- 确保前端路由器将目标IP为VIP的请求报文发往Director
- 在前端网关做静态绑定VIP和Director的MA
- RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络
- RIP的网关不能指向DIP,以确保响应报文不会经由Director
- RS和Director要在同一个物理网络
- 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
- 不支持端口映射(端口不能修败)
- RS可使用大多数OS系统
2.4 TUN模式(了解)
TUN模式数据传输过程
2.5 fullnet模式(了解)
3 实验内容
3.1 nat模式实验
3.1.1 实验环境
四个虚拟机 :
servera # 仅主机 eth0:192.168.10.11/24,192.168.10.100
serverb # 仅主机 eth0:192.168.10.22/24,192.168.10.100
lvs # 仅主机 eth0:192.168.10.100/24,192.168.10.2
nat模式 eth1:172.25.254.100/24,172.25.254.2
client # nat模式 eth0:172.25.254.111/24,172.25.254.100
###关闭火墙(所有主机)
systemctl disable --now firewalld.service
###安装ipvsadm(仅在lvs主机)
dnf install ipvsadm -y
###安装并应用httpd用于验证实验(仅在servera和serverb)
dnf install httpd -y
#servera
echo RS1 - 192.168.10.11 > /var/www/html/index.html
systemctl enable --now httpd #开启httpd服务
#serverb
echo RS2 - 192.168.10.22 > /var/www/html/index.html
systemctl enable --now httpd
###使不同网段可通过lvs通讯
#lvs
echo net.ipv4.ip_forward=1 > /etc/sysctl.conf
3.1.2 实验过程
#lvs
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.10.22:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.10.11:80 -m
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr
-> 192.168.10.11:80 Masq 1 0 0
-> 192.168.10.22:80 Masq 1 0 0
3.1.3 测试
#client
[root@client ~]# for i in {1..6}; do curl 172.25.254.100; done
RS1 -192.168.10.11
RS2 -192.168.10.22
RS1 -192.168.10.11
RS2 -192.168.10.22
RS1 -192.168.10.11
RS2 -192.168.10.22
3.2 DR模式实验
3.2.1 实验环境
client 同上
route # eth0 192.168.10.100/24,192.168.10.2
# eth1 172.25.254.100/24,172.25.254.2
注:servera,serverb,DR_lvs 都要额外加上vip
servera # eth0 192.168.10.11/24,192.168.10.100
# lo ①127.0.0.1/8 ②192.168.10.220/32
serverb # eth0 192.168.10.22/24,192.168.10.100
# lo ①127.0.0.1/8 ②192.168.10.220/32
DR_lvs # eth0 俩ip ①192.168.10.200/24,192.168.10.100 ②192.168.10.220/24,192.168.10.100
###关闭防火墙(除了route)
systemctl disable --now firewalld.service
###在DR_lvs上安装ipvsadm
dnf install ipvsadm -y
###使不同网段能通过路由通讯
#route
echo net.ipv4.ip_forward=1 > /etc/sysctl.conf
###打开防火墙
systemctl enable --now firewalld.service
firewall-cmd --permanent --add-masquerade #开启地址伪装
firewall-cmd --reload #重启防火墙
3.2.2 实验过程
###使servera和serverb的vip不对外作用
#servera和serverb
echo net.ipv4.conf.all.arp_announce=2 >> /etc/sysctl.conf
echo net.ipv4.conf.lo.arp_announce=2 >> /etc/sysctl.conf
echo net.ipv4.conf.lo.arp_ignore=1 >> /etc/sysctl.conf
echo net.ipv4.conf.all.arp_ignore=1 >> /etc/sysctl.conf
#DR_lvs
[root@DRlvs ~]# ipvsadm -A -t 192.168.10.220:80 -s rr
[root@DRlvs ~]# ipvsadm -a -t 192.168.10.220:80 -r 192.168.10.11:80 -g
[root@DRlvs ~]# ipvsadm -a -t 192.168.10.220:80 -r 192.168.10.22:80 -g
[root@DRlvs ~]# ipvsadm -Ln
[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.220:80 rr
-> 192.168.10.11:80 Route 1 0 0
-> 192.168.10.22:80 Route 1 0 0
3.2.3 测试
[root@client ~]# for i in {1..6}; do curl 192.168.10.220; done
RS2 -192.168.10.22
RS1 -192.168.10.11
RS2 -192.168.10.22
RS1 -192.168.10.11
RS2 -192.168.10.22
RS1 -192.168.10.11