1. 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。
2.基于 CentOS 7 构建 LVS-DR 群集。
NAT模式
在 LVS 的 NAT 模式中,LVS 将客户端请求的 IP 地址和端口号修改为 LVS 的 NAT 网络接口 IP 地址和端口号,然后将请求转发给后端的服务器。当后端服务器响应时,LVS 将响应中的 IP 地址和端口号还原为客户端请求的 IP 地址和端口号,并将响应发送回给客户端。
在将VIP转换为RIP时我们使用到的技术为DNAT——目标地址转换,同理在回包时的技术叫SNAT——源地址转换
LVS NAT 模式的主要优点包括:
- 隐藏了后端服务器的真实 IP 地址,提高了安全性;
- 负载均衡器可以使用公网 IP 地址,而不需要将其配置到后端服务器上;
- LVS 可以基于 IP 地址和端口号进行负载均衡,从而实现了基于四层(传输层)的负载均衡。
需要注意的是,NAT 模式的缺点是可能会引入单点故障,因为所有客户端请求都必须通过负载均衡器的 NAT 网络接口。因此,在使用 LVS NAT 模式时,需要考虑故障转移和高可用性的实现。
DR模式
在 LVS 的 DR 模式中,LVS 只负责转发数据包,而不对数据包进行 NAT 处理。具体来说,当客户端发送请求时,请求会到达负载均衡器的虚拟 IP 地址,然后被转发到后端的服务器。服务器响应时,响应数据包直接返回给客户端,不经过负载均衡器。在此过程中,LVS 只负责修改数据包的目的 IP 地址,将其替换为后端服务器的 IP 地址。
我们通过抑制ARP来帮助rs接收来自d的数据包
DR 模式的主要优点包括:
- 可以处理大量的并发请求,因为数据包不需要经过负载均衡器处理;
- 避免了 NAT 处理的性能瓶颈,提高了系统的性能;
- 可以通过后端服务器来处理请求,从而提高了系统的可扩展性和灵活性。
- 在三种模式中压力最小,只需要接受入方向的数据包
需要注意的是,DR 模式需要在后端服务器上进行网络配置,以保证负载均衡器能够将请求正确地转发到后端服务器。此外,DR 模式的缺点是需要配置双向路由,可能会引入网络层面的复杂性和故障。因此,在使用 LVS DR 模式时,需要对网络拓扑和路由协议进行仔细的设计和配置。
基于 CentOS 7 构建 LVS-DR 群集。
yum install ipvsadm首先是安装ipvsadm
lvs director 上的脚本 ================================================================= #!/bin/sh # # Startup script handle the initialisation of LVS # chkconfig: - 28 72 # description: Initialise the Linux Virtual Server for DR # ### BEGIN INIT INFO # Provides: ipvsadm # Required-Start: $local_fs $network $named # Required-Stop: $local_fs $remote_fs $network # Short-Description: Initialise the Linux Virtual Server # Description: The Linux Virtual Server is a highly scalable and highly # available server built on a cluster of real servers, with the load # balancer running on Linux. # description: start LVS of DR LOCK=/var/lock/ipvsadm.lock VIP=192.168.133.151 RIP1=192.168.133.130 RIP2=192.168.133.137 DipName=ens33 . /etc/rc.d/init.d/functions start() { PID=`ipvsadm -Ln | grep ${VIP} | wc -l` if [ $PID -gt 0 ]; then echo "The LVS-DR Server is already running !" else #Set the Virtual IP Address /sbin/ifconfig ${DipName}:10 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev ${DipName}:10 #Clear IPVS Table /sbin/ipvsadm -C #Set Lvs /sbin/ipvsadm -At $VIP:80 -s rr /sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -g /bin/touch $LOCK #Run Lvs echo "starting LVS-DR Server is ok !" fi } stop() { #clear Lvs and vip /sbin/ipvsadm -C /sbin/route del -host $VIP dev ${DipName}:10 /sbin/ifconfig ${DipName}:10 down >/dev/null rm -rf $LOCK echo "stopping LVS-DR server is ok !" } status() { if [ -e $LOCK ]; then echo "The LVS-DR Server is already running !" else echo "The LVS-DR Server is not running !" fi } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: $1 {start|stop|restart|status}" exit 1 esac exit 0
====================================================== RS上的脚本 #!/bin/sh # # Startup script handle the initialisation of LVS # chkconfig: - 28 72 # description: Initialise the Linux Virtual Server for DR # ### BEGIN INIT INFO # Provides: ipvsadm # Required-Start: $local_fs $network $named # Required-Stop: $local_fs $remote_fs $network # Short-Description: Initialise the Linux Virtual Server # Description: The Linux Virtual Server is a highly scalable and highly # available server built on a cluster of real servers, with the load # balancer running on Linux. # description: start LVS of DR-RIP LOCK=/var/lock/ipvsadm.lock VIP=192.168.133.151 . /etc/rc.d/init.d/functions start() { PID=`ifconfig | grep lo:10 | wc -l` if [ $PID -ne 0 ]; then echo "The LVS-DR-RIP Server is already running !" else /sbin/ifconfig lo:10 $VIP netmask 255.255.255.255 broadcast $VIP up /sbin/route add -host $VIP dev lo:10 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce /bin/touch $LOCK echo "starting LVS-DR-RIP server is ok !" fi } stop() { /sbin/route del -host $VIP dev lo:10 /sbin/ifconfig lo:10 down >/dev/null echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce rm -rf $LOCK echo "stopping LVS-DR-RIP server is ok !" } status() { if [ -e $LOCK ]; then echo "The LVS-DR-RIP Server is already running !" else echo "The LVS-DR-RIP Server is not running !" fi } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: $1 {start|stop|restart|status}" exit 1 esac exit 0
脚本完成之后通过chkconfig命令将lvs_dr添加为系统服务,再通过systemctl开启和关闭它。