part_69:lvs---DR(直接路由)模式

  • 负载均衡(Load Balance 简称LB)分为硬件负载均衡和软件负载均衡
  • 硬件负载均衡:F5:太贵
  • 软件负载均衡:
  • lvs(4层):
  • haproxy
  • nginx (七层)
  • httpd(proxy balance)
  • varnish

lvs 基础知识

  • lvs指的是Linux虚拟服务器,是一个虚拟的服务器集群系统。其主要用于多服务器的负载均衡。
    优点
  • 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
  • 易用,配置非常简单,且有多种负载均衡的方法。
  • 稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
  • 另外可扩展性也非常好。
  • lvs数据流向:附着于netfiler:从外部进来第一层经过防火墙(三表五链)
  • 第一种方式:PREROUTING —> INPUT(流向内部)
  • 第二种方式:PREROUTING----> FORWARD —> POSTROUTING(转发)—>OUTPUT—> POSTROUTING(流向外部)
  • 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间(kernel space)
  • PREROUTING链首先会接收到用户请求,判断目标IP确定是否为本机IP,是的化将数据包发往INPUT链
  • IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
  • POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器
  • lvs是由两部份组成的
  • ipvs(ip virrual server):一段代码(工作在内核)是真正生效实现调度的代码
  • ipvsadm(工作在用户空间,负责为ipvs内核框架编写规则)
    ipvsadm(工作在用户空间的命令行工具 写具体的规则 用于管理集群服务)/ipvs(工作在内核中的netfilter input函数上)

lvs 相关术语

  • DS:Director Server。指的是前端负载均衡器节点。
  • RS:Real Server。后端真实的工作服务器。
  • VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址(目的IP)。
  • DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
  • RIP:Real Server IP,后端服务器的IP地址。
  • CIP:Client IP,访问客户端的IP地址(源IP)。

lvs 四种工作模式

  • DR(直接路由)模式
  • TUN(隧道)模式
  • NAT (网络地址转换)模式
  • Full-Nat模式
    接下来先介绍DR模式

1、DR工作模式基础知识

DR模式工作的数据流向: Client–>PREROUTING —> INPUT(将CIP的MAT地址,改成CIP的MAT地址,(lvs在此强行改变数据流向))—>ipvs(VIP的MAT地址转为RS的MAT地址)—>POSTROUTING—> RS—>lo—>eth0 -->CIP
客户端请求 VIP 时,通过因特网先到达调度器,调度器会根据调度算法将这个请求转发给真实的服务器,转发的过程中仅仅是修改了数据报文中的 MAC地址。当真实服务器接受到数据请求后进行处理,然后发送响应给客户端,但此时的源 IP 为真实的服务器 IP,即 RIP,目标 IP 为客户端 IP,即 CIP,但是客户端并没有请求RIP,所以客户端是不会接收数据响应,所以,就要修改源 IP 为 VIP,但是不可以将 VIP 设置在出口网卡上,否则会响应客户端的 arp 请求。失去了调度的意义,因此要在 lo 接口配置 VIP,并且将 VIP 隐蔽,即设置 NETMASK 为255.255.255.255,这样,数据响应从真实服务器出去的时候的源 IP 是 VIP,目的 IP 是 CIP,客户端就会接收次数据响应,从真实服务器到客户端是通过Internet。

  • DR 模式需要调度器与真实服务器在同一个物理网络。即通过交换机或者高速的HUB相连,中间没有隔有路由器。
  • VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文。
  • 所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
    优点:性能最高
    缺点:要求调度器的网卡必须与物理网卡在一个物理网段上

DR 模式实验环境

主机名 IP
server1 172.25.60.1
server2 172.25.60.2
server3 172.25.60.3
  • server2和server3需要安装apache 和编写前端测试页面,配置见上一篇
  • server1上安装调度器,配置ipvsadm
  • 配置更高级的yum源:vim /etc/yum.repo.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.60.250/linux
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.60.250/linux/LoadBalancer
gpgcheck=0
  • 安装ipvsadm
[root@server1 yum.repos.d]# yum install ipvsadm -y
  • 添加策略:-A :增加一台虚拟设备;-a:添加真实服务器的操作;-t :tcp服务地址;-s:调度算法(10种调度算法:);-r:对应的真实ip;-g:rh(路由)
[root@server1 yum.repos.d]# ipvsadm -A -t 172.25.60.100:80 -s rr  ##添加一个虚拟ip,设制成论寻模式
[root@server1 yum.repos.d]# ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.2:80 -g   ##添加两个后端
[root@server1 yum.repos.d]# ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.3:80 -g
[root@server1 yum.repos.d]# /etc/init.d/ipvsadm save     ##保存策略
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]
  • 查看调度次数:ipvsadm -l (-n不解析)
[root@server1 yum.repos.d]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.60.100:http rr
  -> server2:http                 Route   1      0          0         
  -> server3:http                 Route   1      0          0   
  • 添加VIP
    给所有的服务器把VIP地址添加在各自的NonARP网络设备上
[root@server1 yum.repos.d]# ip addr add 172.25.60.100/24 dev eth0
[root@server2 ~]# ip addr add 172.25.60.100/32 dev eth0
[root@serve3 bbs]# ip addr add 172.25.60.100/32 dev eth0

之所以两个后端的ip是32位的,是因为这个ip是内部的使用,不接受外部请求,所以得用32位的,如果是24位的,那个他们都处于同一网段,外部的ip也会识别并使用,容易被dios攻击

  • 测试:此时在物理机测试时,查看其MAC地址发现绑定的时server1的MAC地址,此时server2和server3是轮循的
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 但是当清除100的缓存后不会轮循,因为此时查看绑定的MAC地址是server2的,所以只会显示server2
    在这里插入图片描述
    在这里插入图片描述
  • 显然这样是不可以的,所以要配置server2和server3的路由策略
  • 下载安装并配置arptables_jf(server3同样)
    为arptables网络的用户控制过滤的守护进程,防止在物理机中测试时直接访问server2和server3
[root@server2 ~]# yum install -y arptables_jf
# 当网内广播需要172.25.64.100这个ip时,它丢弃所有网内的请求
[root@server2 ~]# arptables -A IN -d 172.25.60.100 -j DROP
# 当它自身需要在网内发包时,伪装为自己原本的ip172.25.64.2
[root@server2 ~]# arptables -A OUT -s 172.25.60.100 -j mangle --mangle-ip-s 172.25.60.2
[root@server2 ~]# /etc/init.d/arptables_jf save  #保存添加的两条策略
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]
[root@server2 ~]# /etc/init.d/arptables_jf start    #打开策略
Flushing all current rules and user defined chains:        [  OK  ]
Clearing all current rules and user defined chains:        [  OK  ]
Applying arptables firewall rules:                         [  OK  ]
  • 再次测试
  • 清除缓存后测试,此时的MAC地址依然为server1的
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42311209/article/details/89338050