LVS(一)LVS简介及LVS-DR模式配置搭建

时间:2022-10-19 03:07:23
一 LVS集群简介     1.LVS:linux虚拟服务器,是一个虚拟服务器集群系统。(章文嵩) 
   (LVS开源站点 官网:http://www.linuxvirtualserver.org/ 中文站点:http://zh.linuxvirtualserver.org/)     2.LVS 集群采用三层结构:      LVS(一)LVS简介及LVS-DR模式配置搭建
       负载调度器/分发器(load blancer/director):整个集群的前端机,负责将客户端的请求发送到一组服务器上执行,而客户端认为服务来自一个IP地址(VIP 虚拟IP地址)。        服务器池(serverbool):正真执行客户端请求的服务器,执行服务有WEB、MAIL、FTP和DNS。        共享存储:为服务器池提供一个共享的存储区、使得服务器池拥有相同内容、提供相同服务。     3.LVS负载均衡的三种包转换方式       NAT(网络地址映射)、IP Tunneling(IP 隧道)、Direct Routing(直接路由)。
       1.NAT(网络地址映射)
        客户端访问director(分配器)(VIP)时,director通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法。将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户机,完成整个负载均衡调度过程,但因为服务器恢复请求全经过director,会造成director巨大负载。(分配器:公网IP和私有IP(后端网关), real server:私有IP)        2.Direct Routing(直接路由)
        director(分配器)分配请求到real server。real server 处理请求后直接回应给用户,director负载均衡器仅处理客户机与服务器一半连接。从而避免性能瓶颈,同样增加系统可伸缩性。Direct Routing由于采用物理层(修改MAC地址)技术,因此所有服务器都必须处理同一物理网段
       3.IP Tunneling(IP隧道)
        director(分发器) 分配请求到real server。real server处理请求后直接回应给用户。director负载均衡器近处理客户机与服务器的一半连接。IP Tunneling技术极大提高了director的调度处理能力,同时也极大地提高系统能容纳的最大节点数,可以超过100节点。real server可以在任何LAN或WAN上运行,允许地理上的分布。服务器必须拥有正式的IP地址,用于与客户端直接通信,并且所有服务器必须支持IP隧道协议。        LVS-NAT仅仅要求后端服务器网关指向负载均衡器的内网地址;
       LVS-DR模式要求后端服务器禁用对虚拟IP的ARP响应,后端服务器网关不指向负载均衡。(目前运维架构最常用4层开源均衡转发策略)
       LVS-Tun要求后端服务器支持ipip解封包。 二 LVS-DR模式介绍    LVS-DR架构
LVS(一)LVS简介及LVS-DR模式配置搭建
   1.Client发起Arp Request,请求192.168.1.160(VIP)的MAC地址,(未知MAC时写成全0)负载均衡器Arp Response,回复给自身MAC地址。   2.Cinet连接192.168.1.1.160的80端口,发送TCP SYN(源地址为Client的IP,目的IP为Master LVS 的虚拟IP)
   3.LVS进行包转发给Web(对于Client发来的包的IP部分不改变,只改变MAC)
   4.后端服务器Web收到请求的数据包后,处理并直接回复给Client(源地址为LVS的虚拟IP,目的地址为Client IP)三 LVS—DR配置   1.Director配置        操作IP 192.168.1.166,配置VIP(创建eno:1并配置)
    
    
  1. cp /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/sysconfig/network-scripts/ifcfg-eno16777736:1
  2. vim /etc/sysconfig/network-scripts/ifcfg-eno16777736:1
  3. #去掉DNS、网关,并配置以下内容
  4. TYPE=Ethernet
  5. BOOTPROTO=none
  6. DEFROUTE=yes
  7. IPV4_FAILURE_FATAL=no
  8. IPV6INIT=yes
  9. IPV6_AUTOCONF=yes
  10. IPV6_DEFROUTE=yes
  11. IPV6_FAILURE_FATAL=no
  12. NAME=eno16777736:1
  13. UUID=324e6803-eef0-485a-8667-2b525785628c
  14. DEVICE=eno16777736:1
  15. ONBOOT=yes
  16. IPADDR=192.168.1.160
  17. PREFIX=32
  18. IPV6_PEERDNS=yes
  19. IPV6_PEERROUTES=yes
  20. service network restart
        安装ipvsadm并配置
   
   
  1. yum install ipvsadm -y
  2. ipvsadm -A -t 192.168.1.160:80 -s rr
  3. ipvsadm -a -t 192.168.1.160:80 -r 192.168.1.186 -g
  4. ipvsadm -a -t 192.168.1.160:80 -r 192.168.1.188 -g
  5. ipvsadm -L -n
  6. IP Virtual Server version 1.2.1 (size=4096)
  7. Prot LocalAddress:Port Scheduler Flags
  8. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  9. TCP 192.168.1.160:80 rr
  10. -> 192.168.1.186:80 Route 1 0 0
  11. -> 192.168.1.188:80 Route 1 0 0        
      开启防火墙80端口
   
   
  1. firewall-cmd --permanent --add-port=80/tcp
  2. firewall-cmd --reload
   2.Web配置
       操作IP 192.168.1.186、 192.168.1.188,配置VIP lo
   
   
  1. cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:1
  2. vim /etc/sysconfig/network-scripts/ifcfg-lo:1
  3. #删除广播地址
  4. DEVICE=lo:1
  5. IPADDR=192.168.1.160
  6. NETMASK=255.255.255.255
  7. # If you're having problems with gated making 127.0.0.0/8 a martian,
  8. # you can change this to something else (255.255.255.255, for example)
  9. ONBOOT=yes
  10. NAME=loopback
  11. service network restart
       安装httpd服务,并开启防火墙80端口
   
   
  1. yum install httpd -y #安装httpd
  2. echo 192.168.1.186 >/var/www/html/index.html #输入网站显示各自IP
  3. systemctl restart httpd
  4. firewall-cmd --permanent --add-port=80/tcp #开启防火墙80端口
  5. firewall-cmd --reload
  6. #测试,浏览器登录IP查看,是否正常启动。
       关闭VIP ARP响应
   
   
  1. echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  2. echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  3. echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  4. echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce 
   3.测试
   
   
  1. [root@test2 ~]# curl 192.168.1.160
  2. 192.168.1.188
  3. [root@test2 ~]# curl 192.168.1.160
  4. 192.168.1.186
  5. [root@test2 ~]# curl 192.168.1.160
  6. 192.168.1.188
  7. [root@test2 ~]# curl 192.168.1.160
  8. 192.168.1.186
注:

LVS realserver lo端口配置中涉及到调整两个网络参数 arp_announce=2 和 arp_ignore=1,忽略官方文档复杂晦涩的表述,其实我们可以这样理解:

    arp_ignore=1 表示对于网络上发来的arp广播包,realserver的lo端口将会丢弃,因为如果做出应答,根据arp协议,相当于通告网络上其它主机VIP对应的Mac地址是realserver的Mac地址,而不是LB的Mac地址,这样客户端上就会绕过lvs,直接与后端的realserver通信,负载调度就失去了意义;

    arp_announce: 

    realserver 一般至少两个端口 两个ip,eth0 有ip,lo:0也绑定了一个vip,根据arp协议,

arp请求包中必须包含源主机的IP地址和Mac地址,对方收到请求包后,记录下该源地址和Mac地址,建立一对一的映射,那么对于这种多IP的情况,realserver发送arp请求报的时候该如何取舍,将哪个ip作为源地址?

   参数arp_anonunce 正好是用来解决这个问题的,arp_announce=2 官方表述为使用最适当的本地地址,其实就是将eth0上的ip作为源地址如果将vip作为源地址,对方就会将vip与realserver的mac地址映射起来,导致请求包都发给realserver,而不经过lvs.

注释解释来源: http://www.07net01.com/2015/08/900693.html