问题:
互联网应用中,随着站点对硬件性能,响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡及高可用的要求
解决方法:
在企业中常用的一种群集技术–LVS(Linux virtual server,linux虚拟服务器)
注:通过整合多台服务器,使用LVS来达到服务器的高可用和负载均衡,并以同一个IP地址对外提供相同的服务
第一层,负载调度器(Load Balancer或Director)
访问整个群集系统的唯一入口,对外使用所有服务器共有的vip地址,也称为
群集IP地址,通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性
第二层,服务器池(Server Pool)
群集所提供的应用服务,由服务器池承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池
第三层,共享存储(Share Storage)
为服务器池中的所有节点提供稳定,一致的文件存取服务,确保整个群集的统一性,共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mnpO58LX-1659428264194)(C:\Users\orange\AppData\Roaming\Typora\typora-user-images\image-20220729111059472.png)]
1、负载均衡群集是目前企业用的最多的群集类型
2、群集的负载调度技术有三种工作模式
地址转换
**原理:**首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端
**优点:**集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址
**缺点:**扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈
IP隧道
**原理:**首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器
**优点:**负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”
直接路由
**原理:**首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器
**优点:**负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量
**缺点:**需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境
1、Linux Virtual Server
LVS现在已经成为 LInux 内核的一部分,默认编译为ip_vs模块,必要时能够自动调用
LVS(Linux Virtual Server)是针对Linux内核的负载均衡解决方案
modprobe ip_vs
cat /proc/net/ip_vs #查看内核LVS版本
2、LVS的负载调度算法
(1)轮询 (Round Robin)
(2)加权轮询(Weighted Round Robin)
(3)最少连接 (Least Connections)
(4)加权最少连接(Weighted Least Connections)
ipvsadm 工具选项说明
| 选项 | 解释 |
|---|---|
| -A | 添加虚拟服务器 |
| -D | 删除整个虚拟服务器 |
| -s | 指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接: wlc) |
| -a | 表示添加真实服务器(节点服务器) |
| -d | 删除某一个节点 |
| -t | 指定VIP地址及TCP端口 |
| -r | 指定RIP地址及TCP端口 |
| -m | 表示使用NAT群集模式 |
| -g | 表示使用DR模式 |
| -i | 表示使用TUN模式 |
| -w | 设置权重(权重为0时表示暂停节点) |
| -p 60 | 表示保持长连接60秒 |
| -l | 列表查看LVS虚拟服务器〔默认为查看所有) |
| -n | 以数字形式显示地址、端口等信息,常与"-"选项组合使用。ipvsadm -ln |

准备工作
1 负载调度器:内网关 ens33:20.0.0.18,外网关 ens36:10.0.0.1
2 Web节点服务器1:20.0.0.10
3 Web节点服务器2:20.0.0.11
4 NFS服务器:20.0.0.20
5 客户端:10.0.0.10
1.#关闭防火墙
systemctl stop firewalld
setenforce 0
2.#安装NFS安装包和管理服务
yum install -y rpcbind nfs-utils
3.创建共享目录,并创建站点文件
mkdir /opt/taobao
mkdir /opt/pxx
echo "欢迎来到淘宝
">/opt/taobao/index.html
echo "欢迎来到拼夕夕
">/opt/pxx/index.html
#修改权限
chmod 777 /opt/taobao /opt/pxx
#设置共享策略
vim /etc/exports //NFS的配置文件,默认文件内容为空(无任何共享)
/opt/taobao 20.0.0.20/24(rw,sync)
/opt/pxx 20.0.0.20/24(rw,sync)
4.启动服务
systemctl start rpcbind #先启动rpcbind
systemctl start nfs

exportfs -rv

20.0.0.10
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装httpd
yum install -y httpd
3. #查看nfs服务
showmount -e 20.0.0.20
4. #挂载站点
#法一:临时挂载
mount 20.0.0.20:/opt/taobao /var/www/html/
cat /var/www/html/index.html
#法二:永久挂载
vim /etc/fstab
20.0.0.20:/opt/taobao/ /var/www/html/ nfs defaults,_netdev 0 0
mount -a
5. #开启httpd服务
systemctl start httpd
6. #指定网关
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=20.0.0.18
#DNS1=8.8.8.8
7. #重启网络服务
systemctl restart network




20.0.0.11
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装httpd
yum install -y httpd
3. #查看nfs服务
showmount -e 20.0.0.20
4. #挂载站点
#法一:临时挂载
mount 20.0.0.20:/opt/pxx /var/www/html/
df
cat /var/www/html/index.html
#法二:永久挂载
vim /etc/fstab
20.0.0.20:/opt/dhc/ /var/www/html/ nfs defaults,_netdev 0 0
mount -a
5. #开启httpd服务
systemctl start httpd
6. #指定网关
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=20.0.0.18
#DNS1=8.8.8.8
7. #重启网络服务
systemctl restart network




1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装ipvsadm
yum install -y ipvsadm*
3. #添加一块网卡,我这里是ens38,配置网卡,重启网络
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens35
vim ifcfg-ens35
去掉网关、UUID、修改IP
vim ifcfg-ens33
去掉网关
systemctl restart network
4. #打开路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
5. #防火墙做策略
#查看策略
iptables -nL -t nat
#清空策略
iptables -F
#添加策略
iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens35 -j SNAT --to 10.0.0.1
#查看策略
iptables -nL -t nat
6. #加载LVS内核模块
modprobe ip_vs
cat /proc/net/ip_vs
7. #开启ipvsadm服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
8. #清空策略
ipvsadm -C
9. #制定策略
#指定IP地址 外网的入口 -s rr 轮询
ipvsadm -A -t 10.0.0.1:80 -s rr
#先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式
ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.10:80 -m
ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.11:80 -m
#开启服务
ipvsadm
10. 查看策略
ipvsadm -ln
11.#保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm








=================小tips=================
1 ipvsadm -d -t 10.0.0.10:80 -r 20.0.0.10:80 -m [-w 1] #删除群集中某一节点服务器
2 ipvsadm -D -t 10.0.0.10:80 #删除整个虚拟服务器
3 systemctl stop ipvsadm #停止服务(清除策略)
4 systemctl start ipvsadm #启动服务(重建规则)、
5 ipvsadm-restore < /etc/sysconfig/ipvsadm #恢复LVS 策略
在一台IP为10.0.0.10的客户机使用浏览器访问 http://20.0.0.18/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点


