快速理解LVS负载均衡

首先我们说说LVS要解决的问题场景:

快递公司在北京建立了一个快递点,每天能处理50个人寄快递,由于快递需求增加每天要处理150个人, 如下图:快速理解LVS负载均衡_第1张图片
为了解决这个问题, 快递公司又在北京建立了2个快递点,他们的规划是这样子的如图:
快速理解LVS负载均衡_第2张图片
但实际使用上发现结果是这样子的快速理解LVS负载均衡_第3张图片
为了解决分配不均的问题, 领导决定建立一个营业中心,用户打电话给营业中心,统一分配快递由哪个快递点处理
快速理解LVS负载均衡_第4张图片
上面就是lvs的第一种工作模式:【基于NAT的LVS模式负载均衡】,这是基于3层(网络层)的工作模式,实现原理如下:
快速理解LVS负载均衡_第5张图片
为 什 么 要 修 改 i p 呢 ? \color{red} 为什么要修改ip呢? ip
第 二 步 如 果 不 修 改 , 目 标 i p 还 是 122.168.1.15 还 是 就 无 法 发 给 14 这 台 服 务 器 \color{red} 第二步如果不修改, 目标ip还是122.168.1.15还是就无法发给14这台服务器 ip122.168.1.1514
第 四 部 不 修 改 源 i p 。 客 户 端 和 原 来 的 目 标 i p 比 较 , 发 现 不 是 同 一 个 , 那 就 会 被 抛 弃 \color{red} 第四部不修改源ip。客户端和原来的目标ip比较,发现不是同一个, 那就会被抛弃 ipip


但这时候又出现了问题, 由于营业中心的工作人员(暂称:客服MM),每天不光要接待寄快递的用户, 还要对接收快递的工作人员(暂称:快递小哥),这使得客服MM承受了巨大的工作负荷
领导为了减轻客服MM的工作压力,领导觉得优化一下工作流程:让快递小哥直接找用户对接快速理解LVS负载均衡_第6张图片
上面就是lvs的第二种工作模式:【基于DR的LVS负载均衡】, 这个模式是基于2层(数据链路层)
快速理解LVS负载均衡_第7张图片

由于双十一快递用户增加,而又无法在北京继续扩建快递点,已有的快递点和营业中心无法满足业务需要,出现了如下图情况
快速理解LVS负载均衡_第8张图片
为了解决这个问题。领导准备研发 快递小哥(微信小程序),让系统去调度由哪个快递点处理,如果业务麻烦的时候, 系统会增加周边的快递节点分担压力
快速理解LVS负载均衡_第9张图片
上面就是lvs的第二种工作模式:【基于TUN的LVS负载均衡】, 这个模式是基于3层(网络层)快速理解LVS负载均衡_第10张图片
以下是DNET的LVS负载均衡步骤
准备3个虚拟机

  1. lvs 配置两个网卡 ip: 192.168.133.248(外网) 172.168.0.248(内网)
  2. real server 172.168.0.247
  3. real server 172.168.0.246
1. 配置双网卡, 查看到第二块网卡名字叫做 ens36:
 [root@localhost ~]# ifconfig -a
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36
[root@localhost ~]# vim  /etc/sysconfig/network-scripts/ifcfg-ens36
IPADDR=172.16.0.248
NETMASK=255.255.0.0
#GATEWAY=192.168.133.2 这个不需要配置
[root@localhost ~]# systemctl restart network
2. 192.168.133.248 安装lvs服务
[root@localhost ~]# yum install ipvsadm -y
[root@localhost ~]# ipvsadm -A -t 192.168.133.248:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.133.248:80 -r 172.16.0.246 -m -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.133.248:80 -r 172.16.0.247 -m -w 1
[root@localhost ~]# echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter 
[root@localhost ~]# echo 0 > /proc/sys/net/ipv4/conf/ens33/rp_filter 
[root@localhost ~]# echo 0 > /proc/sys/net/ipv4/conf/ens36/rp_filter 
[root@localhost ~]# echo 1 >> /proc/sys/net/ipv4/ip_forward 
3. 172.168.0.246/247 配置网卡
IPADDR=172.16.0.246/172.16.0.247
NETMASK=255.255.0.0
GATEWAY=172.16.0.248

以下是DR的LVS负载均衡步骤
准备3个虚拟机

  1. lvs ip192.168.133.245
  2. real server 192.168.133.246
  3. real server 192.168.133.245
1. lvs 上增加网卡的物理ip
[root@localhost ~]# ifconfig ens33:2 192.168.133.245/24

2. 调整后端服务器协议
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@localhost ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

3. 配置后端服务器隐藏ip
[root@localhost ~]# ifconfig lo:2 192.168.133.245 netmask 255.255.255.255

4. 安装lvs服务
[root@localhost ~]# yum install ipvsadm -y

[root@localhost ~]# ipvsadm -A -t 192.168.133.245:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.133.245:80 -r 192.168.133.246 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.133.245:80 -r 192.168.133.247 -g -w 1
[root@localhost ~]# ipvsadm -ln

/proc/sys/net/ipv4/conf/all/arp_ignore arp_ignore参数常用的取值主要有0,1,2,3~8较少用到

  • 0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
  • 1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
  • 2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
  • 3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
  • 4~7:保留未使用
  • 8:不回应所有的arp请求
      sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。
      
    /proc/sys/net/ipv4/conf/all/arp_announce
  • 0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。
  • 1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
  • 2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
      sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效

你可能感兴趣的:(linux基础,lvs,linux)