一、LVS相关原理
1.LVS简介
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是https://blog.csdn.net/m0_68096246/article/details/www.linuxvirtualserver.org。
VS:负责调度
RS:负责真正提供服务
2.LVS概念
VIP:虚拟IP地址 | Director用于向客户端计算机提供服务的IP地址 |
RIP真实IP地址 | 在集群下面节点上使用的IP地址 |
DIP:Director的IP地址 | Director用于连接内外网网络的IP地址 |
CIP:客户端主机IP地址 | 客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求的源IP地址 |
3.LVS集群的类型
IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR
3.1 lvs-net
修改请求报文的目标ip,多目标ip的dnat
这种模式适用于任何类型的Real Server,Real Server网络通常是私有的,最多支持10到20个Real Server,Real Server的网关是负载均衡器。优点是可以进行端口转换,缺点是存在性能瓶颈。它主要工作在OSI模型的第三层(网络层)和第四层(传输层)。NAT允许内部网络使用私有IP地址,并通过公共IP地址进行外部通信。
3.2 lvs-tun
操纵封装新的MAC地址
这种模式要求Real Server支持隧道,Real Server网络可以是局域网或广域网,支持较多数量的Real Server(高达100个),Real Server有自己的路由器。优点是支持WAN,缺点是需要支持隧道,不支持端口转换。这种技术可以用于实现虚拟专用网(VPN),并通常工作在OSI模型的第三层(网络层)和第四层(传输层)。
3.3 lvs-dr
在原请求ip报文在外新加一个ip首部
这种模式适用于非ARP设备的Real Server,Real Server网络是局域网,同样支持大量Real Server(高达100个),Real Server有自己的路由器。优点是性能最佳,缺点是不支持跨网段和端口转换。工作在数据链路层。
4.lvs调度算法
10种调度算法
固定调度算法:rr,wrr,dh,sh
动态调度算法:lc, wlc,lblc,lblcr,SED,NQ
rr | 循环调度,它将请求依次分配不同的RS,也就是在RS中均匀请求。这种算法简单,但是只适合于处理性能相差不大的情况 |
---|---|
wrr | 加权轮循调度,它将依据不同RS的权重分配任务。权重较高的RS将优先获得任务,并且分配到的连接数将比权重较低的RS更多。相同权重的RS得到相同数目的连接数 |
dh | 目的哈希调度,以目的地为关键字查找一个静态hash表来获得需要的RS。 |
sh | 源地址哈希调度,以源地址为关键字查找一个静态hash表来获得需要的RS |
lc | 最小连接数调度,IPVS表存储了所有的活动的连接。把新的连接请求发送到当前连接数最小的RS。 |
wlc | 基于地址的最小连接数调度,将来自同一目的地的请求分配给同一台RS如果这台服务器尚未负荷,则分配给连接数最小的RS,并以它为下一次分配的首先考虑。 |
lblc | 基于地址的最小连接数调度,将来自同一目的地的请求分配给同一台RS如果这台服务器尚未负荷,则分配给连接数最小的RS,并以它为下一次分配的首先考虑。 |
lblcr | 基于地址带重复最小连接数调度,对于某一目的地,为其分配子集中连接数最小RS |
SED | 短期望的延迟,基于wlc算法 |
NQ | 最少队列调度,无需队列。如果有realserver的连接数=0就直接分配过去,不需要在进行sed运算 |
二、lvs实验实例
一、LVS的nat模式
1.配置网络
lvs
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth1
lvs中打开内核路由功能
客户端
wenserver1:
webserver2:
2.开始配置
webserber1:
[root@webserver1 ~]# dnf install httpd -y [root@webserver1 ~]# echo webserver1 - 192.168.0.10 > /var/www/html/index.html [root@webserver1 ~]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
webserber2:
[root@webserver2 ~]# dnf install httpd -y [root@webserver2 ~]# echo webserver2 - 192.168.0.20 > /var/www/html/index.html [root@webserver2 ~]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
先在lvs中测试:
lvs:
首先安装lvs软件 [root@lvs ~]# dnf install ipvsadm -y [root@lvs ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr [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 [root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10: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.0.10:80 Masq 1 0 0 [root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20: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.0.10:80 Masq 1 0 0 -> 192.168.0.20:80 Masq 1 0 0
在镇机中测试:
保存:
[root@lvs boot]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs boot]# ipvsadm -A -t 172.25.254.100:80 -s wrr [root@lvs boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1 [root@lvs boot]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2 Destination already exists [root@lvs boot]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1 [root@lvs boot]# 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 wrr -> 192.168.0.10:80 Masq 2 0 0 -> 192.168.0.20:80 Masq 1 0 0 [root@lvs boot]# curl 172.25.254.100 webserver2 - 192.168.0.20 [root@lvs boot]# for i in {1..10} > do > curl 172.25.254.100 > done webserver1 - 192.168.0.10 webserver1 - 192.168.0.10 webserver2 - 192.168.0.20 webserver1 - 192.168.0.10 webserver1 - 192.168.0.10 webserver2 - 192.168.0.20 webserver1 - 192.168.0.10 webserver1 - 192.168.0.10 webserver2 - 192.168.0.20 webserver1 - 192.168.0.10 [root@lvs boot]# cat /etc/sysconfig/ipvsadm -A -t 172.25.254.100:80 -s rr -A -t 192.168.0.100:80 -s rr -a -t 192.168.0.100:80 -r 192.168.0.10:80 -m -w 1 -a -t 192.168.0.100:80 -r 192.168.0.20:80 -m -w 1 [root@lvs boot]# ipvsadm -C [root@lvs boot]# systemctl stop ipvsadm.service [root@lvs boot]# systemctl restart ipvsadm.service
二、LVS的dr模式
共五台设备:客户机(client),路由器(router),lvs,两台真机(rs)
1.配置网络
客户机(client)172.25.254.200
路由器(router)172.25.254.100
lvs:192.168.0.50
主机:
2.rs主机使vip不对外响应
rs主机中: server1: [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 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce server2: [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 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
3.在rs主机中和lvs中添加vip
server1、server2、lsv中都要添加 [root@webserver1 ~]# ip a a 192.168.0.200/32 dev lo ip a 查看是否添加成功
4.lvs中
[root@lvs ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [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 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn 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
5.在客户机client中测试
三、LVS-火墙mark标记解决调度问题
在dr模式完成基础之上
1.两台rs上安装
RS安装mod_ssl模块,让rs支持https
重启服务
2.端口标记
3.client测试
所有防火墙关闭!!!