目录
一、群集应用概述
1.1 群集的含义
1.2 应用场景出现高并发的解决方案
1.3 系统性能扩展方式
1.4 群集的三种分类
1.4.1 负载均衡群集
1.4.2 高可用群集
1.4.3 高性能运算群集
1.5 负载均衡的结构
1.6 LVS的负载调度算法
1.7 分布式
1.8 集群和分布式
1.9 集群设计原则
二、Linux Virtual Server简介
2.1 LVS介绍
2.2 LVS工作原理
2.3 LVS功能及组织架构
2.3.1 应用于高访问量的业务
2.3.2 扩展应用持续
2.3.3 消除单点故障
2.3.4 同城容灾 (多可用区容灾)
2.4 LVS集群类型中的术语
三、LVS工作模式和相关命令
3.1 LVS集群的工作模式
3.1.1 NAT模式
3.1.2 TUN模式
3.1.3 DR模式
3.2 NAT模式和DR模式的区别
3.3 LVS工作模式总结和比较
四、ipvsadm工具
4.1 ipvsadm工具选项说明
五、NAT模式 LVS负载均衡部署
5.1 部署共享存储(NFS服务器:192.168.152.11)
5.2 节点Web服务器
5.3 负载调度器
5.4 Windows客户机
根据群集所针对的目标差异,可分为三种类型
LB:Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
HA:High Availability Cluster
HPC:High Performance Computer Cluster
①轮询(Round Robin)
②加权轮询(Weighted Round Robin)
③最少连接(Least Connections)
④加权最少链接(Weighted Least Connections)
⑤IP_Hash
⑥url_Hash
⑦fair
①分布式应用-服务按照功能拆分,使用微服务(单一应用程序划分成一组小的服务,服务之 间互相协调、互相配合,为用户提供最终价值服务)
②分布式静态资源--静态资源放在不同的存储集群上
③分布式数据和存储--使用key-value缓存系统
④分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名正明), 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现
LVS 官网:http://www.linuxvirtualserver.org/
阿里SLB和LVS:
https://yq.aliyun.com/articles/1803
https://github.com/alibaba/LVS
整个SLB系统由3部分构成:四层负载均衡,七层负载均衡和控制系统
LVS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行“处理”。
负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性。
如果您的应用访问量很高,可以通过配置监听规则将流量分发到不同的云服务器 ECS(Elastic
Compute Service 弹性计算服务)实例上。此外,可以使用会话保持功能将同一客户端的请求转发到同一台后端ECS
可以根据业务发展的需要,随时添加和移除ECS实例来扩展应用系统的服务能力,适用于各种Web服务器和App服务器。
可以在负载均衡实例下添加多台ECS实例。当其中一部分ECS实例发生故障后,负载均衡会自动屏蔽故障的ECS实例,将请求分发给正常运行的ECS实例,保证应用系统仍能正常工作。
使用负载均衡时,您可以将负载均衡实例部署在支持多可用区的地域以实现同城容灾。此外,建议您结合自身的应用需要,综合考虑后端服务器的部署。如果您的每个可用区均至少添加了一台ECS实例,那么此种部署模式下的负载均衡服务的效率是最高的。
负载均衡群集是目前企业用得最多的群集类型
群集的负载调度技术有三种工作模式
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址(直接路由)
lvs-tun:隧道模式
地址转换
IP隧道
直接路由
NAT和DR都会将调度器作为客户机访问入口,但是NAT模式进行回应客户机请求时候的出口,也是调度器作为出口。而DR则不经过调度器,直接回应客户机。NAT的安全性也要比DR高,因为NAT会进行一次SNAT转换,而DR是直接回应客户机,服务器地址直接暴露给客户端,所以安全性低一点。
NAT | TUN | DR | |
优点 | 端口转换 | WAN | 性能最好 |
缺点 | 性能瓶颈 | 服务器支持隧道模型 | 不支持跨网段 |
真实服务器要求 | any | Tunneling | Non-arp device |
支持网络 | private(私网) | LAN/WAN(私网/公网) | LAN(私网) |
真实服务器数量 | low (10~20) | High (100) | High (100) |
真实服务器网关 | lvs内网地址 | Own router(网工定义) | Own router(网工定义) |
-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 | 以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln |
配置环境
负载调度器:配置双网卡 内网:192.168.152.14(ens33) 外网卡:12.0.0.1(ens36)
二台WEB服务器集群池:192.168.152.12、192.168.152.13
一台NFS共享服务器:192.168.152.11
客户端:win10
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装nfs服务
yum install nfs-utils rpcbind -y
3. #新建目录,并创建站点文件
cd /opt/
mkdir fl dl
echo "this is fl" >fl/index.html
echo "this is dl" >dl/index.html
4. #开启服务
systemctl start rpcbind
systemctl start nfs
5. #授权
chmod 777 fl/ dl/
6. #设置共享策略
vim /etc/exports
/opt/fl 192.168.152.0/24(rw,sync)
/opt/dl 192.168.152.0/24(rw,sync)
7. #发布服务
systemctl restart nfs
exportfs -rv
关闭防火墙
安装nfs服务
新建目录,并创建站点文件
开启服务并授权
设置共享策略
发布服务
第一台(192.168.152.12)
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装httpd
yum install -y httpd
3. #查看nfs服务
showmount -e 192.168.152.11
4. #挂载站点
#法一:临时挂载
df
cat /var/www/html/index.html
mount 192.168.152.11:/opt/fl /var/www/html/
#法二:永久挂载
vim /etc/fstab
192.168.152.11:/opt/fl/ /var/www/html/ nfs defaults,_netdev 0 0
mount -a
5. #开启httpd服务
systemctl start httpd
6. #指定网关
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.152.14
#DNS1=8.8.8.8
7. #重启网络服务
systemctl restart network
关闭防火墙
安装httpd
刷新后查看
开启httpd服务
编辑网卡,设定指定网关
第二台(192.168.152.13)
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装httpd
yum install -y httpd
3. #查看nfs服务
showmount -e 192.168.152.11
4. #挂载站点
#法一:临时挂载
mount 192.168.152.11:/opt/dl /var/www/html/
df
cat /var/www/html/index.html
#法二:永久挂载
vim /etc/fstab
192.168.152.11:/opt/dl/ /var/www/html/ nfs defaults,_netdev 0 0
mount -a
5. #开启httpd服务
systemctl start httpd
6. #指定网关
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.152.11
#DNS1=8.8.8.8
7. #重启网络服务
systemctl restart network
关闭防火墙
安装httpd
指定网关并重启网卡
内网:192.168.152.14(ens33) 外网:12.0.0.1(ens36)
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
2. #安装ipvsadm
yum install -y ipvsadm*
3. #添加一块网卡,我这里是ens36,配置网卡,重启网络
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
去掉网关、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 192.168.152.0/24 -o ens36 -j SNAT --to 12.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 12.0.0.1:80 -s rr
#先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式
ipvsadm -a -t 12.0.0.1:80 -r 192.168.152.12:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.152.13:80 -m
#开启服务
ipvsadm
10. 查看策略
ipvsadm -ln
关闭防火墙
安装ipvsadm
添加一块网卡,我这里是ens36,配置网卡,重启网络
打开路由转发功能
防火墙做策略
加载LVS内核模块
开启ipvsadm服务
清空策略
制定策略
修改网卡信息
连通信测试
刷新后页面内容改变