LVS集群
简介
LVS(Linux Virtual Server)是基于Linux系统实现的负载均衡解决方案。
它利用Linux的IP负载均衡(IPVS)内核模块来实现负载均衡功能。
IPVS在内核空间中拦截并分发进入的网络流量,将流量按照一定的负载均衡算法分发给后端多台服务器,实现负载均衡的目的。
这样可以提高系统的性能、可伸缩性和高可用性。
LVS现在已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自己调用
工作原理
当用户向负载均衡器(Director Server)发起请求,调度器将请求发送至内核空间;
PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发送到INPUT链;
IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已经定义好的集群服务进行对比,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发送到POSTROUTING链;
POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送到后端的服务器;
LVS三种工作模式
NAT模式
调度器会作为所以节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,也就是说调度器会承载双向数据流量的负载压力,可能会成为整个群集的性能瓶颈。
由于节点服务器都处于内网环境,使用私网IP地址,所以具有一定安全性
TUN模式
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。
但是由于节点服务器需要部署在不同位置的公网环境中,需要具有独立的公网IP,调度器与节点服务器是通过专用的IP隧道实现相互通信的,因此IP隧道模式的成本较高、安全性较低,且IP隧道需要额外的封装和解封装,性能会受到一定的影响
DR模式
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NAT模式的区别) 节点服务器与调度器是部署在同一个物理网络内,因此不需要建立专用的IP隧道。(与TUN模式的区别) DR模式是企业首选的LVS模式。
对比
NAT:通过网络地址转换实现的虚拟服务器,大并发访问时,调度器的性能成为瓶颈; DR:使用路由技术实现虚拟服务器,节点服务器需要配置VIP,注意MAC地址广播; TUN:通过隧道方式实现虚拟服务器
工作模式 | 特点 | 区别 | 应用情况 |
---|---|---|---|
NAT | 通过网络地址转换实现的虚拟服务器,大并发访问时,调度器的性能成为瓶颈 | 调度器作为网关,是访问请求得到入口,也是响应访问的出口,在高并发场景当中负载压力很高,NAT地址转换可以提高安全性,但使用性能降低一半 | 因性能使用率问题,实际应用不多 |
DR | 使用路由技术实现虚拟服务器,节点服务器需要配置VIP,注意MAC地址广播 | 调度器仅是访问请求的入口,响应数据不经过调度器。节点服务器和调度器在同一个物理网络中,数据转发不受额外影响 | 该模式是生产环境中最常用的 |
TUN | 通过隧道方式实现虚拟路由器 | 调度器仅是访问请求的入口,响应数据不经过调度器。但是需要大量公网IP,还需要专用的IP隧道,数据转发受IP隧道影响 | 因公网IP问题,实际应用不多,常用于大型企业的异地灾备 |
LVS调度算法
rr 轮询 wrr 加权轮询 sh 源地址哈希 dh 目的地址哈希 lc 最小连接 wlc 加权最小连接 lblc 基于地址的最小连接0
固定调度算法:rr、wrr、dh、sh
rr:轮询算法,将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。 wrr:加权轮询调度,一句不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多,相同权值的RS得到相同数目的连接数。 dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得所需RS。 sh:源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS
动态调度算法:wlc、lc、lblc
wlc:加权最小连接数调度,架设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS。 lc:最小连接数调度(least-connection),ipvs表存储了所有活动的连接。LB会比较连接请求放到当前连接最少的RS。 lblc:基于地址的最小连接数(locality-based least-connection),将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
ipvsadm工具的功能
LVS群集创建与管理:
- 创建虚拟服务器
- 添加、删除服务器节点
- 查看群集及节点情况
- 保存负载分配策略
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: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln
LVS-NAT模式配置
配置 NFS 共享存储;
节点服务器安装 Web 服务,注意:默认网关要指向 调度器的IP地址,测试的时候关闭连接保持;
调度服务器要开启 IP路由转发 功能和设置 SNAT 等 iptables 规则,安装 ipvsadm 工具,配置虚拟服务器和真实节点服务器相关配置;
客户端测试的时候网关要指向 调度器的IP地址
systemctl disable firewalld.service --now
setenforce 0
yum install -y nfs-utils rpcbind
systemctl start rpcbind nfs
mkdir /opt/test1 /opt/test2
chmod 777 /opt/test1 /opt/test2
echo "This is test1 web" > /opt/test1/index.html
echo "This is test2 web" > /opt/test2/index.html
#nfs
vim /etc/exports
/usr/share *(ro,sync)
/opt/test1 192.168.118.0/24(rw,sync)
/opt/test2 192.168.118.0/24(rw,sync)
exportfs -rv
#发布共享
showmount -e
#节点服务器
#web-1
systemctl disable firewalld
setenforce 0
yum install -y httpd
systemctl start httpd
yum install -y nfs-utils rpcbind
systemctl start rpcbind
mount.nfs 192.168.118.30:/opt/test1 /var/www/html
[root@web_server1 ~]# vim /etc/fstab
#末行写入,设置自动挂载
192.168.118.30:/opt/test1 /var/www/html nfs defaults,netdev 0 0
systemctl disable firewalld
setenforce 0
#配置SNAT转发规则
#开启路由转发
vim /etc/sysctl.conf
#末行写入
net.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o ens36 -j SNAT --to-source 12.0.0.10
#加载LVS内核模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs | grep -o "^[^.]*");do echo $1; /sbin/modinfo -F filename $1 > /dev/null 2>&1 && /sbin/modprobe $1;done
#安装ipvsadm管理工具
yum install -y ipvsadm
#启动服务前需保存负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
#配置负载分配策略
ipvsadm -C #清除原有策略
#添加策略
ipvsadm -A -t 12.0.0.10:80 -s rr
ipvsadm -a -t 12.0.0.10:80 -r 192.168.118.100:80 -m -w 1
ipvsadm -a -t 12.0.0.10:80 -r 192.168.118.101:80 -m -w 1
ipvsadm #启用策略
ipvsadm -ln
#查看节点状态,Masq代表NAT模式
ipvsadm-save > /etc/sysconfig/ipvsadm
#保存策略