Lvs Dr


原文链接: Lvs Dr

3、DR模式(直接路由模式)

Virtual server via direct routing (vs/dr)

DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

DR模式是互联网使用比较多的一种模式。

DR模式原理图:

wKioL1LI1dqyFjlyAAC0xTSJtmo980.jpg

DR模式原理过程简述:

VS/DR模式的工作流程图如上图所示,它的连接调度和管理与NAT和TUN中的一样,它的报文转发方法和前两种不同。DR模式将报文直接路由给目标真实服务器。在DR模式中,调度器根据各个真实服务器的负载情况,连接数多少等,动态地选择一台服务器,不修改目标IP地址和目标端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送。因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,真实复位是一定能够收到由LB发出的数据包。真实服务器接收到请求数据包的时候,解开IP包头查看到的目标IP是VIP。(此时只有自己的IP符合目标IP才会接收进来,所以我们需要在本地的回环借口上面配置VIP。另:由于网络接口都会进行ARP广播响应,但集群的其他机器都有这个VIP的lo接口,都响应就会冲突。所以我们需要把真实服务器的lo接口的ARP响应关闭掉。)然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP。

DR模式小结:

1、通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。

2、请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)

3、因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面

4、RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。

5、RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。

6、由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。

负载均衡端:
1、安装准备,需开启内核转发
NAT由于数据包来回都需要经过调度器,因此,要开启内核转发,也包括iptables防火墙的forward功能。(DR和TUN都不需要)
sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf
sysctl -p

2、安装依赖包
yum install libnl* popt* -y

3、yum安装lvs
3.1、安装ipvsadm管理工具

  yum install ipvsadm -y

3.2、因为lvs是工作在内核层面的所以要做个软连接

  ln -s /usr/src/kernels/`uname -r` /usr/src/linux

3.3、查看lvs内核

  lsmod|grep ip_vs

3.4、如果没有执行以下命令,ip_vs模块加载到内核

  /sbin/ipvsadm 或 modprobe ip_vs

4、配置负载均衡服务
4.1、添加虚拟VIP

  ifconfig eth0:0 10.0.0.1/24 up
  ip addr add     10.0.0.1/24 dev eth0 label eth0:0

4.2、工作中需要做DNS域名解析

4.3、清空所有规则

  ipvsadm -C

4.4、手工添加一个virtual server

  ipvsadm -A -t 10.0.0.1:80 -s wrr -p 20

4.5、手动添加两个RS节点

  ipvsadm -a -t 10.0.0.1:80 -r 10.114.0.15:80 -g -w 1
  ipvsadm -a -t 10.0.0.1:80 -r 10.114.0.16:80 -g -w 1

4.6、设置一个超时时间

  ipvsadm --set 30 5 60

4.7、查看配置

  ipvsadm -Ln

说明:LVS默认就有健康检查和剔除功能

5、手工绑定RS端的VIP、添加主机路由和ARP抑制
5.1、每台RS端执行

  ip addr add 10.0.0.1/32 dev lo label lo:1
  route add -host 10.0.0.1 dev lo

5.2、抑制ARP(所有RS节点)

  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/all/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

6、删除方法

  ipvsadm -D -t 10.0.0.1:80
  ipvsadm -d -t 10.0.0.1:80 -r 10.114.0.15
  ipvsadm -d -t 10.0.0.1:80 -r 10.114.0.16

7、ipvsadm生产常用命令组合

  ipvsadm -Lnc
  ipvsadm -Ln --timeout
  ipvsadm -Ln --stats
  ipvsadm -Ln --sort
  ipvsadm -Ln --thresholds
  watch ipvsadm -L -n
  watch -n 1 ipvsadm -L -n

LVS安装小结:
1、Centos5.X 安装lvs,使用1.24版本。
2、Centos6.4安装lvs,使用1.26版本,并且需要先安装yum install libnl* popt* -y
3、安装lvs后,需要执行/sbin/ipvsadm 或 modprobe ip_vs

LVS DR 模式

在 LVS 的 DR 模式下通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同 TUN 模式一样,DR模式可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。

LVS 的 DR 模式部署

DR 模式下,请求流量经过 LVS,后端服务器直接响应客户端。前端一台路由器,只有一个公网IP,所有服务器只有一块网卡。

image

  • 公网IP地址 112.2.21.88 内网 VIP 地址 10.10.24.88
  • 路由器配置 WAN: 112.2.21.88 LAN: 10.10.24.1
  • LVS服务器 eth0: 10.10.24.10 和 10.10.24.88
  • RS1服务器 lo: 10.10.24.88 eth0: 10.10.24.21
  • RS2服务器 lo: 10.10.24.88 eth0: 10.10.24.22
  • RS3服务器 lo: 10.10.24.88 eth0: 10.10.24.23

前端路由器配置

将公网 IP 地址映射到内网 VIP 地址。所有服务器默认网关为 10.10.24.1。以思科路由器为例添加 IP 映射。

Router> enable
Router# configure terminal
Router(config)# ip nat inside source static 10.10.24.88 112.2.21.88
Router(config)# end

如果不需要前端路由器,也就是 LVS 直接放在公网上,可以不需要配置路由器,只需要将内网 VIP 地址修改为公网 IP 地址即可

LVS 服务器配置

配置网卡 IP 地址

$ ip link set eth0 up
$ ip addr add 10.10.24.10/24 dev eth0
$ ip addr add 10.10.24.88/32 broadcast 10.10.24.88 dev eth0
$ ip route add default via 10.10.24.1

配置 LVS 负载均衡,添加 3 台后端服务器节点

$ ipvsadm -A -t 10.10.24.88:80 -s rr
$ ipvsadm -a -t 10.10.24.88:80 -r 10.10.24.21 -g
$ ipvsadm -a -t 10.10.24.88:80 -r 10.10.24.22 -g
$ ipvsadm -a -t 10.10.24.88:80 -r 10.10.24.23 -g
$ ipvsadm -ln

RS1-3 服务器配置

$ echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
$ echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
$ echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
$ echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
$ ip link set eth0 up
$ ip addr add 10.10.24.21/24 dev eth0
$ ip addr add 10.10.24.88/32 broadcast 10.10.24.88 dev lo
$ ip route add default via 10.10.24.1
`