• lvs学习篇


    LVS:是一种负载均衡器,工作在osi四层,基于ip和端口实现转发数据包,其传输的流量最多可达传输层。

    lvs的相关名词解释:

    RS:真实的后端服务器

    CIP:客户端的ip

    VIP: 虚拟服务器面向客户端的ip,我们称为外网ip

    DIP: 虚拟服务器面向后端服务器的ip,我们称为内网ip

    RIP: 真实后端服务器的ip

    lvs集群的常见类型:

    lvs-nat(网络地址装换): 其本质是修改请求报文的目标ip和端口从而实现的数据包转发

    lvs-dr(直连路由): 其本质是通过修改请求报文的源目mac地址实现的数据包转发,该算法也是生产环境中使用最多的一种

    lvs-tun(隧道): 其本质是将请求数据包重新封装在一个新的IP数据包中,并通过隧道发送给后端服务器

    lvs的调度算法:

    静态算法:不考虑后端服务器的负载

    RR:轮询,客户端的请求被轮流调度到不同的后端服务器上

    WRR:在RR的基础上,给后端服务器添加权重值,权重值大的服务器优先调度,调度完之后才轮到权重值小的服务器

    SH:源地址哈希,将同一ip来源的请求,始终转发到同一后端服务器

    DH:目标地址哈希,尽量保证相同目标地址的请求被分配到同一后端服务器。

    动态算法:考虑后端服务器的负载,来动态分配请求

    LC:会把连接请求分配到当前活动连接数最少的真实服务器上。

    WLC:在 LC 算法的基础上,为每个真实服务器设置了权重值。服务器的权重越高,其处理新连接的能力就越强。在分配连接时,首先计算每个服务器的加权活动连接数(权重值与活动连接数的乘积),然后将新连接分配到加权活动连接数最小的服务器上。

    SED: 算法在调度时会综合考虑服务器的权重和当前的连接数。其基本思想是为每个服务器计算一个预期延迟值,预期延迟值的计算基于服务器的权重和当前连接数。

    具体来说,预期延迟值等于:(当前连接数 + 1) * 256 / 服务器权重,调度时,SED 算法会选择预期延迟值最小的服务器来处理新的请求。

    LVS负载均衡使用的场景:

    1. 高并发网站:当网站的访问量巨大,单个服务器无法承受负载时,LVS 可以将流量分发到多个后端服务器,确保网站的快速响应和稳定性。

    2. 电商平台:在促销活动或高峰时段,电商平台会面临大量的用户请求,LVS 有助于平衡服务器负载,保证交易的顺利进行。

    3. 在线游戏:处理大量玩家的同时在线和交互请求,确保游戏服务的流畅性。

    总之,只要存在大量并发请求且需要在多个服务器之间均衡分配负载以保证服务质量和可用性的场景,都可以考虑使用 LVS 负载均衡

    lvs-nat实验

    nat模式数据传输的原理:

    我们的用户发出请求后,请求报文里会携带源客户端ip地址以及目的ip地址即中间虚拟服务器的外网ip地址以及端口,当我们的请求到达中间虚拟服务器后,会将请求报文的目的ip地址替换成真实后端服务器的ip地址以及端口,因为虚拟服务器的内网ip地址是和后端服务器处于同一网段,所以我们的请求会继续通过虚拟服务器的内网ip地址将请求转发到后端服务器,请求到达后端服务器后,会将源ip地址替换成后端服务器的ip地址,目标ip地址替换成客户端的ip地址以及端口,最后将数据包通过虚拟服务器返回给客户端,从而实现数据的双向交互。

    实验环境:

    虚拟机版本:redhat9.4

    客户端服务器: windows端作为测试端

    lvs服务器: eth0:172.25.254.100    NAT                eth1:192.168.0.100      仅主机

    web1服务器: 192.168.0.10           仅主机             gateway:192.168.0.100

    web2服务器: 192.168.0.20           仅主机             gateway:192.168.0.100

    web1服务器端配置:

    1. [root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
    2. [connection]
    3. id=eth0
    4. type=ethernet
    5. interface-name=eth0
    6. [ipv4]
    7. address1=192.168.0.10/24,192.168.0.100
    8. method=manual
    9. dns=114.114.114.114;
    10. [root@www ~]# nmcli connection reload
    11. [root@www ~]# nmcli connection up eth0
    12. [root@www ~]# yum install nginx -y
    13. [root@www ~]# echo web1 > /usr/share/nginx/html/index.html
    14. [root@www ~]# systemctl restart nginx
    15. [root@www ~]# curl 192.168.0.10
    16. web1

    web2服务器端配置:

    1. [root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
    2. [connection]
    3. id=eth0
    4. type=ethernet
    5. interface-name=eth0
    6. [ipv4]
    7. address1=192.168.0.20/24,192.168.0.100
    8. method=manual
    9. dns=114.114.114.114;
    10. nmcli connection reload
    11. nmcli connection up eth0
    12. yum install nginx -y
    13. echo web2 > /usr/share/nginx/html/index.html
    14. systemctl restart nginx
    15. curl 192.168.0.20
    16. web2

    lvs服务器端配置:

    1. [root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
    2. [connection]
    3. id=eth0
    4. type=ethernet
    5. interface-name=eth0
    6. [ipv4]
    7. address1=172.25.254.100/24,172.25.254.2
    8. method=manual
    9. dns=114.114.114.114;
    10. nmcli connection reload
    11. nmcli connection up eth0
    12. [root@www ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
    13. [connection]
    14. id=eth1
    15. type=ethernet
    16. interface-name=eth1
    17. [ipv4]
    18. address1=192.168.0.100/24,172.25.254.2
    19. method=manual
    20. dns=114.114.114.114;
    21. nmcli connection reload
    22. nmcli connection up eth1
    23. #打开路由转发功能,让172网段和192网段互通
    24. vim /etc/sysctl.conf
    25. net.ipv4.ip_forward = 1
    26. sysctl -p #重载生效
    27. #安装lvs软件
    28. yum install ipvsadm -y
    29. #设置lvs策略
    30. ipvsadm -A -t 172.25.254.100:80 -s rr
    31. ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
    32. ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
    33. -A:添加lvs策略
    34. -t:指定传输的协议为tcp
    35. -s:指定调度算法
    36. -a:添加后端真实服务器
    37. -r:指定后端服务器的ip
    38. -m:指定lvs的模式为nat模式
    39. #查看添加的路由策略
    40. [root@www ~]# ipvsadm -Ln
    41. IP Virtual Server version 1.2.1 (size=4096)
    42. Prot LocalAddress:Port Scheduler Flags
    43. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    44. TCP 172.25.254.100:80 rr
    45. -> 192.168.0.10:80 Masq 1 0 0
    46. -> 192.168.0.20:80 Masq 1 0 0

    windows客户端测试:

    1. C: \Users\大圣哥>curl 172. 25. 254. 100
    2. web2
    3. C: \Users\大圣哥>curl 172. 25. 254. 100
    4. web1

    lvs-dr实验

    dr模式数据传输的原理:

    当我们的客户端发出请求后,请求报文里会携带客户端的ip地址以及mac地址,同时还会携带中间虚拟服务器的外网ip,以及mac地址,当请求到达虚拟服务器后,虚拟服务器会将虚拟服务器的外网的mac地址替换成真实的后端服务器的mac地址,接着请求被转发到后端服务器后,数据包会将虚拟服务器的ip作为源ip,后端服务器的mac作为源mac,而将客户端的ip作为目的ip,客户端的mac作为目的mac,最后直接将请求返回给客户端,从而实现数据的转发。

    实验环境:

    客户端:172.25.254.200        nat

    router:eth0 172.25.254.100  nat        eth1 192.168.0.100       仅主机

    lvs: vip: 192.168.0.200                       dip: 192.168.0.50          仅主机

    web1: rip 192.168.0.10                       vip:192.168.0.200         仅主机

    web2: rip 192.168.0.20                       vip:192.168.0.200         仅主机

    注意:192网段为nat,172网段为仅主机

    客户端配置:

    1. [root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
    2. [connection]
    3. id=eth0
    4. type=ethernet
    5. interface-name=eth0
    6. [ipv4]
    7. address1=172.25.254.200/24,172.25.254.100
    8. method=manual
    9. dns=114.114.114.114;

    router端配置:

    1. [root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
    2. [connection]
    3. id=eth0
    4. type=ethernet
    5. interface-name=eth0
    6. [ipv4]
    7. address1=172.25.254.100/24,172.25.254.2
    8. method=manual
    9. dns=114.114.114.114;
    10. [root@www ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
    11. [connection]
    12. id=eth1
    13. type=ethernet
    14. interface-name=eth1
    15. [ipv4]
    16. address1=192.168.0.100/24
    17. method=manual
    18. dns=114.114.114.114;

    lvs端配置:

    1. [root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
    2. [connection]
    3. id=eth0
    4. type=ethernet
    5. interface-name=eth0
    6. [ipv4]
    7. address1=192.168.0.50/24,192.168.0.100
    8. method=manual
    9. dns=114.114.114.114;
    10. #打开路由转发
    11. vim /etc/sysctl.conf
    12. net.ipv4.ip_forward = 1
    13. sysctl -p #重载生效
    14. #添加vip
    15. ip a a 192.168.0.200/32 dev lo
    16. #添加路由策略
    17. yum install ipvsadm -y
    18. [root@www ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 1
    19. [root@www ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 1

    web1端配置:

    1. [root@www ~]# yum install nginx -y
    2. [root@www ~]# echo web1 > /usr/share/nginx/html/index.html
    3. [root@www ~]# systemctl restart nginx
    4. [root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
    5. [connection]
    6. id=eth0
    7. type=ethernet
    8. interface-name=eth0
    9. [ipv4]
    10. address1=192.168.0.10/24,192.168.0.100
    11. method=manual
    12. dns=114.114.114.114;
    13. #添加vip
    14. ip a a 192.168.0.200/32 dev lo
    15. #忽略arp广播
    16. [root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    17. [root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    18. [root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    19. [root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    web2端配置:

    1. [root@www ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
    2. [connection]
    3. id=eth0
    4. type=ethernet
    5. interface-name=eth0
    6. [ipv4]
    7. address1=192.168.0.20/24,192.168.0.100
    8. method=manual
    9. dns=114.114.114.114;
    10. #添加vip
    11. ip a a 192.168.0.200/32 dev lo
    12. #忽略arp广播
    13. [root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    14. [root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    15. [root@www ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    16. [root@www ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    访问测试

    1. [root@www ~]# for i in {1..10}
    2. > do
    3. > curl 192.168.0.200
    4. > done
    5. web1
    6. web2
    7. web1
    8. web2
    9. web1
    10. web2
    11. web1
    12. web2
    13. web1
    14. web2

  • 相关阅读:
    硒化镉量子点 CdSe QDs 的产品形态和产品规格描述
    springboot使用@Validated校验不生效
    基于目录的ant任务
    Leetcode160. 相交链表
    docker简单部署springboot项目
    山东大学单片机原理与应用实验 3.2 拓展并行I/O口实验
    【牛客刷题--SQL篇】多表查询链接查询 SQL22统计每个学校的答过题的用户的平均答题数
    使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
    使用Easyocr处理图片遇到的问题合集
    牛客每日刷题之二叉树
  • 原文地址:https://blog.csdn.net/a17783481239/article/details/141039720