zoukankan      html  css  js  c++  java
  • Linux lvs-DR模式配置详解

    本篇文档主要是记录DR模式实现过程,以及各配置步骤的原理。“lvs三种模式工作原理”中描述了LVS的NAT、DR、TUN三种模式的工作原理。

    DR模式是通过director将报文源和目标MAC地址修改,发送给RS,RS将响应报文直接发送给client。

    部署环境

    LVS服务器(DS)  DIP:172.30.100.111  VIP:172.30.100.1
    nginx1服务器(RS)  RIP:172.30.100.126  VIP:172.30.100.1
    nginx2服务器(RS)  RIP:172.30.100.127  VIP:172.30.100.1

    确保三台机器分别配置了对应的本地静态地址DIP和RIP,VIP稍后配置。

    LVS服务器配置

      LVS是被编译进内核中,主要分为两部分ipvs和ipvsadm,ipvs是LVS软件核心,是运行在LB上的,这是个基于ip层的负载均衡;ipvsadm是用户空间的集群管理工具。

    lsmod |grep ip_vs
    # 确保内核加载了lvs模块
    yum install -y ipvsadm
    # 安装用户管理工具
    

      要想起到负载均衡效果,那么所有请求报文必须发往LVS服务器(DS),然后DS根据指定算法分发到后端服务器上,因此DS必须配置VIP地址,VIP是与公网client通信地址,这样DS才能接受到请求报文进行分发。

    ifconfig eth0:0 172.30.100.1 netmask 255.255.255.255
    # 在LVS服务器上添加一个地址为VIP的虚拟网卡eth0:0
    

      

    后端服务器配置

      DR模式只是针对源和目标MAC地址做出修改,源和目标IP还是不变;当请求报文由LVS服务器处理后发送到后端服务器RS上,RS拆封报文时会发现目标MAC是自己的MAC地址,但是目标IP是VIP,与本地IP地址不符合,那么RS就会认为不是发给自己的报文,所以此时需要在RS上配置VIP,这样RS就可以接受目标地址为VIP的请求报文了。

      如果将VIP设置在RS的网卡上,假设有多台RS并且每台RS上都配置了VIP,在这个网络中发出VIP的ARP请求,就有多个RS响应,这样肯定是不可以;因此就把VIP配置到回环地址lo网卡上,然后让lo网卡忽略所有ARP请求,eth0网卡正常响应ARP请求,这样网络中就不会收到RS关于VIP的响应;还有一个问题就是当本地网卡响应ARP请求时,也有可能通过lo网卡回应,然后把VIP作为ARP请求的源IP通告出去,那么就必须禁止VIP作为ARP请求的源IP,这个问题可以通过修改arp_announce参数解决。

      由于客户端发起的请求报文源IP为CIP,目标IP为VIP;所以客户端收到的响应报文源IP必须为VIP,目标IP必须为CIP,因此在RS发送的响应报文必须由VIP的lo网卡发出,这就需要在RS上指定一条路由,目标IP为VIP的数据包使用lo网卡发出,然后经由eth0转发到网关再到公网客户端。

    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    # 将对应网卡设置为只回应目标IP为自身接口地址的ARP请求
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    # 将ARP请求的源IP设置为eth0上的IP,也就是RIP
    # 必须完成以上设置,才可继续
    
    ifconfig lo:0 172.30.100.1 broadcast 172.30.100.1 netmask 255.255.255.255
    # 添加IP地址为VIP的虚拟网卡lo:0
    route add -host 172.30.100.1 dev lo:0
    # 添加一条路由,目标IP为VIP的数据包使用lo接口发送,这样响应报文的源IP就会为VIP
    

      

      两台nginx后端服务器都需要完成以上操作。

    ipvs规则配置

    ipvsadm -A -t 172.30.100.1:80 -s wrr
    # 添加虚拟服务,指定IP、端口、算法
    ipvsadm -a -t 172.30.100.1:80 -r 172.30.100.126:80 -g -w 2
    # 添加nginx1服务器,指定DR模式,指定权重为2
    ipvsadm -a -t 172.30.100.1:80 -r 172.30.100.127:80 -g -w 1
    # 添加nginx2服务器,指定DR模式,指定权重为1
    

    验证

      

  • 相关阅读:
    使用Code First Migrations依据代码更新数据库结构
    Engine Yard增加对Node.js的支持
    CSS3无前缀脚本prefixfree.js及Animatable介绍
    html5客户端本地存储之sessionStorage及storage事件
    cctype,string,vector
    管理朋友信息程序
    三位数的排列组合
    结构体字节对齐
    习题3.13
    OPENCV用户手册之图像处理部分(之一):梯度、边缘与角点(中文翻译)
  • 原文地址:https://www.cnblogs.com/houyongchong/p/10535993.html
Copyright © 2011-2022 走看看