• 部署LVS-DR群集 待续。。


    目录

    一、LVS-DR工作原理

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

    DR模式的特点

    三、LVS-DR中的ARP问题

    问题一:

    问题二:

    四、LVS负载均衡DR模式群集部署

    1.配置负载调度器(192.168.187.68)

    1.安装ipvsadm工具,并开启 

    2、配置虚拟子网接口

    3、 调整LVS中proc响应参数

    4、配置负载分配策略

    5、配置web服务器网卡 (web1和web2) 

    1、 配置环回ip地址

    web1配置

    web2配置

    6、在web服务器中添加vip本地访问路由

    7、 在web中调整内核的ARP响应参数以阻止更新vip的MAC地址,避免冲突

    web1

    web2

    8、下载httpd服务并设置网页

    web1 

    web2

    9、虚拟中windows设置并验证

    五、LVS-DR问题总结

    1、LVS/DR如何处理请求报文的,会修改IP包内容吗?

    2、RealServer为什么要在lo接口上配置VIP?在出口网卡上配置VIP可以吗?

    3、RealServer为什么要抑制arp帧?

    4、LVS/DR load balancer(director)与RS为什么要在同一网段中?

    5、为什么director上eth0接口除了VIP另外还要配一个ip(即DIP)?

    6、director的vip的netmask一定要是255.255.255.255吗?

    7、RS设置 lo:0而不设置ens33:0的原因


    一、LVS-DR工作原理

    LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。

    • LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用
    • 节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。
    • 为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。
    1. 客户机发起请求,经过调度服务器(lvs),经过算法调度,去访问真实服务器(RS)
    2. 由于不原路返回,客户机不知道,真实主机的ip地址,
    3. 所以只能通过调度服务器的外网ip(vip)去反回报文信息。

    Director Server作为群集的访问入口,但不作为网关使用,后端服务器池中的Real Server与Director Server在同一个物理网络中,发送给客户机的数据包不需要经过Director Server。为了响应对整个群集的访问,DS(前端负载均衡节点服务器)与RS(后端真实服务器)都需要配置有VIP地址。

    每个Real Server上都有两个IP:VIP(负载均衡对外提供访问的 IP 地址)和RIP(负载均衡后端的真实服务器 IP 地址),但是VIP是隐藏的,就是不能提供解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP(负载均衡与后端服务器通信的 IP 地址),在DIR接收到客户端的请求后,DIR根据负载算法选择一台rs sever的网卡mac作为客户端请求包中的目标mac,通过arp转交给后端RS serve处理,后端再通过自己的路由网关回复给客户端。

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

    (1)客户端发送请求到Director Server(负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

    (2)Director Server和Real Server在同一个网络中,数据通过二层数据链路层来传输。

    (3)内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源MAC地址为Director Server的MAc地址,修改目标MAC地址为Reaserver的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server。

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

    (5)Real server直接将响应报文传送到客户端。

    DR模式的特点

    • Director Server 和 Real Server 必须在同一个物理网络中。
    • Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
    • Director Server 作为群集的访问入口,但不作为网关使用。
    • 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
    • Real Server的网关不允许指向Director Server IP,即 Real Server 发送的数据包不允许经过 Director Server。
    • Real Server 上的 lo 接口配置 VIP 的 IP 地址。

    三、LVS-DR中的ARP问题

    问题一:

    • 在LVS-DR负载均衡集群中,负载均衡与节点服务器都要配置相同的VIP地址。

    • 在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。

      解决思路:

      • 当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同网络上,它们都会接收到ARP广播。
      • 只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。
    • 对节点服务器进行处理,使其不响应针对VIP的ARP请求。

      解决方法:

      • 使用虚接口lo:0承载VIP地址
      • 设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求

    问题二:

    • RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址。

    • 发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址

      • 如:ens33
    • 路由器收到ARP请求后,将更新ARP表项

    • 原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址

    • 路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效

      解决方法:

      • 对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。

    解决ARP的两个问题的设置方法

    1. 修改/etc/sysctl.conf文件
    2. net.ipv4.conf.lo.arp_ignore=1 #忽略不对本机的物理接口IP地址的ARP请求
    3. net.ipv4.conf.lo.arp_announce=2 #使用本机的物理接口IP地址发送ARP请求,而不使用即将发送的数据包的源IP发送ARP请求
    4. net.ipv4.conf.all.arp_ignore=1
    5. net.ipv4.conf.all.arp_announce=2

    四、LVS负载均衡DR模式群集部署

    1. 调度器:ens33:0 #承载VIP,设置内核参数,不做路由器转发,配置ipvsadm -g指定为DR模式
    2. 节点服务器:lo:0 #承载VIP,设置内核参数,限制ARP请求,配置路由限制在本地 安装wEB应用

    搭建环境

    主机操作系统IP地址所需服务
    DR服务器(负载调度器)CentOS7ens33:192.168.80.20,ens33:0 (VIP):192.168.80.188ipvsadm
    Web节点服务器1CentOS7ens33:192.168.80.30,ens33:0 (VIP):192.168.80.188httpd
    Web节点服务器2CentOS7ens33:192.168.80.40,ens33:0 (VIP):192.168.80.188httpd
    客户端Windows7192.168.80.100

    :此次搭建在同一局域网内,设置网络时不用网关和DNS,注释即可。如果不在同一网段,需要配置网关。

    1.配置负载调度器(192.168.187.68)

    1. yum -y install ipvsadm keepalived #下载ipvsadm管理工具 keepalived(热备组的作用)
    2. modprobe ip_vs #加载ip_vs模块
    3. cat /proc/net/ip_vs #查看ip_vs模块
    4. ipvsadm-save > /etc/sysconfig/ipvsadm #保存策略
    5. systemctl start ipvsadm #启动ipvsadm工具

    1.安装ipvsadm工具,并开启 

    yum -y install ipvsadm keepalived    #下载ipvsadm管理工具  keepalived(热备组的作用)

     

    2、配置虚拟子网接口

    1. cd /etc/sysconfig/network-scripts/ #进入网卡配置目录
    2. cp -p ifcfg-ens33 ifcfg-ens33:0 #复制虚拟子接口的配置文件
    3. vim ifcfg-ens33:0 #编辑虚拟字接口内容
    4. DEVICE=ens33:0
    5. ONBOOT=yes
    6. IPADDR=192.168.187.100 #根据自己的机器IP修改
    7. NETMASK=255.255.255.255
    8. ifup ens33:0 #开启虚拟子接口网卡
    9. ifconfig ens33:0 #查看配置是否成功

     

     

    3、 调整LVS中proc响应参数

    由于LVS负载均衡器和各个节点需要共用vip地址,应该关闭Linux内核的重定向响应参数,不充当路由器,这样当DS收到客户端发来的数据包时,就不会立马转发给后台RS服务器,而是转发给自己的虚拟子接口。

    1. vim /etc/sysctl.conf #编辑内核proc参数
    2. #添加以下内容
    3. net.ipv4.ip_forward = 0 #关闭ip转发
    4. net.ipv4.conf.all.send_redirects = 0 #关闭所有send重定向
    5. net.ipv4.conf.default.send_redirects = 0 #关闭默认重定向
    6. net.ipv4.conf.ens33.send_redirects = 0 #关闭网卡重定向
    7. sysctl -p #查看内核参数 加载生效

      

    4、配置负载分配策略

    1. ipvsadm -C #清除规则
    2. ipvsadm -A -t 192.168.187.100:80 -s rr #创建虚拟主机,指定ip地址,并指定分流模式为轮询
    3. ipvsadm -a -t 192.168.187.100:80 -r 192.168.187.58:80 -g
    4. #添加真实服务器ip地址,并指定负载均衡模式为DR,ip隧道模式为-i,-m为nat集群模式
    5. ipvsadm -a -t 192.168.187.100:80 -r 192.168.187.88:80 -g
    6. #添加真实服务器ip地址,并指定负载均衡模式为DR,ip隧道模式为-i, -g为DR模式
    7. ipvsadm #启动策略
    8. ipvsadm -ln #查看当前节点状态信息
    9. ipvsadm -Lnc #监控连接数

     

    5、配置web服务器网卡 (web1和web2) 

    1、 配置环回ip地址

     此地址仅用作发送web响应数据包的原地址,并不需要监听客户机的访问请求(改由调度器监听并分发),因此使用虚拟接口lo:0 来承载VIP,并为本机添加一条路由记录,并将访问的VIP的数据限制在本地,以免通信紊乱

    1. cd /etc/sysconfig/network-scripts/ #进入网卡配置目录
    2. cp -p ifcfg-lo ifcfg-o:0 #复制环回网卡
    3. vim ifcfg-lo:0 #修改内容
    4. DEVICE=lo:0
    5. ONBOOT=yes
    6. IPADDR=192.168.187.100 #地址为VIP
    7. NETMASK=255.255.255.255
    8. ifup ifcfg-lo:0 #启动环回网卡
    9. ifconfig lo:0 #查看环回网卡

    web1配置

     

    web2配置

     

    6、在web服务器中添加vip本地访问路由

    1. route add -host 192.168.187.100 dev lo:0
    2. 或者下面方式,都可实现路由禁锢,下面的为永久添加
    3. vim /etc/rc.local #linux在开启启动时,会加载的内容
    4. /sbin/route add -host 192.168.187.100 dev lo:0
    5. route -n #查看路由表

     web1

    web2

    7、 在web中调整内核的ARP响应参数以阻止更新vip的MAC地址,避免冲突

    1. vim /etc/sysctl.conf
    2. #添加以下内容
    3. net.ipv4.conf.lo.arp_ignore = 1
    4. net.ipv4.conf.lo.arp_announce = 2
    5. net.ipv4.conf.all.arp_ignore = 1 #系统只响应目的ip为本地的arp请求
    6. net.ipv4.conf.all.arp_announce = 2 #系统不使用ip包的源地址来设置arp请求的原地址,而选择发送接口的ip地址。
    7. sysctl -p #加载生效

    web1

      

    web2

     

    8、下载httpd服务并设置网页

    web1 

    避免端口冲突 记得关闭nginx

     

    web2

     

    9、虚拟中windows设置并验证

    网卡设为net模式  防火墙要关掉

     

     

    五、LVS-DR问题总结

    1、LVS/DR如何处理请求报文的,会修改IP包内容吗?

    vs/dr 本身不会关心IP层以上的信息,即使是端口号也是 tcp/ip 协议栈去判断是否正确,vs/dr本身主要做这么几个事:

    接收client的请求,根据你设定的负载均衡算法选取一台 real server 的 ip;
    以选取的这个 ip 对应的 mac 地址作为目标 mac,然后重新将IP包封装成帧转发给这台RS;
    在hash table 中记录连接信息。
    vs/dr 做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差多少,数据包、数据帧的大致流向是这样的:client –> VS –> RS –> client。

    2、RealServer为什么要在lo接口上配置VIP?在出口网卡上配置VIP可以吗?

    既然要让 RS 能够处理目标地址为vip 的IP包,首先必须要让 RS能接收到这个包。在lo上配置vip能够完成接收包并将结果返回 client。不可以将VIP设置在出口网卡上,否则会响应客户端的 arp request,造成 client/gateway arp table 紊乱,以至于整个 load balance 都不能正常工作。

    3、RealServer为什么要抑制arp帧?

    我们知道仰制arp 帧需要在server上执行以下命令,如下:

    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

    因为arp对逻辑口没有意义。实际上起作用的只有以下两条:

    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce


    即对所有的物理网卡设置arp仰制。对仰制所有的物理网卡设置arp仰制是为了让CIP发送的请求顺利转交给DIR以及防止整个LVS环境arp表混乱,不然容易导致整个lvs不能工作。

    4、LVS/DR load balancer(director)与RS为什么要在同一网段中?

    lvs/dr 它是在数据链路层来实现的,即RIP必须能够接受到DIR的arp请求,如果不在同一网段则会隔离 arp,这样arp请求就不能转发到指定的RIP上,所以director必须和RS在同一网段里面。

    5、为什么director上eth0接口除了VIP另外还要配一个ip(即DIP)?

    如果是用了keepalived等工具做 HA或者Load Balance,则在健康检查时需要用到DIP。 没有健康检查机制的HA或者Load Balance则没有存在的实际意义。

    6、director的vip的netmask一定要是255.255.255.255吗?

    lvs/dr 里,director 的vip的 netmask 没必要设置为255.255.255.255,director的vip本来就是要像正常的ip地址一样对外通告的,不要搞得这么特殊。

    7、RS设置 lo:0而不设置ens33:0的原因

    因为“负载调度机”转发时并不会改写数据包的目的IP,所以“节点服务器”收到的数据包的目的IP仍是“负载调度器”的虚拟服务IP。为了保证“节点服务器”能够正确处理该数据包,而不是丢弃,必须在“节点服务器”的环回网卡上绑定“负载调度器”的虚拟服务IP。这样“节点服务器”会认为这个虚拟服务IP是自己的IP,自己是能够处理这个数据包的。否则“节点服务器”会直接丢弃该数据包!

    “节点服务器”上的业务进程必须监听在环回网卡的虚拟服务IP上,且端口必须和“负载调度机”上的虚拟服务端口一致。因为“负载调度机”不会改写数据包的目的端口,所以“节点服务器”服务的监听端口必须和虚拟服务端口一致,否则“节点服务器”会直接拒绝该数据包。

    “节点服务器”处理完请求后,响应直接回给客户端,不再经过“负载调度机”。因为“节点服务器”收到的请求数据包的源IP是客户端的IP,所以理所当然“节点服务器”的响应会直接回给客户端,而不会再经过“负载调度机”。这时候要求“节点服务器”和客户端之间的网络是可达的。

    “负载调度机”和“节点服务器”须位于同一个子网。因为“负载调度机”在转发过程中需要改写数据包的MAC为“节点服务器”的MAC地址,所以要能够查询到“节点服务器”的MAC。而要获取到“节点服务器”的MAC,则需要保证二者位于一个子网,否则“负载调度机”只能获取到“节点服务器”网关的MAC地址。

  • 相关阅读:
    forwardRef, useImperativeHandle实现父组件调用子组件方法(个人笔记,非教程)
    Vue
    【Python刷题篇】——Python入门 010 内置函数(三)
    『现学现忘』Git基础 — 10、配置Git用户签名说明
    Real-Time Rendering——9.8.2 Multiple-Bounce Surface Reflection多次反射表面反射
    【Python】Pycharm中设置使用conda的虚拟环境(保姆级图文)
    解决跨域问题
    adb下载安装及使用教程
    浏览器事件循环原理 —— 任务优先级
    <二>自己实现简单的string
  • 原文地址:https://blog.csdn.net/weixin_71429839/article/details/126750229