LVS的三种工作模式---(DR/TUN/NAT)

目录

一、NAT模式(LVS-NAT)

二、IP隧道模式(LVS-TUN)

三、DR模型--直接路由模式(LVS-DR)

LVS/DR模式ARP抑制

 原因:

LVS的DR工作模式及配置:

LVS的NAT工作模式及配置:


一、NAT模式(LVS-NAT)

原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此真实服务器RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。

在整个过程中,负载调度作为NAT设备,负责将请求数据包的源IP从客户端IP转换为负载调度器的VIP(虚拟IP),并将响应数据包的源IP从真实服务器的私有IP转换回VIP

二、IP隧道模式(LVS-TUN)

       调度器把请求的报文通过 IP 隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用 lvs-tun 模式后,可以大大的减少对负载调度器的压力,集群系统的最大吞吐量可以提高 10 倍

三、DR模型--直接路由模式(LVS-DR)

      客户端向目标vip发出请求,lvs接收 ,LVS根据负载均衡算法选择一台活跃的的节点,将此节点的ip所在网卡的mac地址作为目标mac地址,发送到局域网里

节点在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文.随后重新封装报文,发送到局域网.此时IP包的目标ip是客户端,源ip是自己的vip地址。

LVS的DR工作模式及配置:

环境准备:

四台openEuler操作系统的虚拟机

openEuler node1充当前端的负载调度器

openEuler node2充当客户端测试

openEuler node3充当后端web服务器

openEuler node4充当后端web服务器

关闭所有防火墙和selinux

openEuler node3和openEuler node4 :

添加dummy类型的接口VIP:

[root@node1 ~]# nmcli connection add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.182.140/24

[root@node3 ~]# nmcli con add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.182.140/24

[root@node4 ~]# nmcli connection add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.182.140/24

修改相应的ARP内核配置(ARP的抑制)

[root@node3 ~]# cat >> /etc/sysctl.conf << EOF

net.ipv4.conf.all.arp_ignore=1

net.ipv4.conf.all.arp_announce=2

net.ipv4.conf.dummy1.arp_ignore=1

net.ipv4.conf.dummy1.arp_announce=2

EOF

[root@node3~]# sysctl -p           使其生效

[root@node4 ~]# cat >> /etc/sysctl.conf << EOF

net.ipv4.conf.all.arp_ignore=1

net.ipv4.conf.all.arp_announce=2

net.ipv4.conf.dummy1.arp_ignore=1

net.ipv4.conf.dummy1.arp_announce=2

EOF

[root@node4~]# sysctl -p           使其生效

准备web站点:

[root@node3 ~]# dnf install nginx -y

[root@node4 ~]# dnf install nginx -y

提供默认主页:

[root@node3 ~]# echo "web test page,my ip is`hostname -I`." > /usr/share/nginx/html/index.html

[root@node3 ~]# systemctl start nginx

[root@node4 ~]# echo "web test page,my ip is`hostname -I`." > /usr/share/nginx/html/index.html

[root@node4 ~]# systemctl start nginx

openEuler node2:测试

[root@node2 ~]# curl 192.168.182.144

web test page,my ip is192.168.182.144 192.168.182.140 .

[root@node2 ~]# curl 192.168.182.143

web test page,my ip is192.168.182.143 172.17.0.1 192.168.182.140 .

准备安装工具:

[root@node1 ~]# dnf install ipvsadm -y

几种常见的算法:

rr

轮循调度(Round-Robin),它将请求依次分配不同的RS,也就是在RS中均摊请求。这种

算法简单,但是只适合于处理性能相差不大的情况

wrr

加权轮循调度(Weighted Round-Robin)它将依据不同RS的权值分配任务。权值较高的

RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。相同权值的RS得到相

同数目的连接数。

wlc

加权最小连接数调度(weighted leastconnection)假设各台RS的权值依次为wi

(i=1..n),当前的TCP连接数依次为Ti(i=1..n),依次选取Ti/Wi为最小的RS作为下一个

分配的RS。

lc

最小连接数调度(Least-Connection),IPVS表存储了所有的活动的连接。把心的连接请

求发送到当前连接数最小的RS。

负载均衡器:

[root@node1 ~]# ipvsadm -At 192.168.182.140:80 -s  rr   

[root@node1 ~]# ipvsadm -at 192.168.182.140:80 -r 192.168.182.143:80

[root@node1 ~]# ipvsadm -at 192.168.182.140:80 -r 192.168.182.144:80

[root@node1 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.182.140:80 wlc

  -> 192.168.182.143:80           Route   1      0          0        

  -> 192.168.182.144:80           Route   1      0          0

测试:

[root@node2 ~]# for ((i=1;i<=6;i++));do curl 192.168.182.140;done

web test page,my ip is192.168.182.143 172.17.0.1 192.168.182.140 .

web test page,my ip is192.168.182.144 192.168.182.140 .

web test page,my ip is192.168.182.143 172.17.0.1 192.168.182.140 .

web test page,my ip is192.168.182.144 192.168.182.140 .

web test page,my ip is192.168.182.143 172.17.0.1 192.168.182.140 .

web test page,my ip is192.168.182.144 192.168.182.140 .

加权轮询调度算法:

[root@node1 ~]# ipvsadm -At 192.168.182.140:80 -s  wrr   

[root@node1 ~]# ipvsadm -at 192.168.182.140:80 -r 192.168.182.144:80    不指定默认为1

[root@node1 ~]# ipvsadm -at 192.168.182.140:80 -r 192.168.182.143:80 -w 2    指定143web服务器为2

[root@node1 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.182.140:80 wrr

  -> 192.168.182.143:80           Route   2      0          3        

  -> 192.168.182.144:80           Route   1      0          3

测试:

[root@node2 ~]# for ((i=1;i<=6;i++));do curl 192.168.182.140;done

web test page,my ip is192.168.182.144 192.168.182.140 .

web test page,my ip is192.168.182.143 172.17.0.1 192.168.182.140 .

web test page,my ip is192.168.182.143 172.17.0.1 192.168.182.140 .

web test page,my ip is192.168.182.144 192.168.182.140 .

web test page,my ip is192.168.182.143 172.17.0.1 192.168.182.140 .

web test page,my ip is192.168.182.143 172.17.0.1 192.168.182.140 .

常用命令:

[root@node1 ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm    保存这个加权轮询调度算法

[root@node1 ~]# cat /etc/sysconfig/ipvsadm

-A -t 192.168.182.140:80 -s wrr

-a -t 192.168.182.140:80 -r 192.168.182.143:80 -g -w 2

-a -t 192.168.182.140:80 -r 192.168.182.144:80 -g -w 1

[root@node1 ~]# ipvsadm -C   清除

[root@node1 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActCon

[root@node1 ~]# ipvsadm -R < /etc/sysconfig/ipvsadm   恢复

[root@node1 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.182.140:80 wrr

  -> 192.168.182.143:80           Route   2      0          0        

  -> 192.168.182.144:80           Route   1      0          0  

删除VIP接口:

[root@node1 ~]# nmcli connection  delete dummy-dummy1

成功删除连接 "dummy-dummy1" (bfe8c98b-1e87-4cf9-b3b7-49f2ca4699a9)。

ARP抑制:

[root@node3 ~]# cat /proc/sys/net/ipv4/conf/all/arp_ignore

1

另一种方法:使用arptables工具来做arp抑制

[root@node1 ~]# dnf install arptables -y

[root@node1 ~]# arptables -A INPUT -d 192.168.182.140 -j DROP    抑制dummy-dummy1这个接口流量的流入

[root@node1 ~]# arptables -A OUTPUT -s 192.168.182.140 -j mangle --mangle-ip-s 192.168.182.140

[root@node1 ~]# arptables-save > /etc/sysconfig/arptables   保存

[root@node1 ~]# arptables -F

[root@node1 ~]# arptables -L -n

Chain INPUT (policy ACCEPT)

Chain OUTPUT (policy ACCEPT)

Chain FORWARD (policy ACCEPT)

[root@node1 ~]# arptables-restore < /etc/sysconfig/arptables    恢复

[root@node1 ~]# arptables -L -n

Chain INPUT (policy ACCEPT)

-j DROP -d 192.168.182.140

Chain OUTPUT (policy ACCEPT)

-j mangle -s 192.168.182.140 --mangle-ip-s 192.168.182.140

Chain FORWARD (policy ACCEPT)

[root@node1 ~]#

LVS的NAT工作模式及配置:

环境准备:准备4台openEuler操作系统的虚拟机

openEuler node1充当前端的负载调度器

openEuler node2充当客户端测试

openEuler node3充当后端web服务器

openEuler node4充当后端web服务器

VMWARE

openEuler node1上增加网络适配器并改为仅主机模式

openEuler node3上网络适配器改为仅主机模式

openEuler node4上网络适配器改为仅主机模式

[root@node1 ~]# nmcli connection add type ethernet ifname ens224 ipv4.method manual ipv4.addresses 10.10.10.21/24

在openEuler node3和openEuler node4上使用nmtui命令修改ip地址分别是10.10.10.2310.10.10.24,网关都指向10.10.10.21的内网,无DNS

[root@node1 ~]# echo  1 > /proc/sys/net/ipv4/ip_forward     开启路由转发

开启路由转发:

临时开启:

方法1 echo 1 > /proc/sys/net/ipv4/ip_forward

方法2 sysctl -w net.ipv4.ip_forward=1

永久开启:

Vim /etc/sysctl.conf

准备web站点:

[root@node3 ~]# dnf install nginx -y

[root@node4 ~]# dnf install nginx -y

提供默认主页:

[root@node3 ~]# echo "web test page,my ip is`hostname -I`." > /usr/share/nginx/html/index.html

[root@node3 ~]# systemctl start nginx

[root@node4 ~]# echo "web test page,my ip is`hostname -I`." > /usr/share/nginx/html/index.html

[root@node4 ~]# systemctl start nginx

[root@node1 ~]# ipvsadm -At 192.168.182.141:80 -s  rr   

[root@node1 ~]# ipvsadm -at 192.168.182.141:80 -r 10.10.10.23:80  -m   指定目标为NAT转发模式

[root@node1 ~]# ipvsadm -at 192.168.182.141:80 -r 10.10.10.24:80  -m   指定目标为NAT转发模式

[root@node1 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.182.141:80 rr

  -> 10.10.10.23:80                        Masq     1              0                      0        

  -> 10.10.10.24:80                        Masq     1              0                      0

测试:

[root@node2 ~]# for ((i=1;i<=6;i++));do curl 192.168.182.141;done

web test page,my ip is 10.10.10.23.

web test page,my ip is 10.10.10.24.

web test page,my ip is 10.10.10.23.

web test page,my ip is 10.10.10.24.

web test page,my ip is 10.10.10.23.

web test page,my ip is 10.10.10.24.

[root@node1 ~]# ipvsadm -Et 192.168.182.141:80 -s wrr -p 60   60秒内都由某个服务器来提供响应

[root@node1 ~]# iptables -t mangle -A PREROUTING -d 192.168.182.141 -p tcp --dport 80 -j MARK --set-mark 10

# 添加一个防火墙规则,当目标地址为 192.168.182.141 并且 目标端口为 80 时给数据包打一

个标记,设置mark 值为 10

[root@node1 ~]# iptables -t mangle -A PREROUTING -d 192.168.182.141 -p tcp --dport 443 -j MARK --set-mark 10

# 添加一个防火墙规则,当目标地址为 192.168.182.141 并且 目标端口为 443 时给数据包打一个标记,

设置mark 值为 10

[root@node1 ~]# ipvsadm -A -f 10 -s rr -p 100 # 添加一个负载调度器,当 mark 值为 10 时进行负载均衡使  轮询算法,持久化时间100

[root@node1 ~]# ipvsadm -a -f 10 -r 10.10.10.23:80 -m

[root@node1 ~]# ipvsadm -a -f 10 -r 10.10.10.24:80 -m

[root@node1 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

FWM  10 rr persistent 100

  -> 10.10.10.23:80               Masq    1      0          0        

  -> 10.10.10.24:80               Masq    1      0          0        

测试:

[root@node2 ~]# for ((i=1;i<=6;i++));do curl 192.168.182.141;done

web test page,my ip is 10.10.10.24.

web test page,my ip is 10.10.10.24.

web test page,my ip is 10.10.10.24.

web test page,my ip is 10.10.10.24.

web test page,my ip is 10.10.10.24.

web test page,my ip is 10.10.10.24.

[root@node1 ~]# ipvsadm -D -f 10 删除

[root@node1 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

openEuler版本自带iptables

[root@node1 ~]# iptables -t mangle -L -n

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination        

MARK       tcp  --  0.0.0.0/0            192.168.182.141      tcp dpt:80 MARK set 0xa

MARK       tcp  --  0.0.0.0/0            192.168.182.141      tcp dpt:443 MARK set 0xa

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination  

[root@node1 ~]# iptables -t mangle -F  清空防火墙

问题:

LVS没有健康检测功能

LVS存在单点故障

解决方法:使用ldirectord第三方软件工具

[root@node1 ~]# dnf install ldirectord

[root@node1 ~]# vim /etc/ha.d/ldirectord.cf

quiescent=no

virtual=192.168.182.141:80

        servicename=Web Site

        comment=Test load balanced web site

        real=10.10.10.23:80 masq

        real=10.10.10.24:80 masq

        #fallback=127.0.0.1:80 gate

        service=http

        scheduler=rr

        #persistent=600

        #netmask=255.255.255.255

        protocol=tcp

        checktype=negotiate

        checkport=80

        request="index.html"

        receive="test page"

[root@node1 ~]# systemctl start ldirectord.service

测试:模拟一台服务器不工作时:

[root@node3 ~]# systemctl stop nginx.service    模拟关闭nginx服务

[root@node1 ~]# watch ipvsadm -Ln

Every 2.0s: ipvsadm -Ln          node1: Tue Apr 16 16:12:38 2024

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InAc

tConn

TCP  192.168.182.141:80 rr

  -> 10.10.10.24:80               Masq    1         0          0

[root@node2 ~]# for ((i=1;i<=8;i++));do curl 192.168.182.141; done

web test page , ip is 10.10.10.24 .

web test page , ip is 10.10.10.24 .

web test page , ip is 10.10.10.24 .

web test page , ip is 10.10.10.24 .

web test page , ip is 10.10.10.24 .

web test page , ip is 10.10.10.24 .

web test page , ip is 10.10.10.24 .

web test page , ip is 10.10.10.24 .

[root@node1 ~]# yum install nginx -y

[root@node1 ~]# vim /etc/nginx/nginx.conf

[root@node1 ~]# echo "服务器维护中..." > /usr/share/nginx/html/index.html

[root@node1 ~]# systemctl start nginx.service

[root@node1 ~]# vim /etc/ha.d/ldirectord.cf

quiescent=no

checktimeout=3

checkinterval=1

autoreload=yes

#fallback=127.0.0.1:8080

virtual=192.168.182.141:80

        servicename=Web Site

        comment=Test load balanced web site

        real=10.10.10.23:80 masq

        real=10.10.10.24:80 masq

        fallback=10.10.10.21:8080 masq

        service=http

        scheduler=rr

        #persistent=600

        #netmask=255.255.255.255

        protocol=tcp

        checktype=negotiate

        checkport=80

        request="index.html"

        receive="test page"

测试:模拟两台服务器都不工作:

[root@node3 ~]# systemctl stop nginx.service

[root@node4 ~]# systemctl stop nginx.service

[root@node1 ~]# watch ipvsadm -Ln

Every 2.0s: ipvsadm -Ln                                                                               node1: Tue Apr 16 16:38:28 2024

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.182.141:80 rr

  -> 10.10.10.21:8080             Masq    1         0          0

[root@node2 ~]# for ((i=1;i<=8;i++));do curl 192.168.182.141; done

服务器维护中...

服务器维护中...

服务器维护中...

服务器维护中...

服务器维护中...

服务器维护中...

服务器维护中...

服务器维护中...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/688994.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现贸易行业crm系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现贸易行业crm系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于springboot的贸易行业crm系统的开发全过程。通过分析基于springboot的贸易行业crm系统管理的不足&#xff0c;创建…

Redis如何避免数据丢失?——RDB

目录 1. RDB机制的配置 2. fork()函数和写时复制(Copy On Write&#xff09; 什么是Copy On Write 系统fork中使用Copy On Write机制 3. RDB文件结构 RDB文件内容和内容顺序 InfoAuxFields是rdb信息数据 数据库数据 数据 数据存储格式 字符串编码 操作码 4. RDB的2…

物联网SCI期刊,潜力新刊,审稿速度快,收稿范围广泛!

一、期刊名称 Internet of Things 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;物联网 影响因子&#xff1a;5.9 中科院分区&#xff1a;3区 出版方式&#xff1a;订阅模式/开放出版 版面费&#xff1a;选择开放出版需支付$2310 三、期刊征稿范围 I…

WorkPlus im(即时通讯)集成平台助力政企数字化转型升级

随着互联网技术的不断发展&#xff0c;企业内部通讯软件已经成为企业日常运营中不可或缺的一部分。企业IM&#xff08;即时通讯&#xff09;和移动门户作为企业内部通讯软件的关键组成部分&#xff0c;为企业提供更加高效、便捷的通讯方式&#xff0c;提高了企业的运营效率。 针…

设计软件有哪些?渲染软件篇(4),渲染100邀请码1a12

除了之前介绍的一些渲染软件&#xff0c;这次我们继续介绍。 1、渲染100(http://www.xuanran100.com/?ycode1a12) 渲染100是网渲平台&#xff0c;为设计师提供高性能的渲染服务。通过它设计师可以把本地渲染移到云端进行&#xff0c;速度快价格便宜&#xff0c;支持3dmax、v…

第一步->手撕spring源码之Bean容器创建

什么是bean容器 可以存放数据的具体数据结构实现&#xff0c;都可以称之为容器。例如&#xff1a;ArrayList、LinkedList、HashSet等。bean就是对象的定义 spring中bean的多样性需要区分就需要用到键值索引的场景 故选择 HashMap。 什么是hashMap&#xff1f; HashMap 是一种基…

从入门到深入理解——栈

一、栈的定义 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除 操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09; 的原则。 压栈&#x…

《2024年AI安全报告》:AIML工具使用量飙升594.82%

人工智能&#xff08;AI&#xff09;不仅仅是一种开拓性的创新技术&#xff0c;甚至已经成为一种常态&#xff0c;企业正在工程、IT营销、财务、客户服务等领域迅速采用AI和机器学习&#xff08;ML&#xff09;工具。但与此同时&#xff0c;他们必须平衡AI工具带来的诸多风险&a…

SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 请求响应概述 1.1 简单参数 1.2 实体参数 2.3 数组集合参数 2.4 日期参数 2.5 json 参数 2.6 路径参数 3.0 完整代码 1.0 请求响应概述 当客户端发送不同的请求参…

整除C++

题目&#xff1a; 思路&#xff1a; 循环遍历7(可以被 7 整除的正整数最小为7)~n&#xff0c;如果i%70&#xff0c;就说明i可以被7整除. 代码&#xff1a; #include<iostream> using namespace std; int n;//一个正整数 int main(){scanf("%d",&n);//输入…

OIDC 与 OAuth2.0学习

OpenID Connect (OIDC) 和 OAuth 2.0 是两种不同的协议&#xff0c;它们通常一起使用&#xff0c;但服务于不同的目的。下面是它们的 主要区别和联系&#xff1a; OAuth 2.0 OAuth 2.0 是一个授权框架&#xff0c;它允许第三方应用代表用户获取对服务器资源的有限访问权限。…

geoserver SQL注入、Think PHP5 SQL注入、spring命令注入

文章目录 一、geoserver SQL注入CVE-2023-25157二、Think PHP5 SQL注入三、Spring Cloud Function SpEL表达式命令注入&#xff08;CVE-2022-22963&#xff09; 一、geoserver SQL注入CVE-2023-25157 介绍&#xff1a;GeoServer是一个开源的地理信息系统&#xff08;GIS&#…