美文网首页
LVS nat模式和dr模式

LVS nat模式和dr模式

作者: fengkaipeng | 来源:发表于2017-08-21 22:39 被阅读312次

nat模式:

本质是多目标IP的DNAT模式,就是通过修改目标IP来实现调度,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发。
nat模式有以下几个特点:

  • RIP和DIP必须在同一个IP网络,且应该使用私网地址;
    RS的网关要指向DIP
  • 请求报文和响应报文都必须经由Director转发,Director
    易于成为系统瓶颈
  • 支持端口映射,可修改请求报文的目标PORT
  • VS必须是Linux系统,RS可以是任意OS系统

我们先来看下nat模式的一次完整的流程,如下图所示,分为6个步骤:
1.客户端发送请求,此时源ip为cip(客户端ip),目标Ip为vip(就是调度器的对外Ip)
2.到达调度器时,经过PREROUTING钩子,由于目标IP为vip,所以转向INPUT链
3.INPUT链上有IPVS规则,将本该发送到INPUT的请求修改目标IP,从VIP改为RIP,然后转到OUTPUT链
4.OUTPUT链将转发的请求发送到RS上,此时的源IP为CIP,目标IP为RIP
5.请求报文到达RS后,RS构建响应报文并发送给VS,此时的源IP为RIP,目标IP为VS
6.最后由VS将响应报文转发给客户端

所以针对这几个特点,我们实现nat时,需要注意将DIP和RIP设在同一IP网络,RIP的网关要指向DIP。

实验:实现nat模式

1.搭建环境:
为了防止selinux和iptables对实验的影响,我们在实验之前先将所有selinux策略临时调为0,将iptables服务关闭

  • 客户机:192.168.200.101/24
  • 调度器:VIP192.168.200.123/24 DIP172.16.251.34/16
  • 节点rs1:172.16.254.122/16, 网关指向调度器DIP172.16.251.34/16
  • 节点rs2:172.16.254.133/16, 网关指向调度器DIP172.16.251.34/16
    2.由于调度器上需要转发请求,所以需要在内核中开启转发功能:
    在调度器上,执行如下步骤
[root ~]$vim /etc/sysctl.conf
修改这一行,将0改为1,表示开启转发功能
net.ipv4.ip_forward = 1
[root ~]$sysctl -p       #读取配置文件,显示以下内容证明修改成功
net.ipv4.ip_forward = 1
...

3.添加调度器
在调度器上,执行以下步骤

[root ~]$ yum -y install ipvsadm     #安装ipvaadm工具
[root ~]$ ipvsadm -A -t 192.168.200.123:80 -s rr   #设置调度器,调度算法为rr(轮询)

4.添加节点
在调度器上,执行以下步骤

[root ~]$ipvsadm -a -t 192.168.200.123:80 -r 172.16.254.122 -m  #添加节点,模式为-m(nat模式)
[root ~]$ipvsadm -a -t 192.168.200.123:80 -r 172.16.254.133 -m
[root ~]$ipvsadm -Ln                         
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.200.123:80 rr
  -> 172.16.254.122:80            Masq    1      0          0         
  -> 172.16.254.133:80            Masq    1      0          0  

5.安装并启用httpd服务
在两台节点上,都安装httpd

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

然后在rs1上:

[root@localhost ~]# echo "rs1" > /var/www/html/index.html
[root@localhost ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
                                                           [  OK  ]

在rs2上:

[root@localhost ~]# echo "rs2" > /var/www/html/index.html 
[root@localhost ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
                                                           [  OK  ]

6.测试
编写一个简单的for循环,执行curl 调度器,查看获取到的信息

[root@vs ~]# for i in {1..10};do curl 192.168.200.123;done
rs2
rs1
rs2
rs1
rs2
rs1
rs2
rs1
rs2
rs1

我们看到获取到了节点的http页面,轮询效果也实现了,实验成功

DR模式

DR模式:Direct Routing,就是直接路由模式,LVS默认模式,应用最广泛
,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP
所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的
MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
由于DR模式是通过MAC地址来转发请求的,源IP和目标IP都不变,所以响应报文直接就可以通过IP地址给客户端返回响应报文。所以vs和rs都要配置VIP,这样才能将相应报文直接返回给客户端,但是配置相同的VIP路由器将请求数据转发过来时,就不一定是走调度器了,也可能走某一个节点,而且调度器和节点之间会IP地址冲突。针对这种情况,我们有三种解决方法:
(1)在前端网关做静态绑定VIP和VS的MAC地址
(2)在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
(3)在RS上修改内核参数以限制arp通告及应答级别
arp_announce
arp_ignore
我们这次实验使用第三种方式
请求过程中的包头地址转换情况如下图所示

实验步骤

1.环境:
关闭selinux和iptables

  • 客户端:172.16.254.33、16
  • 路由器:192.168.200.222/24,172.16.251.170/16,开启转发功能
  • 调度器:VIP172.16. 123.122/32 DIP172.16.251.34/16 网关172.16.251.170
  • 节点rs1:VIP172.16. 123.122/32 172.16.254.122/16 网关172.16.251.170
  • 节点rs2: VIP172.16. 123.122/32 172.16.254.111/16 网关172.16.251.170
    2.在两台rs上执行
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore   #忽略arp广播   
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce   
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@localhost ~]# ifconfig lo:0 172.16.123.122 netmask 255.255.255.255 broadcast  172.16.123.122 up    #在lo口上设置VIP
[root@localhost ~]# route add -host 172.16.123.122 dev lo:0   #设置路由确保VIP能将回应包发出去
[root@localhost ~]# yum -y install httpd    #安装httpd服务
[root@localhost ~]# echo "rs1" > /var/www/html/index.html    #写入测试主页文件,注意这里两台rs上不一样,rs1上就echo rs1,rs2上写rs2
[root@localhost ~]# service httpd start   #启动httpd服务

3.在VS调度器中执行如下操作

ifconfig eth1:0 172.16.123.122 netmask 255.255.255.255 broadcast 172.16.123.122 up  #在eth1口上设置VIP
[root@localhost ~]#  yum -y install ipvsadm   #安装ipvsadm工具
[root@localhost ~]# ipvsadm -A -t 172.16.123.122:80 -s rr
[root@localhost ~]#  ipvsadm -a -t 172.16.123.122:80 -r 172.16.254.122 -g
[root@localhost ~]#   ipvsadm -a -t 172.16.123.122:80 -r 172.16.254.111 -g

4.路由器上开启转发功能:

[root@localhost network-scripts]# vim /etc/sysctl.conf
修改如下内容
net.ipv4.ip_forward = 1
[root@localhost network-scripts]# sysctl -p     #读取配置文件
net.ipv4.ip_forward = 1

5在客户端上验证:

[root@vs ~]# for i in {1..10};do curl 192.168.123.122;done
rs2
rs1
rs2
rs1
rs2
rs1
rs2
rs1
rs2
rs1

实验成功

相关文章

  • LVS 简介

    集群类型 lvs-nat 模式 lvs-dr 模式 lvs-tun 模式 lvs-fullnat 模式 LVS 工...

  • 架构设计之:LVS 三种模式

    LVS三种模式 ● NAT:网络地址转换模式● DR:直接路由模式● TUN:隧道模式 LVS/NAT 流程 客户...

  • LVS的三种工作模式

    一、LVS的三种工作模式 LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用...

  • LVS nat模式和dr模式

    nat模式: 本质是多目标IP的DNAT模式,就是通过修改目标IP来实现调度,通过将请求报文中的目标地址和目标端口...

  • LVS DR

    LVS lvs 搭建略 LVS 的三种工作模式 lvs DR(直接路由) lvs NAT(网络地址转换) lv...

  • LVS三种模式(转)

    LVS三种(LVS-DR,LVS-NAT,LVS-TUN)模式的简要配置 LVS是什么: http://www.l...

  • ipvsadm搭建DR模式配置负载均衡LVS

    上一篇文章-ipvsadm搭建NAT模式配置负载均衡LVS,完成了NAT模式配置负载均衡,今天测试DR模式配置负...

  • LVS DR模式搭建、keepalived + LVS

    目录 一、LVS DR模式搭建二、keepalived + LVS 一、LVS DR模式搭建 实验环境:#假设以下...

  • lvs配置使用

    lvs工作原理:待补充 三种模式: NAT、DR、TUN、FULLNATnat:访问流程CIP>>VIP>>DIP...

  • lvs配置

    LVS/NAT 配置 LVS/DR 配置

网友评论

      本文标题:LVS nat模式和dr模式

      本文链接:https://www.haomeiwen.com/subject/ectcdxtx.html