• LVS-DR模式 +keepalived


    目录

    一、LVS-DR工作原理

    二、实验环境

    三、实验步骤

    1、zwb_dr1配置

    2、配置web1 服务器

    3、配置web2 服务器

    4 、打开WIN10虚拟机

    5、测试


    一、LVS-DR工作原理

    LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一种工作模式,Director Server 作为群集的访问入口,不作为网关使用。节点Director Server 与Real Server 需要在同一个网络中,返回给客户端的数据不需要经过Director Server。为了对整个群集的访问,Dreector Server和Real Server都需要配置VIP地址

    二、实验环境

    LVS-DR模式

    实验原理:

    1. 用户请求目标网站时,经过dns查询得到目的IP为VIP,目的端口为80,于是客户端和我们VIP,端口80建立连接。当数据包到达VIP所在的局域网时,在同一网段中,两个主机通信靠的是二层的MAC而不是Ip地址,因此需要将IP地址转换为MAC地址,因此会发出apr请求,查询VIP对应的mac地址。(Linux主机有这么一个特性,假设我们的主机上有两块网卡,比如ens33,ens36 当arp请求ens33的mac地址的时候,ens36也会答复,我们在Rel01的lo网卡上配置了VIP,但是我们只想让Director上的网卡来响应我们的这个arp请求。因此就需要更改下我们的一些内核参数,让lo网卡只对本地物理网卡发出的ARP请求做出回应。)

    2. 当用户请求到达Director后通过分流算法,发送给后端真实服务器,此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP(Director的ens33的地址)的MAC地址,目标MAC地址为RIP(后端真实服务器地址)的MAC地址

    3. 由于负载均衡器和真实服务器在同一个网络中,所以是通过二层来传输。

    4. client的请求被Director转发到达Rel01后,由于Rel01的lo接口配置了VIP(请求中的目标IP正是VIP),所以接收请求并处理。处理完成之后,将响应报文通过lo接口传送给ens33网卡(这个网卡一般指和调度器在一个网段的网卡)然后向外发出。此时的源IP地址为VIP,目标IP为CIP。(如果将源地址为VIP将数据包发送出去,那么最终交换机上会产生两条VIP对应的mac地址记录,一条是Director的mac地址记录,还有一条是Rel01的mac地址记录,这将会导致真正的VIP无法接收到请求。此处要配置arp_announce,目的是为了修改源ip的目的地址。

    5. 配置arp_announce=2,选择该主机发送网卡上最合适的ens33的ip地址作为arp请求的源IP地址。

    6.  响应报文通过二层链路传输,最终送达至客户端。

    三、实验步骤

    1、zwb_dr1配置

    ①修改负载均衡器名称:

    1. [root@zwb_lvs01 ~]# hostnamectl set-hostname zwb_DR1 ####改名
    2. [root@zwb_lvs01 ~]# su
    3. [root@zwb_dr1 ~]#
    4. [root@zwb_dr1 ~]# systemctl stop firewalld ####关闭防火墙 、安全中心
    5. [root@zwb_dr1 ~]# systemctl disable firewalld
    6. [root@zwb_dr1 ~]# setenforce 0
    7. [root@zwb_dr1 ~]# cd /etc/sysconfig/network-scripts/ ###设置虚拟IP,VIP信息
    8. [root@zwb_dr1 ~]# cp -p ifcfg-ens33 ifcfg-ens33:0
    9. [root@zwb_dr1 network-scripts]# vim ifcfg-ens33:0
    10. TYPE=Ethernet
    11. PROXY_METHOD=none
    12. BROWSER_ONLY=no
    13. BOOTPROTO=static
    14. DEFROUTE=yes
    15. IPV4_FAILURE_FATAL=no
    16. IPV6INIT=yes
    17. IPV6_AUTOCONF=yes
    18. IPV6_DEFROUTE=yes
    19. IPV6_FAILURE_FATAL=no
    20. IPV6_ADDR_GEN_MODE=stable-privacy
    21. NAME=ens33:0
    22. DEVICE=ens33:0
    23. ONBOOT=yes
    24. IPADDR=192.168.159.100 ### VIP地址
    25. NETMASK=255.255.255.255 ### VIP的子网掩码为 255.255.255.255
    26. #GATEWAY=192.168.159.2
    27. #DNS1=114.114.114.114
    28. IPV6_PRIVACY=no
    29. [root@zwb_dr1 network-scripts]# systemctl restart network ## 重启网络服务
    30. [root@zwb_dr1 network-scripts]# ifconfig
    31. ens33: flags=4163 mtu 1500
    32. inet 192.168.159.159 netmask 255.255.255.0 broadcast 192.168.159.255
    33. inet6 fe80::dfec:5365:4cbb:4773 prefixlen 64 scopeid 0x20<link>
    34. ether 00:0c:29:ce:ea:1e txqueuelen 1000 (Ethernet)
    35. RX packets 7662 bytes 9104872 (8.6 MiB)
    36. RX errors 0 dropped 0 overruns 0 frame 0
    37. TX packets 3429 bytes 277942 (271.4 KiB)
    38. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    39. ens33:0: flags=4163 mtu 1500
    40. inet 192.168.159.100 netmask 255.255.255.255 broadcast 192.168.159.100
    41. ether 00:0c:29:ce:ea:1e txqueuelen 1000 (Ethernet)
    42. [root@zwb_dr1 ~]# yum -y install epel-release.noarch ##安装yum仓库扩展源
    43. [root@zwb_dr1 ~]# yum -y install ipvsadm.x86_64 ##安装 ipvsadm
    44. [root@zwb_dr1 ~]# modprobe ip_vs ## 加载ipvsadm
    45. [root@zwb_dr1 ~]# cat /proc/net/ip_vs
    46. [root@zwb_dr1 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm ## 保存ipvsadm的规则(先保存规则不
    47. ##然无法启动)
    48. [root@zwb_dr1 network-scripts]# systemctl start ipvsadm.service ## 启动ipvsadm
    49. ##配置ipvsadm,添加虚拟主机
    50. [root@zwb_dr1 network-scripts]# ipvsadm -C ## 清空ipvsadm规则
    51. [root@zwb_dr1 network-scripts]# ipvsadm -A -t 192.168.159.100:80 -s rr ## 添加虚虚拟主机
    52. ## ip地址为VIP
    53. [root@zwb_dr1 ~]# ipvsadm -a -t 192.168.159.100:80 -r 192.168.159.10:80 -g ##在虚拟主机中添
    54. ##加了一个真实服务器的ip
    55. ## -g 表示选用DR模式
    56. [root@zwb_dr1 ~]# ipvsadm -a -t 192.168.159.100:80 -r 192.168.159.11:80 -g
    57. ##不写-g默认的也是DR
    58. [root@zwb_dr1 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm ## 保存ipvsadm规则
    59. [root@zwb_dr1 ~]# ipvsadm -ln ### 查看ipvsadm规则
    60. IP Virtual Server version 1.2.1 (size=4096)
    61. Prot LocalAddress:Port Scheduler Flags
    62. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    63. TCP 192.168.159.100:80 rr
    64. -> 192.168.159.10:80 Route 1 0 0
    65. -> 192.168.159.11:80 Route 1 0 0
    66. ####调整proc的响应参数
    67. [root@zwb_dr1 ~]# vim /etc/sysctl.conf
    68. net.ipv4.ip_forward = 0
    69. net.ipv4.conf.all.send_redirects = 0
    70. net.ipv4.conf.default.send_redirects = 0
    71. net.ipv4.conf.ens33.send_redirects = 0

    2、配置web1 服务器

    1. [root@zwb_web1 ~]# cd /etc/sysconfig/network-scripts/
    2. [root@zwb_web1 ~]# cp -p ifcfg-lo ifcfg-lo:0
    3. [root@zwb_web1 network-scripts]# vim ifcfg-lo:0
    4. DEVICE=lo:0
    5. IPADDR=192.168.159.100
    6. NETMASK=255.255.255.255
    7. ONBOOT=yes
    8. NAME=lo:0
    9. [root@zwb_web1 network-scripts]# systemctl restart network
    10. [root@zwb_web1 ~]# yum -y install httpd
    11. [root@zwb_web1 ~]# systemctl start httpd
    12. [root@zwb_web1 ~]# vim /var/www/html/index.html ##修改主页面内容
    13. this is web1
    14. ##路由禁锢
    15. [root@zwb_web1 ~]# route add -host 192.168.159.100 dev lo:0
    16. [root@zwb_web1 ~]# vim /etc/sysctl.conf
    17. net.ipv4.conf.all.arp_ignore=1
    18. net.ipv4.conf.all.arp_announce=2
    19. net.ipv4.conf.lo.arp_ignore=1
    20. net.ipv4.conf.lo.arp_announce=2

    3、配置web2 服务器

    1. [root@zwb_web2 ~]# cd /etc/sysconfig/network-scripts/
    2. [root@zwb_web2 ~]# cp -p ifcfg-lo ifcfg-lo:0
    3. [root@zwb_web2 network-scripts]# vim ifcfg-lo:0
    4. DEVICE=lo:0
    5. IPADDR=192.168.159.100
    6. NETMASK=255.255.255.255
    7. ONBOOT=yes
    8. NAME=lo:0
    9. [root@zwb_web2 network-scripts]# systemctl restart network
    10. [root@zwb_web2 ~]# yum -y install httpd
    11. [root@zwb_web2 ~]# systemctl start httpd
    12. [root@zwb_web2 ~]# vim /var/www/html/index.html ##修改主页面内容
    13. this is web2
    14. ##路由禁锢
    15. [root@zwb_web2 ~]# route add -host 192.168.159.100 dev lo:0
    16. [root@zwb_web1 ~]# vim /etc/sysctl.conf
    17. net.ipv4.conf.all.arp_ignore=1
    18. net.ipv4.conf.all.arp_announce=2
    19. net.ipv4.conf.lo.arp_ignore=1
    20. net.ipv4.conf.lo.arp_announce=2

    4 、打开WIN10虚拟机

    设置网络为NAT模式

    配置固定ip地址

    5、测试

    刷新

    由于浏览器有cookie,可以先清除cookie再刷新,出结果比较快点。

    注:本实验使用的是httpd作为真实服务器,也可使用nginx的替换httpd

    1、配置web1

    1. ##编译安装 nginx ,之前博客有详细安装过程
    2. ##设置主页内容,便于分辨验证结果
    3. [root@zwb_web1 network-scripts]# cat /usr/local/nginx/html/index.html
    4. <head>
    5. Welcome to nginx!
    6. wo shi web1 !!!

      #### 只修改此行
    7. If you see this page, the nginx web server is successfully installed and

    8. working. Further configuration is required.

    9. For online documentation and support please refer to

    10. ........................................
    11. [root@zwb_web1 ~]# cd /etc/sysconfig/network-scripts/
    12. [root@zwb_web1 ~]# cp -p ifcfg-lo ifcfg-lo:0
    13. [root@zwb_web1 network-scripts]# vim ifcfg-lo:0
    14. DEVICE=lo:0
    15. IPADDR=192.168.159.100
    16. NETMASK=255.255.255.255
    17. ONBOOT=yes
    18. NAME=lo:0
    19. [root@zwb_web1 network-scripts]# systemctl restart network
    20. ###修改网卡配置,将网关指向负载均衡器的ens33的ip 地址
    21. [root@zwb_web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
    22. TYPE=Ethernet
    23. PROXY_METHOD=none
    24. BROWSER_ONLY=no
    25. BOOTPROTO=static
    26. DEFROUTE=yes
    27. IPV4_FAILURE_FATAL=no
    28. IPV6INIT=yes
    29. IPV6_AUTOCONF=yes
    30. IPV6_DEFROUTE=yes
    31. IPV6_FAILURE_FATAL=no
    32. IPV6_ADDR_GEN_MODE=stable-privacy
    33. NAME=ens33
    34. UUID=d78d9180-d8c7-4d65-86fb-5364e4cf736b
    35. DEVICE=ens33
    36. ONBOOT=yes
    37. IPV6_PRIVACY=no
    38. DNS1=114.114.114.114
    39. IPADDR=192.168.159.11
    40. PREFIX=24
    41. GATEWAY=192.168.159.159 ####修改
    42. ##路由禁锢
    43. [root@zwb_web1 ~]# route add -host 192.168.159.100 dev lo:0
    44. [root@zwb_web1 ~]# vim /etc/sysctl.conf
    45. net.ipv4.conf.all.arp_ignore=1
    46. net.ipv4.conf.all.arp_announce=2
    47. net.ipv4.conf.lo.arp_ignore=1
    48. net.ipv4.conf.lo.arp_announce=2

    2、web2 配置与web1的配置一样

    验证:

    验证时会出现轮询很慢的情况:

    通过watch -n 1 ipvsadm -ln 查看活跃数。当活跃数均为0,此时点击刷新便可轮询,否则刷新无轮询结果。

  • 相关阅读:
    C++ 强制类型转换(int double)、查看数据类型、自动决定类型、三元表达式、取反、
    AI/ML如何在山林防火中大显身手
    新电脑的前端开发环境的安装配置
    【UOJ 284】快乐游戏鸡(贪心)(长链剖分)(线段树)
    python sqlalchemy(ORM)- 01 简单使用
    MapReduce的Partition和OutputFormat
    Vue常见的实现tab切换的两种方法
    Unity切换到另一个场景的时候,发现该场景变暗了
    昇思25天学习打卡营第15天 | Vision Transformer图像分类
    【笑小枫的SpringBoot系列】【十六】SpringBoot生成PDF
  • 原文地址:https://blog.csdn.net/m0_62948770/article/details/126811230