LVS-DR负载均衡模型的RIP和VIP在不同网络的实现

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介:

LVS-DR模型架构图解:

        (172.16.0.1/16,192.168.0.254/24,192.168.1.254/24)

                            Router

                                        LVS Server  DIP:192.168.0.30/24 VIP:172.16.31.54/18

客户端IP:192.168.1.31/24   SW          WEB1:Real Server1 DIP:192.168.0.31/24 VIP:172.16.31.54/18

                                        WEB2:Real Server2 DIP:192.168.0.131/24 VIP:172.16.31.54/18

客户端和三台服务器分别连接SW,SW连接Router


一.实验环境介绍

路由器:存在多个网络 172.16.0.1,192.168.0.254,192.168.1.254

交换机:连接不同网络的主机

客户端:Windos XP;客户端IP地址为:192.168.1.31/24

LVS:Director 负载均衡服务器,其DIP和VIP在不同网段;

RS:Real Server;后端web服务器;其RIP和VIP在不同网段;

 

二.地址规划

VIP使用172.16.0.0/16网络

RIP使用192.168.0.0/24网络

 

1.Real Server的RIP的规划:

RS1:192.168.0.31/24

RS2:192.168.0.131/24

 

2.Director的LVS Server的地址规划:

DIP:192.168.0.130/24

VIP:172.16.31.54/16

 

3.客户端IP规划:

172.16.31.31/16或者192.168.1.31/24

RS响应客户端请求报文,需要将网关指向192.168.0.254/24,由192.168.0.254转发其响应报文到172.16.31.0/16或者192.168.1.0/24这个网络中来;

更真实的设计:将客户端的IP地址设置成192.168.1.31/24来实现


三.DR模型实现负载均衡的工作原理

     上面说了NAT模型的实现方式,那么NAT模型有个缺陷,因为进出的每个数据包都要经过Director Server,当集群系统负载过大的时候Director Server将会成为整个集群系统的瓶颈,那么DR模型就避免了这样的情况发生,DR模型在只有请求的时候才会经过Director Server, 回应的数据包由Real Server 直接响应用户不需要经过Director Server,其实三种模型中最常用的也就是DR模型了,下面来说DR模型具体是怎么实现负载均衡的,根据上图,

1.首先客户端用户用CIP请求VIP;

2.根据上图可以看到,不管是Director Server还是Real Server上都需要配置VIP,那么当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP,此时路由器会发广播问谁是VIP,那么我们集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或者使用一种机制不让Real Server 接收来自网络中的ARP地址解析请求,这样一来用户的请求数据包都会经过Director Servre;

3.当Director Server收到用户的请求后根据此前设定好的调度算法结果来确定将请求负载到某台Real Server上去,假如说此时根据调度算法的结果,会将请求负载到Real Server 1上面去,此时Director Server 会将数据帧中的目标MAC地址修改为Real Server1的MAC地址,然后再将数据帧发送出去;

4.当Real Server1 收到一个源地址为CIP目标地址为VIP的数据包时,RealServer1发现目标地址为VIP,而VIP是自己,于是接受数据包并给予处理,当Real Server1处理完请求后,会将一个源地址为VIP目标地址为CIP的数据包发出去,此时的响应请求就不会再经过Director Server了,而是直接响应给用户;

 

四.架构实现

 

1.LVS Server配置

DIP设置:

[root@lvs network-scripts]# pwd

/etc/sysconfig/network-scripts

[root@lvs network-scripts]# cat ifcfg-eth0

DEVICE="eth0"

BOOTPROTO="static"

HWADDR="08:00:27:FF:73:49"

NM_CONTROLLED="yes"

ONBOOT="yes"

TYPE="Ethernet"

IPADDR=192.168.0.130

NETMASK=255.255.255.0

GATEWAY=172.16.0.1


VIP设置:

(1).不同网络:

[root@lvs network-scripts]#ifconfig eth0:0 172.16.31.54/16 up

(2).同一网络的只广播给自己;本实验不需要设置广播

[root@lvs network-scripts]#ifconfig eth0:0 172.16.31.54 netmask 255.255.255.255 broadcast 172.16.31.54 up

 

配置路由:

[root@lvs network-scripts]# route add -host 172.16.31.54 dev eth0:0

 

 

2.Real Server设置:

RS1的网卡的ip配置:


[root@node1 network-scripts]# pwd

/etc/sysconfig/network-scripts

[root@node1 network-scripts]# cat ifcfg-eth0

DEVICE="eth0"

BOOTPROTO="static"

HWADDR="08:00:27:41:D4:C9"

NM_CONTROLLED="yes"

ONBOOT="yes"

TYPE="Ethernet"

IPADDR=192.168.0.31

NETMASK=255.255.255.0

GATEWAY=172.16.0.1

 

需要指定网关:

[root@node1 network-scripts]#route add default gw 192.168.0.254

 

3.在RS上配置arptables:

[root@node1 network-scripts]#echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

[root@node1 network-scripts]#echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce

[root@node1 network-scripts]#echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore

[root@node1 network-scripts]#echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

 

在RS上设置VIP地址:

[root@node1 network-scripts]#ifconfig lo:0 172.16.31.54 netmask 255.255.255.255 broadcast 172.16.31.54 up

 

在RS上添加路由:

[root@node1 network-scripts]#route add-host 172.16.31.54 dev lo:0

 

4.启动web服务;此处安装了LAMP架构+wordpress,可以参考我前面写的文章,这里就不重复了。

#service httpd start

#curl http://192.168.0.31

#curl http://172.16.100.8

 

5.RS2的配置:跟RS1一致的哦!

设置RIP地址: 

#ifconfig eth0 192.168.0.131/24 up

#route add default gw 192.168.0.254

配置arptables:

#echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

#echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce

#echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore

#echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

  

设置VIP地址:

#ifconfig lo:0 172.16.31.54 netmask 255.255.255.255 broadcast 172.16.31.54 up

  

添加路由:

#route add -host 172.16.31.54 dev lo:0

  

#启动web服务

#service httpd start

#curl http://192.168.0.131

#curl http://172.16.31.54

 

 

6.LVS Server上定义集群服务:

#ipvsadm  -A  -t 172.16.31.54:80 -s rr

#ipvsadm  –a  -t 172.16.31.54:80 -r 192.168.0.31 -g

#ipvsadm  –a  -t 172.16.31.54:80 -r 192.168.0.131 –g

 

设置完成后访问网页测试:

http://www.stu31.com/wp/


我们在LVS上查看一下连接状态:

[root@lvs ~]# ipvsadm -A -t 172.16.31.54:80 -s rr

[root@lvs ~]# ipvsadm -a -t 172.16.31.54:80 -r 192.168.0.31 -g

[root@lvs ~]# ipvsadm -a -t 172.16.31.54:80 -r 192.168.0.131 -g

[root@lvs ~]# ipvsadm -L -n

至此:LVS-DR模式的负载均衡实验完成!!!



本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/1964534,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
12月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
367 2
|
12月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
310 1
|
12月前
|
JSON 监控 网络协议
干货分享“对接的 API 总是不稳定,网络分层模型” 看电商 API 故障的本质
本文从 OSI 七层网络模型出发,深入剖析电商 API 不稳定的根本原因,涵盖物理层到应用层的典型故障与解决方案,结合阿里、京东等大厂架构,详解如何构建高稳定性的电商 API 通信体系。
|
12月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
494 60
|
12月前
|
安全 调度
基于Reactor模型的高性能网络库之核心调度器:EventLoop组件
它负责:监听事件(如 I/O 可读写、定时器)、分发事件、执行回调、管理事件源 Channel 等。
509 57
基于Reactor模型的高性能网络库之时间篇
是一个用于表示时间戳(精确到微秒)**的简单封装类
327 57
|
9月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
10月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
624 2
|
10月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
243 8
|
11月前
|
算法 安全 网络安全
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
380 0

相关实验场景

更多