• Centos7+LVS-DR+Apache负载均衡web实验


    一、简介

      1、理论已经在上一篇博客简述,不了解得可以看看

        https://www.cnblogs.com/zhangxingeng/p/10497279.html 

      2、LVS-DR优缺点复习     

        关于这种模式:

          1)确保前端路由器将目标ip为vip的请求报文发往director

            a、在前端网关做静态绑定;

            b、在RS上使用arptables;

            c、在RS上修改内核参数以限制arp通告即应答级别;

              arp_announce

              arp_ignore

          2)、RS的RIP可以使用私网或公网地址;

          3)、RS跟director在同一物理网络;

          4)、请求报文经由director,响应报文直接发往client;

          5)、此模式不支持端口映射;

          6)、RS支持大多数的OS;

          7)、RIP的网关不能指向DIP,以确保响应报文不经由director;

          

         缺点:LVS调度器及应用服务器在同一个网段中,因此不能实现集群的跨网段应用。

         优点:直接路由转发,通过修改请求报文的目标mac地址进行转发,效率提升明显

      3、实验拓扑

     

        实验说明:测试环境为虚拟机,准备三台即可,这里是四台外加本机物理机

    节点 ip 应用 ip2 备注
    web1 192.168.13.11(DIP) director VIP:ens37:0,192.168.13.100  
    web2 192.168.13.12(RIP) rs VIP:Lo:0,192.168.13.100  
    web3 192.168.13.13(RIP) rs VIP:Lo:0,192.168.13.100  
    web4 192.168.13.14 client   curl
    本地物理机测试 172网段 client   web访问

        

    二、开始部署

      1、网络配置

       修改虚拟机网卡rip、vip、dip都在同一个网段,这里使用仅主机模式

        配置网卡基础参数这里就不演示,配置静态,网关指向仅主机虚拟网卡网关即可

       director一块网卡即可,后续配置添加vip使用别名即可,别着急,在后面具体配置上

        

    1 [root@web1 ~]#  ifconfig 
    2 ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    3         inet 192.168.13.11  netmask 255.255.255.0  broadcast 192.168.13.255
    4         inet6 fe80::20c:29ff:fe1c:8b43  prefixlen 64  scopeid 0x20<link>
    5         ether 00:0c:29:1c:8b:43  txqueuelen 1000  (Ethernet)
    6         RX packets 271095  bytes 48234818 (46.0 MiB)
    7         RX errors 0  dropped 0  overruns 0  frame 0
    8         TX packets 129716  bytes 9264277 (8.8 MiB)
    9         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

       

       rs也是一块网卡,后续vip配置在lo:0上即可但是需要先修改arp_ignore,arp_announce才能添加lo:0

       

    1 [root@web2 ~]# ifconfig
    2 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    3         inet 192.168.13.12  netmask 255.255.255.0  broadcast 192.168.13.255
    4         inet6 fe80::3409:e73d:1ef:2e1  prefixlen 64  scopeid 0x20<link>
    5         ether 00:0c:29:75:de:46  txqueuelen 1000  (Ethernet)
    6         RX packets 291171  bytes 43500727 (41.4 MiB)
    7         RX errors 0  dropped 0  overruns 0  frame 0
    8         TX packets 84267  bytes 12274101 (11.7 MiB)
    9         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    [root@web3 ~]# ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.13.13  netmask 255.255.255.0  broadcast 192.168.13.255
            inet6 fe80::3409:e73d:1ef:2e1  prefixlen 64  scopeid 0x20<link>
            inet6 fe80::9416:80e8:f210:1e24  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:79:23:62  txqueuelen 1000  (Ethernet)
            RX packets 281305  bytes 43019942 (41.0 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 88839  bytes 12307738 (11.7 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

     

      2、关闭防火墙

        

    1       systemctl stop firewalld
    2 
    3       systemctl disable firewalld
    4 
    5       sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config 

      3、安装软件

    1       11上安装ipvsadm     
    2         yum install ipvsadm -y 
    3       12、13安装httpd
    4         yum install httpd -y
      

      4、配置web

         注意:arp_ignore 改为1的意义是,响应报文,请求报文从哪个地址进来的,就只能这个接口地址响应

           arp_announce 改为2的意义是,通知,不通告不同网段

     1 #修改web页面
     2       web2
     3  
     4          echo "welcom to web2" >/var/www/html/index.html
     5  
     6       web3
     7         echo "welcom to web3" >/var/www/html/index.html
     8 #启动与开机自启
     9          systemctl restart httpd
    10          systemctl enable httpd
    11 #修改内核参数,两台rs都修改
    12   echo 1 > /porc/sys/net/ipv4/conf/all/arp_ignore
    13   echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    14   echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
    15   echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
    16   echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce 
      #添加vip
      ifconfig lo:0 192.168.13.100 broadcast 192.168.13.100 netmask 255.255.255.255 up
    17 #添加默认路由,两台rs都修改,

    18 route add -host 192.168.13.100 dev lo:0

    19
      #ping 192.168.13.100 
    20

    ping 192.168.13.100

    21
    #物理机查看mac地址没有变化,说明rs没有响应ok ,11和100的地址保持一致就是对的
       物理机是windows10 cmd 命令行 arp -a 查看mac表
    22 arp -a
    2
    3 接口: 192.168.13.1 --- 0x16

    24 Internet 地址 物理地址 类型

    25 192.168.13.11 00-0c-29-1c-8b-43 动态

    26 192.168.13.12 00-0c-29-75-de-46 动态

    27 192.168.13.13 00-0c-29-79-23-62 动态

    28 192.168.13.14 00-0c-29-0f-ea-b4 动态

    29 192.168.13.100 00-0c-29-1c-8b-43 动态

        检查网络信息,web2举例,web3差不多就不贴上来了

     1 [root@web2 ~]# ifconfig
     2 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
     3         inet 192.168.13.12  netmask 255.255.255.0  broadcast 192.168.13.255
     4         inet6 fe80::3409:e73d:1ef:2e1  prefixlen 64  scopeid 0x20<link>
     5         ether 00:0c:29:75:de:46  txqueuelen 1000  (Ethernet)
     6         RX packets 291171  bytes 43500727 (41.4 MiB)
     7         RX errors 0  dropped 0  overruns 0  frame 0
     8         TX packets 84267  bytes 12274101 (11.7 MiB)
     9         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    10 
    11 lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    12         inet 127.0.0.1  netmask 255.0.0.0
    13         inet6 ::1  prefixlen 128  scopeid 0x10<host>
    14         loop  txqueuelen 1  (Local Loopback)
    15         RX packets 1181  bytes 99767 (97.4 KiB)
    16         RX errors 0  dropped 0  overruns 0  frame 0
    17         TX packets 1181  bytes 99767 (97.4 KiB)
    18         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    19 
    20 lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    21         inet 192.168.13.100  netmask 255.255.255.255
    22         loop  txqueuelen 1  (Local Loopback)
    23 
    24 virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    25         inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
    26         ether 52:54:00:23:a5:7c  txqueuelen 1000  (Ethernet)
    27         RX packets 0  bytes 0 (0.0 B)
    28         RX errors 0  dropped 0  overruns 0  frame 0
    29         TX packets 0  bytes 0 (0.0 B)
    30         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    31 
    32 [root@web2 ~]# 

       

      5、配置director

         lvs-dr模式不需要开启地址转发,ip_forward功能,因为director发给rs的数据包是修改过的包,不是原包,不经过ip_forward转发,而是经过修改后的mac根据l路由决策直接路由到rip

     1 #ens33是另外一块网卡down掉,配置网卡别名,添加vip
     2  ifconfig ens33 down
     3  ifconfig ens37:0 192.168.13.100/24 broadcast 192.168.13.100 up
     4 #配置ipvsadm
     5 ipvsadm -C 清空
     6 #添加规则
     7  ipvsadm -A -t 192.168.13.100:80 -s rr
     8  ipvsadm -a -t 192.168.13.100:80 -r 192.168.13.12 -g
     9  ipvsadm -a -t 192.168.13.100:80 -r 192.168.13.13 -g
    10 #查看规则
    11 [root@web1 zhangxingeng]# ipvsadm -ln
    12 IP Virtual Server version 1.2.1 (size=4096)
    13 Prot LocalAddress:Port Scheduler Flags
    14   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    15 TCP  192.168.13.100:80 rr
    16   -> 192.168.13.12:80             Route   1      0          0         
    17   -> 192.168.13.13:80             Route   1      0          0         

        检查网络信息

        

    [root@web1 ~]#  ifconfig 
    ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.13.11  netmask 255.255.255.0  broadcast 192.168.13.255
            inet6 fe80::20c:29ff:fe1c:8b43  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:1c:8b:43  txqueuelen 1000  (Ethernet)
            RX packets 271095  bytes 48234818 (46.0 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 129716  bytes 9264277 (8.8 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens37:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.13.100  netmask 255.255.255.255  broadcast 192.168.13.100
            ether 00:0c:29:1c:8b:43  txqueuelen 1000  (Ethernet)
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1  (Local Loopback)
            RX packets 123187  bytes 11609729 (11.0 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 123187  bytes 11609729 (11.0 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
            ether 52:54:00:23:a5:7c  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@web1 ~]# 

      6、测试结果

     

     1 [root@web4 ~]# curl 192.168.13.100
     2 welcom to web3
     3 [root@web4 ~]# curl 192.168.13.100
     4 welcom to web2
     5 [root@web4 ~]# curl 192.168.13.100
     6 welcom to web3
     7 [root@web4 ~]# curl 192.168.13.100
     8 welcom to web2
     9 [root@web4 ~]# curl 192.168.13.100
    10 welcom to web3
    11 [root@web4 ~]# curl 192.168.13.100
    12 welcom to web2
    13 [root@web4 ~]# curl 192.168.13.100
    14 welcom to web3
    #统计信息
    [root@web1 ~]# ipvsadm -ln --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 192.168.13.100:80 46 500 0 93970 0 -> 192.168.13.12:80 23 250 0 47616 0 -> 192.168.13.13:80 23 250 0 46354 0 [root@web1 ~]#
     #连接条目
    1
    [root@web1 ~]# ipvsadm -lnc 2 IPVS connection entries 3 pro expire state source virtual destination 4 TCP 01:53 FIN_WAIT 192.168.13.163:48482 192.168.13.100:80 192.168.13.12:80 5 TCP 01:54 FIN_WAIT 192.168.13.163:48488 192.168.13.100:80 192.168.13.13:80 6 TCP 01:53 FIN_WAIT 192.168.13.163:48480 192.168.13.100:80 192.168.13.13:80 7 TCP 14:56 ESTABLISHED 192.168.13.1:59343 192.168.13.100:80 192.168.13.13:80 8 TCP 01:52 FIN_WAIT 192.168.13.163:48478 192.168.13.100:80 192.168.13.12:80 9 TCP 01:54 FIN_WAIT 192.168.13.163:48490 192.168.13.100:80 192.168.13.12:80 10 TCP 01:53 FIN_WAIT 192.168.13.163:48484 192.168.13.100:80 192.168.13.13:80 11 TCP 01:53 FIN_WAIT 192.168.13.163:48486 192.168.13.100:80 192.168.13.12:80 12 TCP 15:01 ESTABLISHED 192.168.13.1:59344 192.168.13.100:80 192.168.13.12:80

     

    转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10573695.html 

  • 相关阅读:
    gitLab 全局hooks和custom_hooks,以及服务器端自动更新和备份(三)
    ORACLE的Copy命令和create table,insert into的比较
    计算机基础
    在C#应用中使用Common Logging日志接口
    数据库设计原则(转载)
    Oracle中函数如何返回结果集
    ORACLE时间常用函数(字段取年、月、日、季度)
    SQLServer2005 没有日志文件(*.ldf) 只有数据文件(*.mdf) 恢复数据库的方法
    sql server日期时间转字符串
    SQL Server删除用户失败的解决方法
  • 原文地址:https://www.cnblogs.com/zhangxingeng/p/10573695.html
Copyright © 2020-2023  润新知