LVS 调度器 nat和DR模式

news/2024/9/17 18:56:14/ 标签: lvs, 服务器, linux

lvs-nat 

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

配置网络

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

[root@lvs ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection 
[connection]
id=ens160
type=ethernet
interface-name=ens160
​
[ipv4]
address1=192.168.136.100/24,192.168.136.2
method=manual
dns=114.114.114.114;
​
[root@lvs ~]# cat /etc/NetworkManager/system-connections/ens224.nmconnection 
[connection]
id=ens224
type=ethernet
interface-name=ens224
​
[ipv4]
address1=192.168.0.100/24
method=manual
dns=114.114.114.114;

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

[root@lvs ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
​
[root@lvs ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
# 生效
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

server1

[root@server1 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection 
[connection]
id=ens160
type=ethernet
interface-name=ens160
​
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual

server2

[root@server2 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection 
[connection]
id=ens160
type=ethernet
interface-name=ens160
​
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

配置httpd服务

server1

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

server2

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

lvs主机中测试

[root@lvs ~]# curl 192.168.0.10
webserver1 - 192.168.0.10
[root@lvs ~]# curl 192.168.0.20
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模式

ipvsadm -A -t 192.168.136.100:80 -s rr
ipvsadm -a -t 192.168.136.100:80 -r 192.168.0.10:80 -m
ipvsadm -a -t 192.168.136.100:80 -r 192.168.0.20:80 -m

查看策略 

[root@lvs ~]# 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.136.100:80 rr-> 192.168.0.10:80              Masq    1      0          0         -> 192.168.0.20:80              Masq    1      0          0    

测试

[root@server ~]# for i in {1..10}
> do
> curl 192.168.136.100
> done
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
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

将策略清空,重新导入

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

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

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

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

测试

[root@client ~]# curl 192.168.136.100
webserver2 - 192.168.0.20
[root@client ~]# curl 192.168.136.100
webserver1 - 192.168.0.10
[root@client ~]# curl 192.168.136.100
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

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

router主机 一个nat 一个仅主机

[root@router ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection 
[connection]
id=ens160
type=ethernet
interface-name=ens160
​
[ipv4]
address1=192.168.136.100/24,192.168.136.2
method=manual
dns=114.114.114.114;
​
[root@router ~]# cat /etc/NetworkManager/system-connections/ens224.nmconnection 
[connection]
id=ens224
type=ethernet
interface-name=ens224
​
[ipv4]
address1=192.168.0.100/24
method=manual
​
[root@router ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1

lvs主机

[root@lvs ~]# ip a a 192.168.0.200/32 dev lo
[root@lvs ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.200/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:96:71:57 brd ff:ff:ff:ff:ff:ffaltname enp19s0inet 192.168.0.50/24 brd 192.168.0.255 scope global noprefixroute ens224valid_lft forever preferred_lft foreverinet6 fe80::e57b:8655:5c22:2be8/64 scope link noprefixroute valid_lft forever preferred_lft forever[root@lvs ~]# cat /etc/NetworkManager/system-connections/ens224.nmconnection 
[connection]
id=ens224
type=ethernet
interface-name=ens224[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
dns=114.114.114.114;[root@lvs ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 ens224
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens224

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

[root@server1 ~]# ip a a 192.168.0.200/32 dev lo
[root@server1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.200/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:8a:ae:0e brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::efbe:acf4:b525:3659/64 scope link noprefixroute valid_lft forever preferred_lft forever[root@server1 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection 
[connection]
id=ens160
type=ethernet
interface-name=ens160
​
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manualrs主机中 使VIP不对外响应 禁用arp
[root@server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 

 server2 与server1类似    记得配httpd

[root@server2 ~]# ip a a 192.168.0.200/32 dev lo
[root@server2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.200/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:69:ad:c8 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::661e:8965:208d:b9b3/64 scope link noprefixroute valid_lft forever preferred_lft forever[root@server2 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection 
[connection]
id=ens160
type=ethernet
interface-name=ens160
​
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
dns=114.114.114.114;rs主机中 使VIP不对外响应  禁用arp协议
[root@server2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@server2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@server2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@server2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 

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

 LVS主机写策略

测试

防火墙标记解决轮询问题

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

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

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

ipvsadm -A -t 192.168.0.200:443 -s rr
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g 
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g 
ipvsadm -A -t 192.168.0.200:443 -s rr
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g 
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g 

问题:只会访问同一台

[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver2 - 192.168.0.10
webserver1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.20

 怎么解决呢??

防火墙标记解决轮询问题

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

测试

[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10

大功告成!!!


http://www.ppmy.cn/news/1507365.html

相关文章

Java封装原生ES

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.spring-data-es操作ES1.引入依赖2.application.yml配置uris3…

【Story】编译器的基础概念与类型分类

目录 编译器详解1. 编译器的工作流程1.1 词法分析&#xff08;Lexical Analysis&#xff09;词法分析的例子 1.2 语法分析&#xff08;Syntax Analysis&#xff09;语法分析的例子 1.3 语义分析&#xff08;Semantic Analysis&#xff09;语义分析的例子 1.4 中间代码生成&…

漏洞复现-Atlassian Confluence Data Center 与 Server 存在权限绕过漏洞 (CVE-2023-22518)

1.漏洞描述 Atlassian Confluence Server是澳大利亚Atlassian公司的一套具有企业知识管理功能&#xff0c;并支持用于构建企业WiKi的协同软件的服务器版本。 Atlassian Confluence Data Center 和 Confluence Server存在安全漏洞&#xff0c;该漏洞源于授权管理不当。 2.影响…

vscode 快速生成vue 格式

1.用快捷Ctrl Shift P唤出控制台 输入“Snippets”并选择 Snippets: Configure User Snippets 2.输入vue&#xff0c;选中vue.json vs code自动生成vue.json文件 3.在 vue.json 中添加模板 {"Print to console": {"prefix": "vue2","b…

大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

SQL Zoo 5.SUM and COUNT

以下题目均来自sql zoo 1.Show the total population of the world.&#xff08;显示世界总人口&#xff09; select sum(population) from world 2.List all the continents - just once each.(列出所有的大洲——每个只列出一个) select distinct(continent) from world…

前端面试题——RN篇

文章目录 前言1.RN和React有什么区别2.RN核心组件3.scrollView和FlatList区别scrollViewList item 4.RN应用导航5.虚拟dom作用是什么目的是什么工作原理 6.RN相对于原生的ios和Android有哪些优/劣势优势劣势 7.RN生命周期8.li列表中有3条数据&#xff0c;删除第二条会发生什么9…

ES6模块化简明笔记

1、什么是模块化 详见看上一篇笔记CommonJs模块化简明笔记 2、为什么需要模块化 详见看上一篇笔记CommonJs模块化简明笔记 3、导入和导出的概念 详见看上一篇笔记CommonJs模块化简明笔记 4、模块导出&#xff08;暴露&#xff09; 4.1 导出&#xff08;暴露&#xff09;方式1&…

基于粒子群优化GRU神经网络的多输入回归分析,基于粒子群优化GRU网络多输入回归分析,基于粒子群优化GRU神经网络

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 gru的原理 粒子群算法原理 粒子群优化GRU神经网络的多输入回归分析 结果分析 展望 参考论文 背影 传统的方法回归分析容易陷入局部最优准确率低,为提高精度,本文用粒子群优化GRU神经网络的多输入回归分析 摘要 LSTM原理,…

攻防世界-web-ctf-upload

题目场景 查看源码 毫无有效的数据 官方WriteUp 本题需要利用文件上传漏洞点&#xff0c;通过绕过服务器的安全防护&#xff0c;达到getshell的目的 本题的主要考点为利用fastcgi的.user.ini特性进行任意命令执行 这里需要绕过的点如下 检查文件内容是否有php字符串 检查…

Less 教程:从入门到精通

Less 教程&#xff1a;从入门到精通 1. 引言 Less 是一种流行的动态样式表语言&#xff0c;它扩展了 CSS 的功能&#xff0c;使其更加强大和灵活。通过本教程&#xff0c;我们将深入探讨 Less 的基本概念、特性以及如何在项目中实际应用它。 2. Less 的基本概念 2.1 变量 …

vue3父组件向子组件传参的具体写法

在Vue 3中&#xff0c;父组件向子组件传参&#xff08;也称作传递props&#xff09;是一种非常基本的通信方式。下面我将详细解释如何在Vue 3中实现这一功能。 1. 定义子组件并接收props 首先&#xff0c;你需要在子组件中定义你想要接收的props。这通过在组件的props选项中完…

通过java.netHttpURLConnection类实现java发送http请求

import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public static String postForBody(String param) { try { URL url new URL(“https://usapp-open.ulifecam.com”)…

axios中的baseURL与跨域问题

axios中的baseURL 01. baseURL与跨域02. axios的baseurl为相对地址03. axios的baseURL是使用绝对路径还是相对路径04. API 请求跨域05. 生产环境代理问题我理解的baseURL 01. baseURL与跨域 三种模式配置&#xff1a; 开发环境 .env.development测试环境 .env.production生产…

游戏在抖音只有一个答案,都选C

经过2023年至2024年间多个案例的曝光&#xff0c;游戏开发商与硬核联盟之间的分歧已不再是秘密。而与此同时&#xff0c;抖音游戏发行的影响力也日益凸显&#xff0c;开始被市场所看重。 抖音能否成为取代硬核联盟的下一个渠道窗口&#xff1f; 从产品角度分析&#xff0c;抖…

Python教程:Python线程池与进程池入门

目录 1. 线程与进程的基本概念 1.1 线程 1.2 进程 1.3线程池与进程池的选择 2. Python 中的线程池与进程池 2.1 线程池 2.2 进程池 3. 实战示例 3.1 使用线程池 3.2 使用进程池 4.max_workers 详解 4.1什么是 max_workers 4.2如何设置 max_workers 4.2.1 根据任务…

自动化专业英语

前言 电子信息、电气工程、自动化专业英语词汇汇总&#xff0c;不定期更新 常用 Asynchronous&#xff1a;异步synchronous&#xff1a;同步notification&#xff1a;通知blade&#xff1a;平面shaft&#xff1a;轴magnetic&#xff1a;磁场的bearing&#xff1a;轴承valve&…

2024前端面试(内容持续更新)

Vue篇 data为什么是个函数&#xff1f; 在‌Vue中&#xff0c;‌data必须是一个‌函数&#xff0c;这是因为当data是函数时&#xff0c;每个组件实例化时都会调用该函数&#xff0c;返回一个新的数据对象&#xff0c;从而保证每个组件实例拥有独立的数据&#xff0c;避免数据冲…

Java 集成测试详解及示例

通过综合指南探索 Java 集成测试的世界。了解工具、流程和最佳实践&#xff0c;并辅以实际示例。 随着软件系统变得越来越大、越来越复杂&#xff0c;组件和服务以错综复杂的方式交互&#xff0c;集成测试已变得不可或缺。通过验证所有组件和模块在组合时是否正常工作&#xff…

江苏省2024年中职职教高考_计算机应用专业综合理论试卷真题讲解

视频教程链接: 江苏省2024年中职职教高考_计算机应用专业综合理论试卷真题讲解