文章目录
- NAT模式
- DR模式
- 基于 CentOS 7 构建 LVS-DR 群集。
- 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。
- 基于 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开启和关闭它。