• LVS 调度器 nat和DR模式


    lvs-nat 

    修改请求报文的目标IP,多目标IP的DNAT

    配置网络

    LVS主机 注意网卡的顺序 (nat和主机模式)

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

    打开内核路由功能 让两个网卡通讯

    1. [root@lvs ~]# sysctl -a | grep ip_forward
    2. net.ipv4.ip_forward =
    3. net.ipv4.ip_forward_update_priority = 1
    4. net.ipv4.ip_forward_use_pmtu = 0
    5. [root@lvs ~]# vim /etc/sysctl.conf
    6. net.ipv4.ip_forward=1
    7. # 生效
    8. [root@lvs ~]# sysctl -p
    9. net.ipv4.ip_forward = 1

    server1

    1. [root@server1 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
    2. [connection]
    3. id=ens160
    4. type=ethernet
    5. interface-name=ens160
    6. [ipv4]
    7. address1=192.168.0.10/24,192.168.0.100
    8. method=manual

    server2

    1. [root@server2 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
    2. [connection]
    3. id=ens160
    4. type=ethernet
    5. interface-name=ens160
    6. [ipv4]
    7. address1=192.168.0.20/24,192.168.0.100
    8. method=manual

    配置httpd服务

    server1

    1. yum install httpd -y
    2. echo webserver1 - 192.168.0.10 > /var/www/html/index.html
    3. systemctl enable --now httpd

    server2

    1. yum install httpd -y
    2. echo webserver1 - 192.168.0.20 > /var/www/html/index.html
    3. systemctl enable --now httpd

    在lvs主机中测试

    1. [root@lvs ~]# curl 192.168.0.10
    2. webserver1 - 192.168.0.10
    3. [root@lvs ~]# curl 192.168.0.20
    4. webserver2 - 192.168.0.20

    LVS中 下载安装LVS  添加策略

    dnf install ipvsadm -y

    lvsadm的相关命令

    管理集群服务 ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \

    -A #添加

    -E #修改

    -t #tcp服务

    -u #udp服务

    -s #指定调度算法,默认为WLC

    -p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver

    -f #firewall mask 火墙标记,是一个数字

    管理集群中的real server

    ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](权重)

    -a #添加realserver

    -e #更改realserver

    -t #tcp协议 -u #udp协议

    -f #火墙 标签

    -r #realserver地址

    -g #直连路由模式

    -i #ipip隧道模式

    -m #nat模式

    -w #设定权重

    -Z #清空计数器

    -C #清空lvs策略

    -L #查看lvs策略

    -n #不做解析

    --rate :输出速率信息

    看策略的命令

    ipvsadm -Ln

     添加策略

    ipvsadm -A 添加一个集群服务,需要使用选项 rr 轮询 静态算法 -s 指定集群服务使用的调度算法   -m是nat模式

    1. ipvsadm -A -t 192.168.136.100:80 -s rr
    2. ipvsadm -a -t 192.168.136.100:80 -r 192.168.0.10:80 -m
    3. ipvsadm -a -t 192.168.136.100:80 -r 192.168.0.20:80 -m

    查看策略 

    1. [root@lvs ~]# ipvsadm -Ln
    2. IP Virtual Server version 1.2.1 (size=4096)
    3. Prot LocalAddress:Port Scheduler Flags
    4.  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    5. TCP  192.168.136.100:80 rr
    6.  -> 192.168.0.10:80             Masq    1      0          0        
    7.  -> 192.168.0.20:80             Masq    1      0          0    

    测试

    1. [root@server ~]# for i in {1..10}
    2. > do
    3. > curl 192.168.136.100
    4. > done
    5. webserver2 - 192.168.0.20
    6. webserver1 - 192.168.0.10
    7. webserver2 - 192.168.0.20
    8. webserver1 - 192.168.0.10
    9. webserver2 - 192.168.0.20
    10. webserver1 - 192.168.0.10
    11. webserver2 - 192.168.0.20
    12. webserver1 - 192.168.0.10
    13. webserver2 - 192.168.0.20
    14. webserver1 - 192.168.0.10

    保存策略

    [root@lvs ~]# ipvsadm-save

    保存进文件

    [root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm

    ps: 最好把解析做好 否则很慢

    不做解析的化,可以加-n选项

    [root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

    将策略清空,重新导入

    1. [root@lvs ~]# ipvsadm -C
    2. [root@lvs ~]# ipvsadm -Ln
    3. IP Virtual Server version 1.2.1 (size=4096)
    4. Prot LocalAddress:Port Scheduler Flags
    5. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    6. [root@lvs ~]# ipvsadm-restore < /etc/sysconfig/ipvsadm

    以上用的是rr算法  接下来介绍wrr算法 (加权轮询)  

    WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少

    1. 清空策略
    2. [root@lvs ~]# ipvsadm -C
    3. 重新添加策略 -w 2 既10的主机访问两次 -w 1 既20的主机访问一次
    4. [root@lvs ~]# ipvsadm -A -t 192.168.136.100:80 -s wrr
    5. [root@lvs ~]# ipvsadm -a -t 192.168.136.100:80 -r 192.168.0.10 -m -w 2
    6. [root@lvs ~]# ipvsadm -a -t 192.168.136.100:80 -r 192.168.0.20 -m -w 1

    测试

    1. [root@client ~]# curl 192.168.136.100
    2. webserver2 - 192.168.0.20
    3. [root@client ~]# curl 192.168.136.100
    4. webserver1 - 192.168.0.10
    5. [root@client ~]# curl 192.168.136.100
    6. webserver1 - 192.168.0.10

    lvs-DR

    DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变

    根本:解决nat模式中的VS压力问题

     实验图

     网络配置

    lvs主机

    client

    1. [root@client ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
    2. [connection]
    3. id=ens160
    4. type=ethernet
    5. interface-name=ens160
    6. [ipv4]
    7. address1=192.168.136.128/24,192.168.136.100
    8. method=manual
    9. dns=114.114.114.114;
    10. [root@lvs ~]# route -n
    11. Kernel IP routing table
    12. Destination Gateway Genmask Flags Metric Ref Use Iface
    13. 0.0.0.0 192.168.136.100 0.0.0.0 UG 100 0 0 ens160
    14. 192.168.136.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160

    router主机 一个nat 一个仅主机

    1. [root@router ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
    2. [connection]
    3. id=ens160
    4. type=ethernet
    5. interface-name=ens160
    6. [ipv4]
    7. address1=192.168.136.100/24,192.168.136.2
    8. method=manual
    9. dns=114.114.114.114;
    10. [root@router ~]# cat /etc/NetworkManager/system-connections/ens224.nmconnection
    11. [connection]
    12. id=ens224
    13. type=ethernet
    14. interface-name=ens224
    15. [ipv4]
    16. address1=192.168.0.100/24
    17. method=manual
    18. [root@router ~]# vim /etc/sysctl.conf
    19. net.ipv4.ip_forward=1

    lvs主机

    1. [root@lvs ~]# ip a a 192.168.0.200/32 dev lo
    2. [root@lvs ~]# ip a
    3. 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    4. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    5. inet 127.0.0.1/8 scope host lo
    6. valid_lft forever preferred_lft forever
    7. inet 192.168.0.200/32 scope global lo
    8. valid_lft forever preferred_lft forever
    9. inet6 ::1/128 scope host
    10. valid_lft forever preferred_lft forever
    11. 3: ens224: mtu 1500 qdisc fq_codel state UP group default qlen 1000
    12. link/ether 00:0c:29:96:71:57 brd ff:ff:ff:ff:ff:ff
    13. altname enp19s0
    14. inet 192.168.0.50/24 brd 192.168.0.255 scope global noprefixroute ens224
    15. valid_lft forever preferred_lft forever
    16. inet6 fe80::e57b:8655:5c22:2be8/64 scope link noprefixroute
    17. valid_lft forever preferred_lft forever
    18. [root@lvs ~]# cat /etc/NetworkManager/system-connections/ens224.nmconnection
    19. [connection]
    20. id=ens224
    21. type=ethernet
    22. interface-name=ens224
    23. [ipv4]
    24. address1=192.168.0.50/24,192.168.0.100
    25. method=manual
    26. dns=114.114.114.114;
    27. [root@lvs ~]# route -n
    28. Kernel IP routing table
    29. Destination Gateway Genmask Flags Metric Ref Use Iface
    30. 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 ens224
    31. 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens224

    server1 仅主机 记得配httpd 上面已经配置过了

    1. [root@server1 ~]# ip a a 192.168.0.200/32 dev lo
    2. [root@server1 ~]# ip a
    3. 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    4.   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    5.   inet 127.0.0.1/8 scope host lo
    6.       valid_lft forever preferred_lft forever
    7.   inet 192.168.0.200/32 scope global lo
    8.       valid_lft forever preferred_lft forever
    9.   inet6 ::1/128 scope host
    10.       valid_lft forever preferred_lft forever
    11. 2: ens160: mtu 1500 qdisc fq_codel state UP group default qlen 1000
    12.   link/ether 00:0c:29:8a:ae:0e brd ff:ff:ff:ff:ff:ff
    13.   altname enp3s0
    14.   inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute ens160
    15.       valid_lft forever preferred_lft forever
    16.   inet6 fe80::efbe:acf4:b525:3659/64 scope link noprefixroute
    17.       valid_lft forever preferred_lft forever
    18.      
    19. [root@server1 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
    20. [connection]
    21. id=ens160
    22. type=ethernet
    23. interface-name=ens160
    24. [ipv4]
    25. address1=192.168.0.10/24,192.168.0.100
    26. method=manual
    27. rs主机中 使VIP不对外响应 禁用arp
    28. [root@server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    29. [root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    30. [root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    31. [root@server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

     server2 与server1类似    记得配httpd

    1. [root@server2 ~]# ip a a 192.168.0.200/32 dev lo
    2. [root@server2 ~]# ip a
    3. 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    4.   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    5.   inet 127.0.0.1/8 scope host lo
    6.       valid_lft forever preferred_lft forever
    7.   inet 192.168.0.200/32 scope global lo
    8.       valid_lft forever preferred_lft forever
    9.   inet6 ::1/128 scope host
    10.       valid_lft forever preferred_lft forever
    11. 2: ens160: mtu 1500 qdisc fq_codel state UP group default qlen 1000
    12.   link/ether 00:0c:29:69:ad:c8 brd ff:ff:ff:ff:ff:ff
    13.   altname enp3s0
    14.   inet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute ens160
    15.       valid_lft forever preferred_lft forever
    16.   inet6 fe80::661e:8965:208d:b9b3/64 scope link noprefixroute
    17.       valid_lft forever preferred_lft forever
    18.      
    19. [root@server2 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
    20. [connection]
    21. id=ens160
    22. type=ethernet
    23. interface-name=ens160
    24. [ipv4]
    25. address1=192.168.0.20/24,192.168.0.100
    26. method=manual
    27. dns=114.114.114.114;
    28. rs主机中 使VIP不对外响应 禁用arp协议
    29. [root@server2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    30. [root@server2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    31. [root@server2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    32. [root@server2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    如果永久禁用arp那么写进配置文件

     LVS主机写策略

    测试

    防火墙标记解决轮询问题

    当我们使用https服务时,RS安装mod_ssl模块 https

    1. [root@server1 ~]# yum install mod_ssl -y
    2. [root@server1 ~]# systemctl restart httpd
    3. [root@server1 ~]# curl -k https://192.168.0.10 -k不用证书

     假设我们的策略是这样写的

    1. ipvsadm -A -t 192.168.0.200:443 -s rr
    2. ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
    3. ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
    4. ipvsadm -A -t 192.168.0.200:443 -s rr
    5. ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
    6. ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g

    问题:只会访问同一台

    1. [root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
    2. webserver2 - 192.168.0.10
    3. webserver1 - 192.168.0.10
    4. [root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
    5. webserver2 - 192.168.0.20
    6. webserver1 - 192.168.0.20

     怎么解决呢??

    防火墙标记解决轮询问题

    1. [root@lvs ~]# iptables -t mangle -nL
    2. # lvs主机中为端口做标记
    3. [root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
    4. [root@lvs ~]# iptables -t mangle -nL
    5. [root@lvs ~]# ipvsadm -C
    6. [root@lvs ~]# ipvsadm -A -f 66 -s rr
    7. [root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.10 -g    
    8. [root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.20 -g

    测试

    1. [root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
    2. webserver2 - 192.168.0.20
    3. webserver1 - 192.168.0.10
    4. [root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
    5. webserver2 - 192.168.0.20
    6. webserver1 - 192.168.0.10
    7. [root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
    8. webserver2 - 192.168.0.20
    9. webserver1 - 192.168.0.10

    大功告成!!!

  • 相关阅读:
    背靠背 HVDC-MMC模块化多电平转换器输电系统-用于无源网络系统的电能质量调节MATLAB仿真模型
    Science:大脑中睡眠的相互关联原因和结果
    InfoQ 2022 年趋势报告:人工智能、机器学习和数据工程篇
    Flutter 离线数据方案 Flutter_Data 包
    软考高级软件架构师论文——论软件架构评估
    超详细~25考研规划~感恩现在努力的你!!!
    驱动开发:内核监控Register注册表回调
    关于java运行中抛出异常的几种写法
    【Java基础】字符集
    自然语言处理 (NLP) 概述
  • 原文地址:https://blog.csdn.net/Fish_1112/article/details/140987436