LVS模式一:DR模式(ipvsadm)

负载均衡(Load Balance 简称LB)分为硬件负载均衡和软件负载均衡

  • 硬件负载均衡:F5:太贵
  • 软件负载均衡:
  • lvs(4层):
  • haproxy
  • nginx (七层)
  • httpd(proxy balance)
  • varnish

lvs 基础知识

lvs指的是Linux虚拟服务器,是一个虚拟的服务器集群系统。其主要用于多服务器的负载均衡。

  • 优点: 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。 易用,配置非常简单,且有多种负载均衡的方法。
    稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。 另外可扩展性也非常好。

lvs的定义:

  • LVS的全称是Linux virtual
    server,即Linux虚拟服务器,它是封装在linux的内核中的。之所以是虚拟服务器,是因为LVS自身是个负载均衡器,不接受处理请求,而是将请求转发至位与它后端真正的服务器realserver上。
  • LVS是四层(传输层tcp/udp),七层(应用层)的负载均衡工具,只不过大众一般都使用它的四层负载均衡功能ipvs,而七层的内容分发负载工具ktcpvs(kernel
    tcp virtual server)不怎么完善,使用的人并不多。
  • ipvs是集成在内核中的框架,可以通过用户空间的程序ipvsadm工具来管理,该工具可以定义一些规则来管理内核中的ipvs。就像iptables和netfilter关系一样。

lvs数据流向:附着于netfiler:从外部进来第一层经过防火墙(三表五链)

  • 第一种方式:PREROUTING —> INPUT(流向内部)
  • 第二种方式:PREROUTING----> FORWARD —> POSTROUTING(转发)—>OUTPUT—>POSTROUTING(流向外部)
  • 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间(kernel space)
  • PREROUTING链首先会接收到用户请求,判断目标IP确定是否为本机IP,是的化将数据包发往INPUT链
  • IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
  • POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

lvs是由两部份组成的:

  • ipvs(ip virrual server):一段代码(工作在内核)是真正生效实现调度的代码
  • ipvsadm(工作在用户空间,负责为ipvs内核框架编写规则)
    ipvsadm(工作在用户空间的命令行工具 写具体的规则 用于管理集群服务)/ipvs(工作在内核中的netfilter
    input函数上)

lvs 相关术语

  • DS:Director Server。指的是前端负载均衡器节点。

  • RS:Real Server。后端真实的工作服务器。

  • VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址(目的IP)。

  • DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

  • RIP:Real Server IP,后端服务器的IP地址。

  • CIP:Client IP,访问客户端的IP地址(源IP)。

lvs 四种工作模式

  • DR(直接路由)模式

  • TUN(隧道)模式

  • NAT (网络地址转换)模式

  • Full-Nat模式

LVS模式一:DR(Direct Routing)直接路由模式

DR模式工作的数据流向: Client–>PREROUTING —> INPUT(将CIP的MAT地址,改成CIP的MAT地址,(lvs在此强行改变数据流向))—>ipvs(VIP的MAT地址转为RS的MAT地址)—>POSTROUTING—> RS—>lo—>eth0 -->CIP

客户端请求 VIP 时,通过因特网先到达调度器,调度器会根据调度算法将这个请求转发给真实的服务器,转发的过程中仅仅是修改了数据报文中的 MAC地址。当真实服务器接受到数据请求后进行处理,然后发送响应给客户端,但此时的源 IP 为真实的服务器 IP,即 RIP,目标 IP 为客户端 IP,即 CIP,但是客户端并没有请求RIP,所以客户端是不会接收数据响应,所以,就要修改源 IP 为 VIP,但是不可以将 VIP 设置在出口网卡上,否则会响应客户端的 arp 请求。失去了调度的意义,因此要在 lo 接口配置 VIP,并且将 VIP 隐蔽,即设置 NETMASK 为255.255.255.255,这样,数据响应从真实服务器出去的时候的源 IP 是 VIP,目的 IP 是 CIP,客户端就会接收次数据响应,从真实服务器到客户端是通过Internet。

  • DR 模式需要调度器与真实服务器在同一个物理网络。即通过交换机或者高速的HUB相连,中间没有隔有路由器。

  • VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文。

  • 所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。

    优点:性能最高
    缺点:要求调度器的网卡必须与物理网卡在一个物理网段上

DR模式工作原理:
在这里插入图片描述

(1)客户端发送请求被director接收后,director根据负载均衡算法改写数据帧的目标MAC地址为后端某RS的MAC地址,并将该数据包转发给该RS(实际上是往整个局域网发送,但只有该MAC地址的RS才不会丢弃)
(2)RS接收到数据包后,发现数据包的目标IP地址为VIP,而RS本身已经将VIP配置在了自身的某个接口上,因此RS会接收这个数据包并进行处理。
(3)处理完毕后,RS直接将响应报文响应给客户端。此时数据包源IP为VIP,目标IP为CIP。

DR模式时的基本属性和要求:

  • Realserver的RIP和Director的DIP必须处于同一网段中,以便使用MAC地址进行通信。
  • realserver上必须配置VIP地址,以便接收director转发过来的数据包,以及作为响应报文的源IP。
  • realserver响应给客户端的数据包的源和目的IP为VIP—>CIP
  • director只处理入站请求,响应请求由realserver完成。

实验环境:
rhel6 selinux and iptables disabled
主机环境:

主机名IP
hetoto1172.25.12.1
hetoto2172.25.12.2
hetoto3172.25.12.3

配置hetoto2
1.安装apache

[root@hetoto2 ~]# yum install httpd -y

2.编写前端文件

[root@hetoto2 ~]# cd /var/www/html
[root@hetoto2 html]# vim index.html
<h1>www.westos.org - hetoto2</h1>

配置hetoto3:同上

[root@hetoto3 ~]# yum install httpd -y
[root@hetoto3 ~]# cd /var/www/html
[root@hetoto3 html]# vim index.html
<h1>www.westos.org - hetoto3</h1>
  • Load Balance: 172.25.12.1(hetoto1)
  • Virtual IP:172.25.12.100
  • RealServer1:172.25.12.2 (hetoto2)
  • RealServer2:172.25.12.3(hetoto3)
  • 物理机内网 : 172.25.12.250

一、配置 ipvsadm

1.在虚拟服务器上配置更高级yum源

[root@hetoto1 ~]# vim /etc/yum.repos.d/rhel-source.repo 
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.12.250/rhel6.5
enabled=1
gpgcheck=0

[LoadBalancer]        ##负载均衡
name=LoadBalancer
baseurl=http://172.25.12.250/rhel6.5/LoadBalancer
enabled=1
gpgcheck=0

在这里插入图片描述

[root@hetoto1 yum.repos.d]# yum clean all
[root@hetoto1 yum.repos.d]# yum repolist

2.在hetoto1(虚拟服务器)上安装ipvsadm(调度器)

[root@hetoto1 yum.repos.d]# yum install ipvsadm -y 

3.添加策略

(1)添加一台虚拟设备

-A   增加一台虚拟设备
-a   添加真实服务器的操作
-t   tcp服务地址
-s   调度算法(10中调度算法rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-r   对应的真实ip
-g   rh(路由)
rr   调度算法:轮询

(2)添加后端实际服务器

[root@hetoto1 ~]# ipvsadm -A -t 172.25.12.100:80 -s rr
[root@hetoto1 ~]# ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.2:80 -g
[root@hetoto1 ~]# ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.3:80 -g

(3)保存策略

[root@hetoto1 ~]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

4.显示调度次数ipvsadm -L (-n不解析)

[root@hetoto1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.12.100:http rr
  -> hetoto2:http                 Route   1      0          0         
  -> hetoto3:http                 Route   1      0          0         
[root@hetoto1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.12.100:80 rr
  -> 172.25.12.2:80               Route   1      0          0         
  -> 172.25.12.3:80               Route   1      0          0    

在这里插入图片描述
5.添加VIP
给所有的服务器把 VIP 地址配置在各自的 Non­ARP 网络设备上

[root@hetoto1 ~]# ip addr add 172.25.12.100/24 dev eth0
[root@hetoto2 html]# ip addr add 172.25.12.100/32 dev eth0
[root@hetoto3 html]# ip addr add 172.25.12.100/32 dev eth0

6.将hetoto2,和hetoto3的httpd服务都打开

[root@hetoto2 html]# /etc/init.d/httpd start
[root@hetoto3 html]# /etc/init.d/httpd start

7.测试:

以上情况,hetoto1,2,3都有可能被访问到
如果绑定的MAC地址是hetoto1,则在hetoto2,3轮询
如果绑定的MAC地址是hetoto2或hetoto3的,那么我们会发现,在测试端根本不会形成轮询,而是直接去了MAC绑定的后端服务器 (显然这样在企业中是不允许的)

  • 绑定的MAC地址是hetoto2或hetoto3的情况
    在这里插入图片描述
  • arp -an | grep 100 查看绑定的MAC地址

在这里插入图片描述

  • 发现绑定的就是hetoto3的MAC地址

在这里插入图片描述

  • 删除现有绑定MAC地址
[root@foundation12 kiosk]# arp -d 172.25.12.100
  • arp -an | grep 100 查看绑定的MAC地址
    在这里插入图片描述
  • 绑定的MAC地址是hetoto1的情况
    在这里插入图片描述

如何避免这种情况实现?

  • 要避免这种情况,要求只能绑定hetoto1(调度器)的MAC地址,所以我们要配置hetoto2和hetoto3的arp路由策略
  • 在hetoto2和hetoto3中下载yum install -y arptables_jf
  • 为arptables网络的用户控制过滤的守护进程 防止在物理机中测试时直接访问hetoto2和hetoto3

配置hetoto2

[root@hetoto2 html]# yum install  arptables_jf -y
# 当网内广播需要172.25.12.100这个ip时,它丢弃所有网内的请求
[root@hetoto2 html]# arptables -A IN -d 172.25.12.100 -j DROP
# 当它自身需要在网内发包时,伪装为自己原本的ip172.25.12.2
[root@hetoto2 html]# arptables -A OUT -s  172.25.12.100 -j mangle --mangle-ip-s 172.25.12.2
#保存添加的两条策略
[root@hetoto2 html]# /etc/init.d/arptables_jf save
#打开arptables服务
[root@hetoto2 html]# /etc/init.d/arptables_jf start

配置hetoto3:

##hetoto3和hetoto2一样
[root@hetoto3 html]# yum install arptables_jf -y
[root@hetoto3 html]# arptables -A IN -d 172.25.12.100 -j DROP
[root@hetoto3 html]# arptables -A OUT -s  172.25.12.100 -j mangle --mangle-ip-s 172.25.12.3

[root@hetoto3 html]# /etc/init.d/arptables_jf save
[root@hetoto3 html]# /etc/init.d/arptables_jf start

再次测试:
1.先删除现有绑定MAC地址

[root@foundation12 kiosk]# arp -d 172.25.12.100   

2.测试端测试curl 172.25.12.100(出现轮叫,且数据经过调度器)在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值