概述:

在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)

一、负载均衡的作用

负载均衡设备的任务就是作为应用服务器流量的入口,首先挑选最合适的一台服务器,然后将客户端的请求转发给这台服务器处理,实现客户端到真实服务端 的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端 不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。





一个典型的互联网应用的拓扑结构是这样的:



二、负载均衡的类型

负载均衡可以采用硬件设备,也可以采用软件负载。





商用硬件负载设备成本通常较高(一台几十万上百万很正常),所以在条件允许的情况下我们会采用软负载,软负载解决的两个核心问题是:选谁、转发,其中最著名的是LVS(Linux Virtual Server)。

三、软负载——LVS

LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。





LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。





LVS的工作模式主要有4种:





DR





NAT





TUNNEL





Full-NAT





这里挑选常用的DR简单介绍一下:









请求由LVS接收,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS





DR模式下需要LVS和绑定同一个VIP(RS通过将VIP绑定在loopback实现)





一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木





RS收到LVS转发来的包,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS,DR模式是性能最好的一种模式

四、根据ipvsadm工具来实战配置DR模型的实现


命令的主要配置步骤:



Director:

# iptables -t filter -F 

# ifconfig eth0:0 VIP  up

# route add -host VIP dev eth0:0





RSs:

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

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

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

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





# ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up

# route add -host VIP dev lo:0









Director:

# ipvsadm -A -t IP:PORT -s SCHEDULER

# ipvsadm -a -t IP:PORT -r RS1 -g -w WEIGHT

虚拟环境vmware对DR模型的实现


网络拓扑



1.LVS负载均衡器,即VIP和DR的机器





清空防火墙设置(避免和lvs控制器冲突):

# iptables -t filter -F 





安装ipvsadm管理工具

# yum install -y ipvsadm





添加两块网卡





DR:





DIP:192.168.8.100





DEVICE=eth0

IPADDR=192.168.8.100

BROADCAST=192.168.8.255

NETMASK=255.255.255.0

GATEWAY=192.168.8.254

NETWORK=192.168.8.0





VIP:192.168.8.40





# cd /etc/sysconfig/network-scripts/

# cp ifcfg-eth0 ifcfg-eth1

# vim ifcfg-eth1





DEVICE=eth1

IPADDR=192.168.8.40

BROADCAST=192.168.8.255

NETMASK=255.255.255.0

GATEWAY=192.168.8.254

NETWORK=192.168.8.0





开启路由转发功能

# vim /etc/sysctl.conf 

# sysctl -p





将访问192.168.8.40的路由转发至eth1

# route add -host 192.168.8.40 dev eth1

清空规则

# ipvsadm -C





2.rs配置





rs1和rs2都安装apache服务,分别当做web1和web2





# yum install -y httpd

# cd /etc/httpd/conf.d/

删除默认页面

# rm welcome.conf -f

# vim /var/www/html/index.html

<h1>meb2 192m168.8.102</h1>

rs1

192.168.8.101

# cd /etc/sysconfig/network-scripts/

# vim ifcfg-eth0





IPADDR=192.168.8.101

NETWORK=192.168.8.0

NETMASK=255.255.255.0

GATEWAY=192.168.8.254

BROADCAST=192.168.8.255





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

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

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

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





# cd /etc/sysconfig/network-scripts/





# cp ifcfg-lo ifcfg-lo:0





# vim ifcfg-lo:0





DEVICE=lo:0

IPADDR=192.168.8.40

NETMASK=255.255.255.255

BROADCAST=192.168.8.40

ONBOOT=yes

NAME=loopback





# service network restart

将访问192.168.8.40的数据转发到lo:0回环口上

# route add -host 192.168.8.40 dev lo:0





并验证配置是否生效





rs2

192.168.8.102

# cd /etc/sysconfig/network-scripts/

# vim ifcfg-eth0

IPADDR=192.168.8.101

NETWORK=192.168.8.0

NETMASK=255.255.255.0

GATEWAY=192.168.8.254

BROADCAST=192.168.8.255





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

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

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

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





# cp ifcfg-lo ifcfg-lo:0





# vim ifcfg-lo:0





DEVICE=lo:0

IPADDR=192.168.8.40

NETMASK=255.255.255.255

BROADCAST=192.168.8.40

ONBOOT=yes

NAME=loopback





# service network restart





# route add -host 192.168.8.40 dev lo:0





3.对dr进行配置





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

# ipvsadm -a -t 192.168.8.40:80 -r 192.168.8.101 -g

# ipvsadm -a -t 192.168.8.40:80 -r 192.168.8.102 -g





# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.8.40:80 rr

  -> 192.168.8.101:80             Route   1      0          0

-> 192.168.8.102:80             Route   1      0          0

通过同网段的访问可以看到已经实现了负载轮询访问

真实服务器环境实现DR模型


可以看到外网映射是成功的,记得关闭tomcat服务

1.DR和VIP配置





清空防火墙设置(避免和lvs控制器冲突):

# iptables -t filter -F 





安装ipvsadm管理工具

# yum install -y ipvsadm





机器为dell r720的服务器,有4块网卡,此处我们使用其中的EM1和EM2两块网卡





DR:





DIP:192.168.8.70





DEVICE=em1

IPADDR=192.168.8.70

BORADCAST=192.168.8.255

GATEWAY=192.168.8.254

NETMAST=255.255.255.0







VIP:192.168.8.68





DEVICE=em2

IPADDR=192.168.8.68

BROADCAST=192.168.8.255

GATEWAY=192.168.8.254

NETMASK=255.255.255.0





开启路由转发功能

# vim /etc/sysctl.conf 

配置 net.ipv4.ip_forward = 1

# sysctl -p





将访问192.168.8.68的路由转发至EM1

# route add -host 192.168.8.68 dev em2





清空规则

# ipvsadm -C





2.rs配置





rs1和rs2都安装apache服务,分别当做web1和web2





# yum install -y httpd

# cd /etc/httpd/conf.d/

删除默认页面

# rm welcome.conf -f

# vim /var/www/html/index.html

<h1>meb2 192m168.8.102</h1>





修改默认apache访问端口为8888

默认yum方式安装apache配置文件的位置# vim /etc/httpd/conf/httpd.conf





# vim /etc/httpd/httpd.conf





Listen 8888





重启使配置生效

# service httpd restart





rs1

192.168.8.101

# cd /etc/sysconfig/network-scripts/

# vim ifcfg-eth0





IPADDR=192.168.8.101

NETWORK=192.168.8.0

NETMASK=255.255.255.0

GATEWAY=192.168.8.254

BROADCAST=192.168.8.255





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

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

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

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





# cd /etc/sysconfig/network-scripts/





# cp ifcfg-lo ifcfg-lo:0





# vim ifcfg-lo:0





DEVICE=lo:0

IPADDR=192.168.8.68

NETMASK=255.255.255.255

BROADCAST=192.168.8.68

ONBOOT=yes

NAME=loopback





# service network restart

将访问192.168.8.68的数据转发到lo:0回环口上

# route add -host 192.168.8.68 dev lo:0





并验证配置是否生效





rs2

192.168.8.102

# cd /etc/sysconfig/network-scripts/

# vim ifcfg-eth0

IPADDR=192.168.8.101

NETWORK=192.168.8.0

NETMASK=255.255.255.0

GATEWAY=192.168.8.254

BROADCAST=192.168.8.255





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

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

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

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





# cp ifcfg-lo ifcfg-lo:0





# vim ifcfg-lo:0





DEVICE=lo:0

IPADDR=192.168.8.68

NETMASK=255.255.255.255

BROADCAST=192.168.8.68

ONBOOT=yes

NAME=loopback





# service network restart





# route add -host 192.168.8.68 dev lo:0





3.对dr进行配置





# ipvsadm -A -t 192.168.8.68:8888 -s rr

# ipvsadm -a -t 192.168.8.68:8888 -r 192.168.8.101 -g

# ipvsadm -a -t 192.168.8.68:8888 -r 192.168.8.102 -g

# ipvsadm -L -n

注意:

1.无论是在vmware虚拟环境中,还是在真实机器中,必须将dip设置在第一块网卡上,而VIP必须设置在第二块网卡上,否则无法进行负载均衡

如dip分别要配置在vmware的eth0和真实dell服务器的em1网卡中

2.在真实环境中,内网地址很快就能负载均衡成功,如直接访问http://192.168.8.68:8888没有问题

而192.168.8.68映射到外网地址的 193.239.143.212等了差不多半个小时后才生效

LVS负载均衡器DR模型的实现的更多相关文章

  1. LVS的DR模型配置

    LVS的DR模型配置 介绍 下图为DR模型的通信过程,图中的IP不要被扑结构中的IP迷惑,图里只是为了说明DR的通信原理,应用到本例中的拓扑上其工作原理不变. 拓扑结构 服务器 IP地址 角色 Srv ...

  2. 负载均衡集群之LVS的DR模型详解(Diretor Routing)

    LVS的默认模型:默认模型DR DR模型原理图--> 在讲DR模型要点之前,需要了解网络的相关知识: 接收的报文拆解顺序:帧(MAC)-->数据包(IP)-->数据报文(port) ...

  3. keepalived 高可用lvs的dr模型(vip与dip不在同一网段)

    现在rs1和rs2上面安装httpd并准备测试页 [root@rs1 ~]# yum install httpd -y [root@rs1 ~]# echo "this is r1" ...

  4. 集群--LVS的DR模型配置

    1.查看内核是否有IPVS内核模块 grep -i 'ip_vs' /boot/config-2.6.32-431.el6.x86_64

  5. lvs dr 模型配置详解

    前期准备: 两台服务器 note01(lvs服务器) note02(real sever) 1 首先在note01配置子网卡: ifconfig eth0: :2意思是eth0的子接口,随便一个数字就 ...

  6. LVS之NAT模型、DR模型配置和持久连接

    前言:继LVS概述,本篇实现NAT模型和DR模型下的负载均衡. NAT模型: LVS-NAT基于cisco的LocalDirector.VS/NAT不需要在RealServer上做任何设置,其只要能提 ...

  7. LVS跨网段DR模型

    客户端IP地址:172.16.8.147 路由器服务器IP地址:172.16.8.167内网IP地址:192.168.1.3 一.将客户端的网关修改为路由服务器IP地址 vim ifcfg-ens33 ...

  8. LVS nat模型+dr模型

    nat模型 在 rs1 和 rs2  安装httpd  并配置测试页,启动 [root@rs1 ~]# yum install httpd -y[root@rs1 ~]# echo "thi ...

  9. 关于LVS中默认的DR模型图

    虽然常用,但是关于DR模型最大的一个缺点就是Director和RS必须在同一个网络中,通过交换机连接,中间不能有路由

随机推荐

  1. bash执行命令分别输出正常日志和错误日志

    0. 说明 执行bash命令的定时任务时候,希望能把正常的日志输出到一个文件里面,同时如果执行的过程发生异常则把异常日志输出到另一个不同的文件中.方便今后异常排查,极大有利于快速定位出错位置. 需要了 ...

  2. Ubuntu/Unity中更改窗口修饰键Alt为Super

    在Ubuntu中的Unity桌面环境里,可以使用Alt配合鼠标左键拖动窗口,这一方便的设定有许多不方便的地方.和很多的软件有热键上的冲突,比如Visual Stdio Code的多光标控制功能. 注意 ...

  3. c基础:函数参数是 struct(结构),传的是引用,还是值?

    比如函数形式:void func(struct a data1, struct b data2); 答案: 只要不是指针或者数组都是传值,其实指针也是传递的地址值. 追问但是如果这个结构体里面有数组这 ...

  4. Linux网络基本网络配置

    Linux网络基本网络配置方法介绍 网络信息查看 设置网络地址: cat /etc/sysconfig/network-scripts/ifcfg-eth0 你将会看到: DEVICE=eth0 BO ...

  5. springboot的跨域

    https://www.cnblogs.com/520playboy/p/7306008.html 1.对于前后端分离的项目来说,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出 ...

  6. pthread_cleanup_push()/pthread_cleanup_pop()的详解

    一般来说,Posix的线程终止有两种情况:正常终止和非正常终止.线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式:非正常终止是线程在其他线程 ...

  7. Struts2中遇到的问题

    问题1: 最近在学习的时候用到了Struts2.5,在一系列操作之后Tomcat部署成功了,然而之后在测试的时候却出现了问题,网页无法正常响应,并且报出了Wrong method was define ...

  8. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  9. Java入门系列(十)Java IO

    概述 总体而言,java的读写操作又分为两种:字符流和字节流. 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件. 什么是流? ...

  10. luogu 2294 狡猾的商人 带权并查集

    此题做法多啊 带权并查集,区间dp,前缀和,差分约束 1.自己写的前缀和, 11 #include<bits/stdc++.h> #define rep(i,x,y) for(regist ...