LVS负载均衡全解析<1>--服务器架构、流量转发过程、DR模式部署

封装redhat7.6版本虚拟机

  • 选择7.6版本镜像,设置内存大小,设置虚拟机名
  • 设置时区、选择最小化安装、不勾选kdump enable选项(kdump是在系统崩溃、死机等不良状况发生时,将发生崩溃时内存的一些数据进行保存下来,后续可供使用人员进行分析)设置自动分区(仅有根分区)
  • 设置root用户密码,开始安装
  • 安装完成,进入虚拟机,设置主机名并添加解析,设置防火墙和selinux关闭
  • 编辑网卡配置文件,设置ip、dns、网关,重启network服务使配置生效
  • 宿主机ssh连接虚拟机配置epel源
  • 关闭虚拟机、清理虚拟机自身信息并压缩封装好的镜像
    在这里插入图片描述
    在这里插入图片描述

一、服务器架构

  • C/S与B/S架构,如下图所示
    在这里插入图片描述
  • C/S架构:微信、qq等,客户端的数据都是直接从服务器加载过来的
  • B/S架构:现有的绝大多数的电商平台

二、流量转发过程

  • 客户访问资源过程如下:
  • 网络层面(外部访问):客户访问资源,经过CDN加速,来达到各个区域内的客户都能以基本相同的速度访问想要的资源
  • 企业内部服务器:进来的数据流通过路由器进入到企业内部服务器,往往需要先经过负载均衡层处理来分担单个服务器的压力(因为现在数据量太过庞大,单点远远无法满足需求),负载均衡层包括四层负载均衡与七层负载均衡,LVS就是四层负载均衡,但是四层无法定制分流策略,比如重定向等,这些就要交给七层负载均衡来处理,因为客户发起的往往是七层应用请求(http),最终是要到达七层(应用层)来进行处理
    在这里插入图片描述
  • 同时,LVS往往需要部署高可用(HA)来解决调度节点(均衡器)的单点问题
    在这里插入图片描述
  • 关于四层与七层的负载均衡详解
    https://blog.csdn.net/nk298120/article/details/116526345.
  • lvs工作模式详解
    https://blog.csdn.net/nk298120/article/details/112648399.

三、LVS部署(DR直连模式)

1.添加内核策略

yum install -y ipvsadm       %安装相关工具,添加策略

在这里插入图片描述

  • 接下来我们要新建一个虚拟服务,它需要有一个vip(虚拟ip),这个ip在部署完高可用后可以在不同节点之间浮动
    在这里插入图片描述
    在这里插入图片描述
server11上操作:
ipvsadm ­-A -­t 172.25.0.100:80 ­-s rr       %-A:添加一个虚拟ip,-s:指定调度算法,rr为轮询调度算法,-t:TCP服务
ipvsadm ­-a -­t 172.25.0.100:80 ­-r 172.25.0.12:80 -­g     %-a往这个tcp服务里面添加;-r:表示真实的服务器ip;-g:表示直连模式;直连模式不支持端口转发,是什么端口就对应的是什么端口
ipvsadm ­-a -­t 172.25.0.100:80 ­-r 172.25.0.13:80 ­-g

在这里插入图片描述
在这里插入图片描述

2.后端(real server)提供服务

server2上:
yum install -y httpd
systemctl enable --now httpd
echo server12>/var/www/html/index.html

server3上:
yum install -y httpd
systemctl enable --now httpd
echo server13>/var/www/html/index.html

在这里插入图片描述
在这里插入图片描述

3.real server禁用arp

  • 在DR(直连)模式中,客户端想要通过vip访问到真实后端的资源,要求调度节点和后端都要有相同的vip,但是同时会有这样一个问题产生:
    DR模式下,调度节点和real server真实服务器在一个vlan(同一个网段)里面,并且拥有相同的vip,那么其它主机访问vip的时候如何能够根据实现定义好的调度算法正确的在两个real server之间完成调度呢?
  • 我们可以禁用后端的arp(地址广播协议),让主机不要对外广播自己的vip地址,就相当于不要告诉别人我有这个ip,链路层的传输只需要mac地址而不需要通过ip

后端主机添加vip使客户端可以访问到资源

在这里插入图片描述
在这里插入图片描述

两个后端都添加vip

在这里插入图片描述
在这里插入图片描述

  • 注意:这时候的负载均衡仍然是有问题的,因为此时能够负载均衡只是因为客户端随机访问到了server11上的vip所以才能够正常调度,正常情况下,server11、12、13上都有vip,因此客户端访问vip的时候可能会随机访问到这三个节点的任何一个节点上,那么我们该如何保证客户端在访问vip的时候只能访问到调度节点server11呢?这就需要禁用server12和server13节点的arp协议,让它们不对外广播vip地址
  • 禁用arp协议有两种方式
    1、在内核层面禁用
    vi /etc/sysctl.conf
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    sysctl ­p
    2、使用arptables_jf工具(相当于arp防火墙)禁用
    arptable只针对arp协议生效,只控制arp,不影响其它协议
    在这里插入图片描述
使用arptables_jf工具(相当于arp防火墙)禁用:
yum install -y arptables_jf      %安装相关工具
arptables -A INPUT -d 172.25.0.100 -j DROP       %当别人直接访问我的172.25.0.100地址的时候直接丢弃数据包,不给予相应(相当于不让别人进来)
arptables -A OUTPUT -s 172.25.0.100 -j mangle --mangle-ip-s 172.25.0.3     %当出去的地址(源地址)172.25.0.100的时候转换为实际的ip

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

客户端测试

arp -d 172.25.0.100            %清除本地arp信息
curl 172.25.0.100          %访问vip,测试是否负载均衡

在这里插入图片描述
在这里插入图片描述

DR模式下的数据流走向

  • client -> DR -> RS ->client
    客户端访问DR,DR访问RS,RS直接把数据包定向到了客户端
  • 在LVS的三种工作模式中,DR模式的工作效率最高,它工作在第二层数据链路层,直接通过mac地址转发数据,它仅仅承担转发工作,直接把数据往后甩,最后返回给客户端,性能非常高。
  • 三种工作模式中NAT性能最差,因为需要进行地址转换,数据流一进一出原路径返回需要经过调度器,隧道模式和DR模式性能最接近,隧道模式需要支持广域网、多个网段,而DR直连模式要求必须要在一个vlan里面。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值