当前位置: 首页 > article >正文

lvs的DR模式

基于Linux的负载均衡集群软件

· LVS

全称为Linux Virtual Server,是一款开源的四层(传输层)负载均衡软件

· Nginx
支持四层和七层(应用层)负载均衡

· HAProxy
和Nginx一样,也可同时支持四层和七层(应用层)负载均衡

基于Linux的高可用集群软件

· Keepalived
KeepalivedLinux中一个轻量级高可用集群部署软件,最初是为LVS设计的,后加入了VRRP功能,
可以实现集群的心跳检测、虚拟IP漂移等功能

· Heartbeat
Heartbeat的功能与Keepalived功能类似,但是不控制虚拟IP的漂移,相对Keepalived更擅长对资
源服务的控制,配置也比较复杂

· Pacemaker

Pacemaker是一款在Linux中应用非常广泛的开源集群资源管理器,它本身不具备集群心跳检测
机制,需依赖CorosyncHeartbeat,可同时适用于任何规模的集群

集群中的常见概念-VIP和地址漂移

· VIP:虚拟IP。在高可用集群中,一般使用VIP向外提供服务,可避免集群中某台主机宕机后可能引起的业务访问IP发生变化

· 地址漂移:在高可用集群中,VIP从某一台主机迁移到另外一台主机称为地址漂移(对终端来说是透明的,是无法检测到的,速度很快)

 终端直接访问Server A或是Server B都不好,如果发生地址漂移,对终端用户都不好,所以直接访问VIP的IP地址,不论是从11到12,112都能访问。

集群中的常见概念-心跳和脑裂

· 心跳:在高可用集群中,主机之间会相互监控彼此对方的状态,以决定哪台主机提供服务,这一机制称为心跳

· 脑裂:如果节点之间的心跳通信中断或不正常,会导致彼此之间抢夺资源,这种现象称为脑裂(故障现象)

Server A 和Server B是一个整体, 它们会通过串口线缆连接起来,利用其做心跳检测,还有一个千兆接口作为备用路线

集群中的常见概念-代理

代理可分为正向代理和反向代理,一般用于负载均衡集群

正向代理和反向代理是相对于被代理者来说的,正向代理被代理的是客户端,反向代理被代理的是服务端

代理局域网访问互联网                                      发布内网服务器让公网用户访问(安全性更高)

LVS在企业IT架构中的位置

三层架构(这里最后一层存储层省略了)

最外面是客户端

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 

DR 模式

* 负载各节点服务器通过本地网络连接,不需要建立专用的IP隧道

      原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

     优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

     缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

NAT模式

      原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

     优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。

      缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈。

两者的区别:

DR模式不使用调度器为公司网关,而是路由设备,调度器只是分配访问的请求任务而回应的web页面,不经过调度器,直接通过网络设备回应,不容易造成阻塞而且所有节点都使用VIP地址。

在nat模式群集中,LSV负载均衡调度器是所有节点的访问internet的网关服务器其外网口地址也最为整个群集的VIP地址,调度器是整个公司网关任何请求都要经过调度器,包括回应的。

LVS的工作模式-DR

DR模式中,所有的RS需要配置两个地址:RIPVIP

在DR模式中,LVS会通过arp获取到所有RSIP地址和对应的MAC
地址,因此LVS和RS需处于同一二层网络中

当User发送请求到LVS后,LVS保持源目IP地址和端口号不变,同
时将源MAC地址换成自己的MAC地址,目的MAC地址换成调度到
RS MAC进行转发

RS在回响应报文时,源地址是VIP地址,源端口号为提供服务的
端口号,源MAC地址为自己的MAC地址,目的地址为客户端地址,
目的端口号为客户端发起连接请求时的随机端口,目的MAC
址为网关的MAC地址

DR简单实验

本实验共使用四台虚拟机,其中一台配置为LVS服务器,两台用于Nginx服务器的搭建,剩
余一台为Client。其中Nginx服务器可以和上一实验复用,LVS仅需要一个网卡即可,删除
10.0.0.10所在的网卡,并将192.168.1.10所在网卡的地址修改为10.0.0.10。两台Nginx服务
器和LVS服务器处于同一子网中,客户端处于另外一个子网。Nginx服务器和LVS服务器配
置dummy类型的接口接口角于承载VIP。

1、后端服务器(1.12、1.13)批量安装nginx

然后提供一个默认主页

在实际中,后端页面要是一模一样的,这里是为了看效果 

然后覆盖

设为开机自启动

1、绑定vip 

网络上需增加VIP的相关配置

2、修改arp内核配置 

vim /etc/sysctl.conf

在最后加上

修改后立即生效

sysctl -p 

ip a

到这里后端操作就完成了

2、处理代理(1.11)

1、首先绑定VIP

2、安装管理工具 

查看是否有配置 (这里是没有的)

 3、LVS配置

[相关参数说明]
[root@Directory ~]# ipvsadm -help
-A 添加虚拟服务器
-t 设置群集地址(VIP,Virtual IP)
-s 指定负载调度算法
-a 添加真实服务器
-d 删除真实服务器
-r 指定真实服务器(Real Server)的地址
-m 使用NAT模式 :- g、-i分别对应DR、TUN模式
-w 为节点服务器设置权重,默认为1

ipvsadm -At 192.168.1.10:80 -s rr

ipvsadm -at 192.168.1.10:80 -r 192.168.1.12:80 -g 添加后端服务器

ipvsadm -at 192.168.1.10:80 -r 192.168.1.13:80 -g 添加后端服务器

再次查询

3、(1.14)测试

比例是1:1 

脚本-DR设置

首先把之前的操作都清除一下

删除网络

编写脚本

#!/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.1.10
RIP1 = 192 .168.1.12
RIP2 = 192 .168.1.13 DipName = ens160
. /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
设置开机自启

确认是否绑定

  测试

后端脚本

如果做了之前的操作,记得删除一下

编写脚本

#!/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.95.10
. /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

 测试

arp防火墙设置

首先同样把之前的配置修改回去

下载arp

刚下载好的arp里没有任何配置
也可以使用 arptables 实现抑制 arp


http://www.kler.cn/a/543961.html

相关文章:

  • 尚硅谷爬虫note004
  • HCIA项目实践--静态路由的总结和简单配置
  • Debezium日常分享系列之:解码逻辑解码消息内容
  • 操作系统|ARM和X86的区别,存储,指令集
  • Gui-Guider1.8.1 数字时钟控件找不到定义,无法编译
  • C++基础知识学习记录—构造函数
  • 企业级高并发全链路优化:流量分发、边缘防护与服务治理的整合之道
  • 【C++八股】静态局部变量/全局变量/局部变量的区别和使用场景
  • Redis混合持久化
  • 细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法
  • 在Windows 7操作系统,基于llama.cpp本地化部署 deepseek-r1模型的方法 2025-02-08
  • SQL-leetcode—1393. 股票的资本损益
  • 如何使用智能化RFID管控系统,对涉密物品进行安全有效的管理?
  • 计算机网络-MPLS基础概念
  • C++ ——基础进阶
  • Seaweedfs(master volume filer) docker run参数帮助文档
  • 性能优化中的服务器与操作系统优化
  • 华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)
  • 在亚马逊云科技上一键自动部署Falcon3大语言模型
  • 11.推荐系统的安全与隐私保护
  • 对gru的理解
  • 【C++八股】C++内存管理
  • 从360度全景照片到高质量3D场景:介绍SC-Omnigs 3D重建系统
  • redis持久化原理相关面试题剖析
  • 期权帮 | 股指期货交易:规则速览与解读!
  • SpringBoot速成(九)获取用户信息 P9-P10