LVS-NAT简单实战 注意:请关闭所有主机selinux和firewalld,架构图如下
LVS配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 hostnamectl set-hostname lvs echo "1" > /proc/sys/net/ipv4/ip_forwardapt update && apt install ipvsadm ipvsadm -A -t 172.18.0.100:80 -s wrr ipvsadm -a -t 172.18.0.100:80 -r 192.168.59.131:80 -m ipvsadm -a -t 172.18.0.100:80 -r 192.168.59.132:80 -m vim /etc/netplan/00-installer-config.yaml network: ethernets: ens33: dhcp4: no addresses: - 172.18.0.100/24 gateway4: 172.18.0.1 nameservers: addresses: [172.18.0.1,8.8.8.8] ens37: dhcp4: no addresses: - 192.168.59.100/24 version: 2 ipvsadm -Ln ipvsadm-save -n > ipvsadm.rule ipvsadm-restore < ipvsadm.rule
RS1配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 apt update && apt install ngixn -y echo "仅主机 192.168.59.131" > /var/www/html/index.nginx-debian.htmlsystemctl start nginx vim /etc/netplan/00-installer-config.yaml network: ethernets: ens33: dhcp4: no addresses: - 192.168.59.131/24 gateway4: 192.168.59.100 version: 2 netplan apply
RS2配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 apt install ngixn -y echo "仅主机 192.168.59.132" > /var/www/html/index.nginx-debian.htmlsystemctl start nginx vim /etc/netplan/00-installer-config.yaml network: ethernets: ens33: dhcp4: no addresses: - 192.168.59.132/24 gateway4: 192.168.59.100 version: 2 netplan apply
测试: 在Client上curl 172.18.0.100,在这里我们配置的权重轮询,但是没有配置weight,所以每curl一次都会换一次主机,一定程度上进行了负载。
1 2 ipvsadm -e -t 172.18.0.100:80 -r 192.168.59.131:80 -m -w 3
总结: 请记得一定要关闭防火墙,如果为rhel,请禁用selinux。其次NAT模式需要在LVS主机上进行IP地址的转换,会产生额外的网络开销,降低了网络性能,所以LVS主机需要具备较高的性能和带宽。在本次实验中的NAT模式存在单点故障的风险,实际生产最好使用主备,有兴趣的可自行尝试,这里就不再做过多叙述。
LVS-DR模式单网段案例 注意:请关闭所有主机selinux和firewalld,架构图如下
CIP配置 1 2 3 4 5 6 7 hostnamectl set-hostname CIP route del default route add default gw 172.18.0.100 route -n
Route配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 hostnamectl set-hostname route echo "1" > /proc/sys/net/ipv4/ip_forwardsystemctl stop firewalld cd /etc/sysconfig/network-scripts/vim ifcfg-ens160 BOOTPROTO=static IPADDR=172.18.0.100 NETMASK=255.255.255.0 NAME=ens160 DEVICE=ens160 ONBOOT=yes cp ifcfg-ens160 ifcfg-ens224vim ifcfg-ens224 BOOTPROTO=static IPADDR=192.168.59.200 NETMASK=255.255.255.0 NAME=ens224 DEVICE=ens224 ONBOOT=yes nmcli con reload; nmcli con up ens160;nmcli con up ens224
LVS配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 hostnamectl set-hostname lvs systemctl stop firewalld apt update && apt install ipvsadm vim /etc/netplan/00-installer-config.yaml network: ethernets: ens37: dhcp4: no addresses: - 192.168.59.130/24 gateway4: 192.168.59.200 version: 2 netplan apply ifconfig lo:1 192.168.59.100 netmask 255.255.255.255 ipvsadm -A -t 192.168.59.100:80 -s rr ipvsadm -a -t 192.168.59.100:80 -r 192.168.59.131:80 -g ipvsadm -a -t 192.168.59.100:80 -r 192.168.59.132:80 -g ipvsadm -Ln
RS1配置 1 2 3 4 5 6 7 8 9 10 IP配置参考LVS hostnamectl set-hostname RS1 systemctl stop firewalld echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announceecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceifconfig lo:1 192.168.59.100 netmask 255.255.255.255
RS2配置 1 2 3 4 5 6 7 hostnamectl set-hostname RS2 systemctl stop firewalld echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announceecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceifconfig lo:1 10.0.0.100 netmask 255.255.255.255
LVS的eth0的网关可否不配置?如果随便配置,发现什么问题?如果不配置,怎么解决 可以,修改一下内核参数就行
1 2 3 4 5 6 7 8 9 10 11 ubuntu echo "0" > /proc/sys/net/ipv4/conf/all/rp_filterecho "0" > /proc/sys/net/ipv4/conf/LVS 网卡名/rp_filterrhel echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
LVS的VIP可以配置到lo网卡,但必须使用32位的netmask,为什么?
1 由于回环地址是一个单独的网络,因此需要使用32位掩码来配置回环网口的地址,以确保只有该地址的唯一性,避免因为掩码设置错误而导致不必要的网络通信和安全问题。
测试
总结: LVS-DR模式单网段可能更容易被黑客扫描,因为LVS-DR模式下,虚拟服务器和Real Server都使用了同一网段,这使得黑客更容易发现虚拟服务器所在的IP地址。而且,由于Real Server的响应包不会经过Director,所以在单网段情况下,Real Server的响应包直接返回给客户端,黑客可以通过分析这些响应包来发现Real Server的IP地址。其次LVS主机和后端RS在同一个子网内,因此可能存在ARP欺骗的风险。同时要注意的是我在这里修改内核参数只是临时修改,重启后参数会复位,回环网卡ip也是同理。如果需要永久生效,请修改网卡配置文件。ipvsadm也可配置开机自启。
LVS-DR模式多网段案例 我们可直接在单网端上稍作修改即可,架构图如下
1 2 3 在LVS,RS1,RS2上删除原来地址,然后添加新地址 ifconfig lo:1 del 192.168.59.100 ifconfig lo:1 10.0.0.100 netmask 255.255.255.255
Router配置 1 ifconfig lo:1 10.0.0.100 netmask 255.255.255.255
LVS配置 1 2 3 4 5 lvsadm -C ipvsadm -A -t 10.0.0.100:80 -s wrr ipvsadm -a -t 10.0.0.100:80 -r 192.168.59.131:80 -g -w 1 ipvsadm -a -t 10.0.0.100:80 -r 192.168.59.132:80 -g -w 1
测试
总结: LVS-DR多网段模式是在LVS-DR单网段模式的基础上进行改进的,多个网段来增加LVS集群的可扩展性,同时避免了单网段模式中可能出现的ARP攻击问题。此外,多网段模式还可以让LVS集群在多个物理网络上分布,以提高整个集群的可靠性。但相应而来的缺点是需要在路由器上配置静态路由或动态路由协议,这可能会增加一些管理成本。其次,LVS-DR多网段模式还可能会增加一些网络延迟,特别是当LVS集群分布在多个物理网络上时。LVS-DR多网段模式适合于大型网络环境中需要高可扩展性和高可靠性的应用场景,例如互联网数据中心、大型企业应用、电子商务等场景。同时,也适合于需要通过LVS来实现负载均衡和高可用性的应用程序。
LVS-TUNNEL隧道模式 根据DR多网段进行修改,架构图如下
为LVS,RS1,RS2添加tun0隧道地址 1 2 3 4 5 6 ifconfig lo:1 del 10.0.0.100 ifconfig tunl0 192.168.59.100 netmask 255.255.255.255 up ip addr add 192.168.59.100/32 dev tunl0 ip link set up tunl0
Router配置 1 ip address delete 10.0.0.200/24 dev ens224
LVS配置 1 2 route add default gw 192.168.59.200
测试:
抓包图
原理: LVS的tunnel模式是指将请求的数据包封装在一个新的数据包中,再通过IP网络传输到后端的Real Server上进行处理的一种LVS工作模式。在tunnel模式下,LVS将请求的数据包封装在一个新的数据包中,新的数据包的目的IP地址是后端Real Server的IP地址,这样数据包才能传递到Real Server上。 总结: tunnel模式的优点是支持跨网段的负载均衡,因为请求数据包经过封装后,可以通过IP网络传输到不同网段中的Real Server上。但是由于封装和解封装的过程会增加额外的延迟和负担,因此性能比直接路由的DR模式差。同时,tunnel模式也需要额外的配置和管理工作,增加了部署和维护的难度。
LVS高可用 LVS和RS故障 解决方案 LVS + keepalived:keepalived是一种常见的高可用解决方案,可以通过监测LVS服务器的状态来实现自动故障转移和负载均衡。当主LVS服务器出现故障时,keepalived会自动将VIP转移到备用LVS服务器上。 LVS + heartbeat/corosync:heartbeat/corosync是另一种常用的高可用解决方案,可以在多个LVS服务器之间同步状态,并实现自动故障转移和负载均衡。当主LVS服务器出现故障时,备用LVS服务器可以接管其工作。 LVS + ldirectord:ldirectord是一个可以管理LVS集群的工具,可以实现自动故障转移和负载均衡。与keepalived和heartbeat/corosync相比,ldirectord的配置更为灵活,可以根据实际需求来进行配置。