一.LVS简介
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。
LVS基于内核网络层工作,有着超强的并发处理能力,单台LVS可以承受上万的并发连接。LVS是基于4层的负载均衡软件,因此LVS在所有负载均衡软件中性能最强,稳定性最高,消耗CPU和内存少。LVS是工作在4层,所以它可以对应用层的所有协议作负载均衡,包括http、DNS、ftp等。
(负责调度)
二.集群和分布式简介
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%
(计算结果越小故障时间越长)
(安排A,B两台LVS,B一般负责监督A工作,当A罢工时,B及时顶上)
【目的:阻止体系出现故障】
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)运行原理
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基 于LVS+keepalived实现
三.三种工作模式
实验一:部署NAT模式集群
实验工具:
虚拟机,三台rhel9
LVS:
# 使用脚本
vmset.sh eth0 172.25.254.100 lvs.org
vmset.sh eth1 192.168.0.100 lvs.org
# 修改网关
vim /etc/NetworkManager/system-connections/eth1.nmconnection
将eth1网关删掉
# 更新网卡
nmcli connection reload
nmcli connection up eth1
# 启用内核路由功能
vim /etc/sysctl.conf
添加 net.ipv4.ip_forward = 1
# 安装ipvsadm
yum install ipvsadm -y
# 添加调度策略
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
# 查看策略
ipvsadm -Ln
TCP 172.25.254.100:80 rr
-> 192.168.0.10:80 Masq 1 0 0
-> 192.168.0.20:80
webserver1:
# 使用脚本
vmset.sh eth0 192.168.0.10 webserver1.org
# 修改网关
vim /etc/NetworkManager/system-connections/eth0.nmconnection
address1=192168.0.10/24,192.268.0.100
# 更新网卡
nmcli connection reload
nmcli connection up eth0
# 下载httpd服务,用于测试
yum install httpd -y
echo webserver1 - 192.168.0.10 > /var/www/html/index.html
systemctl enable --now httpd
webserver2:同上类似
客户端测试:
[root@Client ]# for i in {1..5}; do curl 172.25.254.100; done
webserver2 - 192.168.0.20
webserver - 192.168.0.10
webserver2 - 192.168.0.20
webserver - 192.168.0.10
webserver2 - 192.168.0.20
实验二:
实验工具:
使用虚拟机,rhel9(需要五台主机,一台客户端,一台路由器,一台LVS,两台服务器)
webserver
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# 在server设定vip
[root@webserver1 ~]# ip a a 192.168.0.200/32 dev lo
[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo
client
# 使用脚本
vmset.sh eth0 172.25.254.200 Client.org
# 修改网关
vim /etc/NetworkManager/system-connections/eth0.nmconnection
address1=172.25.254.200/24.172.25.254.100
# 更新网卡
nmcli connection reload
nmcli connection up eth0
router
# 使用脚本
[root@router ~]# vmset.sh eth0 172.25.254.100 router.org
[root@router ~]# vmset.sh eth1 192.168.0.100 router.org
[root@router ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnec
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.100/24
method=manual
# 更新网卡
[root@router ~]# nmcli connection reload
[root@router ~]# nmcli connection up eth1
[root@router ~]# nmcli connection up eth0
# 启用内核路由功能
[root@router ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1
LVS
# 使用脚本
[root@lvs ~]# vmset.sh eth1 192.168.0.50 lvs.org
# 修改网关为192.168.0.100
[root@lvs ~]#vim /etc/NetworkManager/system-connections/eth1.nmconnection
address1=192.168.0.50/24,192/168/0/100
# 更新网卡
[root@lvs ~]# nmcli connection reload
[root@lvs ~]#nmcli connection up eth1
# 在回环接口配置VIP
[root@lvs ~] ip a a 192.168.0.200/32 dev lo
# 下载ipvsadm
[root@lvs ~] yum install ipvsadm -y
# 配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
# 查看策略
[root@lvs ~]# ipvsadm -Ln
TCP 192.168.0.200:80 wrr
-> 192.168.0.10:80 Route 1 0 0
-> 192.168.0.20:80 Route 2 0 0
测试:
[root@client ~]# for i in {1..5}
> do
> curl 192.168.0.200
> done
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10