• LVS----DR模式


    一、LVS-DR工作原理

    1、LVS-DR数据包流向分析

    1. 客户端发送请求到Director Server (负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。
    2. Director Server 和Real Server 在同一个网络中,数据通过二层数据链路层来传输。
    3. 内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虛拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包修改源MAC地址为Director server 的MAC地址,修改目标MAC地址为Real Server 的MAC 地址,源IP 地址与目标IP地址没有改变,然后将数据包发送给Real Server。

    4. 到达Real server 的请求报文的MAC地址是自身的MAC地址,就接收此报文。数据包重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给物理网卡然后向外发出。

    5. Real Server 直接将响应报文传送到客户端。客户端收到回复报文,认为得到正常的服务,而不会知道是哪一台服务器处理的。

    2、DR模式的特点

    1. Director Server(调度器) 和 Real Server(节点服务器) 必须在同一个物理网络中。
    2. Real Server可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问。
    3. Director Server作为群集的访问入口,但不作为网关使用。
    4. 所有的请求报文经由Director Server, 但回复响应报文不能经过Director Server。
    5. Real Server 的网关不允许指向Director Server IP, 即Real Server发送的数据包不允许经过Director Server。(RS的网关地址只能指定真实的路由器网关)
    6. Real Server 上的 lo 接口配置VIP的IP地址。

    二、LVS-DR中的ARP问题

    1、VIP地址相同导致响应冲突

    原因:

    在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址,在局域网中具有相同的IP地 址,势必会造成各服务器ARP通信的紊乱。

    当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会收到ARP广播。

    只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。

    解决方案:

    对节点服务器进行处理,使其不响应针对VIP的ARP请求

    使用虚接口lo:0承载VIP地址。

    设置内核参数 arp_ ignore=1:系统只响应目的IP为本地IP(物理网卡的地址,而不是lo网卡的虚接口地址)的ARP请求。

    2、解决ARP问题的设置方法

    修改/etc/sysctl.conf 文件,调整内核的ARP响应参数。

    1. vim /etc/sysctl.conf //添加以下四行参数
    2. net.ipv4.conf.lo.arp_ignore = 1
    3. net.ipv4.conf.lo.arp_announce = 2
    4. net.ipv4.conf.all.arp_ignore = 1
    5. net.ipv4.conf.all.arp_announce = 2
    6. sysctl -p //刷新配置,读取修改后的配置
    7. #arp_ignore=1 :使本机系统只响应目的IP为本地物理网卡IP的ARP请求。
    8. #arp_announce=2:使本机系统不使用即将返回的IP数据包的源地址来作为ARP请求报文的源地址,而采用发送接口(物理网卡)的IP作为ARP请求报文源地址。

    三、LVS-DR模式(直接路由)

    直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。

    负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道

    直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

    DR模式两种解决方法:

    绑定ARP绑定Ivs 代理服务器(碰不到客户端,一般不用)
    关闭ARP 广播 真实服务器(一般采用它)

    LVS调度服务器也可以使用公网ip,也可以买公网ip

    DR模式的特点:

    1. Director(调度器)和各RS(真实服务器)都配置有VIP(虚拟ip)

    2. 确保前端路由器将目标IP为VIP的请求报文发往Director

    • 在前端网关做静态绑定VIP和Director的MAC地址

    • 在RS上使用arptables工具

    1. arptables -A IN -d $VIP -j DROP
    2. arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

    在RS上修改内核参数以限制arp通告及应答级别

    1. /proc/sys/net/ipv4/conf/all/arp_ignore 忽略arp广播
    2. /proc/sys/net/ipv4/conf/all/arp_announce 关闭无敌arp

    RS(真实服务器)的RIP(真实ip)可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director

    1. RS和Director要在同一个物理网络

    2. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

    3. 不支持端口映射(端口不能修改

    4. 无需开启 ip_forward(路由转发)

    5. RS可使用大多数OS系统

    操作系统(Operating System,缩写为OS)是一种控制和管理计算机硬件与软件资源的计算机程序

    回环网卡上配置虚拟ip,四台机器共用一个虚拟ip,在Linux中,回环网卡是指用于本地回环测试的虚拟网络接口,通常被标识为lo

    实验环境:

    1. 调度服务器:192.168.10.100
    2. 后端服务器:192.168.10.101
    3. 后端服务器:192.168.10.102
    4. 客户端:192.168.10.103
    5. vip虚拟回环:192.168.10.188
    1. ###先将4台机子的防火墙及核心防护全部关闭
    2. [root@localhost ~]#systemctl stop firewalld
    3. [root@localhost ~]#setenforce 0

    7-0配置负载调度器

    1. [root@localhost ~]#ifconfig ens33:0 192.168.10.188/32
    2. [root@localhost ~]#ip a
    3. [root@localhost ~]#vim /etc/sysctl.conf
    4. net.ipv4.ip_forward = 0
    5. net.ipv4.conf.all.send_redirects = 0
    6. net.ipv4.conf.default.send_redirects = 0
    7. net.ipv4.conf.ens33.send_redirects = 0
    8. [root@localhost ~]#sysctl -p
    9. net.ipv4.ip_forward = 0
    10. net.ipv4.conf.all.send_redirects = 0
    11. net.ipv4.conf.default.send_redirects = 0
    12. net.ipv4.conf.ens33.send_redirects = 0
    13. [root@localhost ~]#modprobe ip_vs
    14. [root@localhost ~]#cat /proc/net/ip_vs
    15. [root@localhost ~]#yum install ipvsadm.x86_64 -y
    16. [root@localhost ~]#ipvsadm-save > /etc/sysconfig/ipvsadm
    17. [root@localhost ~]#systemctl start ipvsadm.service
    18. [root@localhost ~]#systemctl status ipvsadm.service
    19. [root@localhost ~]#ipvsadm -A -t 192.168.10.188:80 -s rr
    20. [root@localhost ~]#ipvsadm -a -t 192.168.10.188:80 -r 192.168.10.101:80 -g
    21. [root@localhost ~]#ipvsadm -a -t 192.168.10.188:80 -r 192.168.10.102:80 -g
    22. [root@localhost ~]#ipvsadm -ln

    1. net.ipv4.ip_forward = 0
    2. net.ipv4.conf.all.send_redirects = 0
    3. net.ipv4.conf.default.send_redirects = 0
    4. net.ipv4.conf.ens33.send_redirects = 0

    #调整/proc响应参数  对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能

    7-1 真实服务器配置

    1. [root@localhost ~]#rpm -q httpd
    2. [root@localhost ~]#yum install httpd -y
    3. [root@localhost ~]#systemctl start httpd
    4. [root@localhost ~]#ifconfig lo:0 192.168.10.188/32
    5. [root@localhost ~]#ip a
    6. [root@localhost ~]#cd /var/www/html/
    7. [root@localhost html]#echo welcome to 7-1 > index.html
    8. [root@localhost html]#cat index.html
    9. welcome to 7-1
    10. [root@localhost html]#sysctl -a |grep arp
    11. [root@localhost html]#vim /etc/sysctl.conf
    12. ###在最后行末添加
    13. net.ipv4.conf.all.arp_ignore = 1
    14. net.ipv4.conf.all.arp_announce = 2
    15. net.ipv4.conf.default.arp_ignore = 1
    16. net.ipv4.conf.default.arp_announce = 2
    17. net.ipv4.conf.lo.arp_ignore = 1
    18. net.ipv4.conf.lo.arp_announce = 2
    19. [root@localhost html]#sysctl -p ###刷新配置
    20. net.ipv4.conf.all.arp_ignore = 1
    21. net.ipv4.conf.all.arp_announce = 2
    22. net.ipv4.conf.default.arp_ignore = 1
    23. net.ipv4.conf.default.arp_announce = 2
    24. net.ipv4.conf.lo.arp_ignore = 1
    25. net.ipv4.conf.lo.arp_announce = 2

    1. net.ipv4.conf.all.arp_ignore = 1
    2. net.ipv4.conf.all.arp_announce = 2
    3. net.ipv4.conf.default.arp_ignore = 1
    4. net.ipv4.conf.default.arp_announce = 2
    5. net.ipv4.conf.lo.arp_ignore = 1
    6. net.ipv4.conf.lo.arp_announce = 2

    7-2 真实服务器配置

    1. [root@localhost ~]#rpm -q httpd
    2. [root@localhost ~]#yum install httpd -y
    3. [root@localhost ~]#systemctl start httpd
    4. [root@localhost ~]#ifconfig lo:0 192.168.10.188/32
    5. [root@localhost ~]#ip a
    6. [root@localhost ~]#cd /var/www/html/
    7. [root@localhost html]#echo welcome to 7-2 > index.html
    8. [root@localhost html]#cat index.html
    9. welcome to 7-1
    10. [root@localhost html]#sysctl -a |grep arp
    11. [root@localhost html]#vim /etc/sysctl.conf
    12. ###在最后行末添加
    13. net.ipv4.conf.all.arp_ignore = 1
    14. net.ipv4.conf.all.arp_announce = 2
    15. net.ipv4.conf.default.arp_ignore = 1
    16. net.ipv4.conf.default.arp_announce = 2
    17. net.ipv4.conf.lo.arp_ignore = 1
    18. net.ipv4.conf.lo.arp_announce = 2
    19. [root@localhost html]#sysctl -p ###刷新配置
    20. net.ipv4.conf.all.arp_ignore = 1
    21. net.ipv4.conf.all.arp_announce = 2
    22. net.ipv4.conf.default.arp_ignore = 1
    23. net.ipv4.conf.default.arp_announce = 2
    24. net.ipv4.conf.lo.arp_ignore = 1
    25. net.ipv4.conf.lo.arp_announce = 2

    1. net.ipv4.conf.all.arp_ignore = 1
    2. net.ipv4.conf.all.arp_announce = 2
    3. net.ipv4.conf.default.arp_ignore = 1
    4. net.ipv4.conf.default.arp_announce = 2
    5. net.ipv4.conf.lo.arp_ignore = 1
    6. net.ipv4.conf.lo.arp_announce = 2

    7-3客户机检测:

    四、arp_announce   arp_ignore

    vim /etc/sysctl.conf

    #添加系统只响应目的IP为本地IP的ARP请求
    #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP

    1. net.ipv4.conf.all.arp_ignore = 1
    2. net.ipv4.conf.all.arp_announce = 2
    3. net.ipv4.conf.default.arp_ignore = 1
    4. net.ipv4.conf.default.arp_announce = 2
    5. net.ipv4.conf.lo.arp_ignore = 1
    6. net.ipv4.conf.lo.arp_announce = 2

    五、ARP协议

    arp作用:①把ip地址转化为mac地址

                     ② 检测地址是否冲突

    arp中没有源ip和目的ip,是发送方ip和接受方ip

    arp中没有源ip和目的ip,是发送方ip和接收方ip

  • 相关阅读:
    【linux】计算机内部体系结构
    彻底了解线程池的原理——40行从零开始自己写线程池
    angular+ionic+npm项目运行
    spring源码理解
    Linux之DNS解析和主从配置及selinux使用超详解
    (Pytorch)简单了解torch.autograd.grad()以及torch.autograd.backward()
    代码的坏味道(二)——为什么建议使用模型来替换枚举?
    JavaWeb_第3章_HTTP&Tomcat&Servlet
    活动选择问题
    浅谈多回路电表在荷兰光伏系统配电项目中的应用
  • 原文地址:https://blog.csdn.net/AH99999/article/details/136513859