LVS多模式集群攻略!

news/2024/9/10 4:31:06/ 标签: lvs, 服务器, 网络, linux, 运维

目录

  • NAT模式下的lvs集群
  • DR模式下的lvs集群
  • 防火墙标签解决轮询问题
  • LVS持久链接
    • 解决方案

lvs_3">NAT模式下的lvs集群

lvs-nat概念:修改请求报文的目标IP,多目标IP的DNAT,本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

最终实现效果:
1.Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连
2.Web服务器采用仅主机网卡与director相连
3.Web服务器网关指向192.168.0.100
4.后端web服务器不需要连接外网

准备工作

工作前提准备:

  1. VMware的网卡设置:一个网卡设置仅主机模式,网段为192.168.0.0/24 另一个网卡设置仅主机模式,网段为172.25.254.0/24
  2. 准备四台环境干净的虚拟机
  3. 防火墙及其selinux都处于关闭状态

流程原理图:
在这里插入图片描述

具体步骤

客户机

		  IP:172.25.254.200/24gateway:172.25.254.100

lvs_25">lvs

[root@lvs1 ~]# vmset.sh eth0 172.25.254.100 lvs1
[root@lvs1 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@lvs1 ~]# vmset.sh eth1 192.168.0.100 lvs
[root@lvs1 ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@lvs1 ~]# nmcli connection reload 
[root@lvs1 ~]# nmcli connection up eth1

在这里插入图片描述
在这里插入图片描述

lvs中打开内核路由

[root@lvs1 ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@lvs1 ~]# sysctl -p

在这里插入图片描述
在这里插入图片描述

安装lvs软件

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

编写策略

[root@lvs1 ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
# 查看
[root@lvs1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr-> 192.168.0.10:80              Masq    1      0          0         -> 192.168.0.20:80              Masq    1      0          0  

服务器1

[root@webserver ~]# vmset.sh eth0 192.168.0.10 webserver
[root@webserver ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver ~]# nmcli connection reload 
[root@webserver ~]# nmcli connection up eth0

修改网关
在这里插入图片描述
安装web服务:

[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver ~]# systemctl enable --now httpd

服务器2

[root@webserver2 ~]# vmset.sh eth0 192.168.0.20 webserver2
[root@webserver2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver2 ~]# nmcli connection reload 
[root@webserver2 ~]# nmcli connection up eth0

修改网关
在这里插入图片描述
安装web服务:

[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd

测试

在客户机上测试

在这里插入图片描述

lvs_107">DR模式下的lvs集群

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

流程原理图:
在这里插入图片描述

具体流程

客户机:

		  IP:172.25.254.200/24gateway:172.25.254.100

路由器

sh脚本:

#!/bin/bash
rm -fr /etc/NetworkManager/system-connections/$1.nmconnection
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1[ipv4]
address1=$2/24,172.25.254.2
method=manual
dns=114.114.114.114;
EOFchmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1hostnamectl hostname $3cat > /etc/hosts <<EOF
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
$2      $3
EOF

在这里插入图片描述

[root@route ~]# vmset.sh eth0 172.25.254.100 route
[root@route ~]# vmset.sh eth1 192.168.0.100 route
[root@route ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@route ~]# nmcli connection reload 
[root@route ~]# nmcli connection up eth1

因脚本问题,修改eth1的网卡配置
在这里插入图片描述
打开内核路由功能

[root@route ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@route ~]# sysctl -p

在这里插入图片描述

LVS

[root@lvs1 ~]# vmset.sh eth1 192.168.0.50 lvs
[root@lvs1 ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@lvs1 ~]# nmcli connection reload 
[root@lvs1 ~]# nmcli connection up eth1

在这里插入图片描述
添加vip,采用环回,注意环回的掩码需要使用32位

[root@lvs1 ~]# ip a a 192.168.0.200/32 dev lo

安装lvs软件

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

编写策略

[root@lvs1 ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs1 ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -m 
[root@lvs1 ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -m 

服务器1

[root@webserver ~]# vmset.sh eth0 192.168.0.10 webserver
[root@webserver ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver ~]# nmcli connection reload 
[root@webserver ~]# nmcli connection up eth0

修改网关
在这里插入图片描述
安装web服务:

[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver ~]# systemctl enable --now httpd

修改rip,使RS主机VIP不对外响应

[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

添加vip,采用环回,注意环回的掩码需要使用32位

[root@webserver ~]# ip a a 192.168.0.200/32 dev lo

安装web服务:

[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver ~]# systemctl enable --now httpd

服务器2

[root@webserver2 ~]# vmset.sh eth0 192.168.0.20 webserver2
[root@webserver2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver2 ~]# nmcli connection reload 
[root@webserver2 ~]# nmcli connection up eth0

修改网关
在这里插入图片描述
修改rip,使RS主机VIP不对外响应

[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

添加vip,采用环回,注意环回的掩码需要使用32位

[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo

安装web服务:

[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo webserver2 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd

测试

在客户机上进行测试

[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
werbserver2 192.168.0.20
webserver 192.268.0.10
werbserver2 192.168.0.20
werbserver2 192.168.0.20
webserver 192.268.0.10
werbserver2 192.168.0.20
werbserver2 192.168.0.20
webserver 192.268.0.10
werbserver2 192.168.0.20
werbserver2 192.168.0.20
[root@client ~]# 

在这里插入图片描述

防火墙标签解决轮询问题

轮询中可能遇到的问题:

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出
现了一个轮询错乱的问题
当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上

MARK target (可用于给特定的报文打标记,) --set-mark value

打标记语法: iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $portl,$port2,..-i MARK --set-mark NUMBER
基于标记定义服务的语法: ipvsadm -A -f NUMBER [options]

[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport --dports 
80,443 -j MARK --set-mark  66[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm  -a -f 66 -r 192.168.0.101 -g
[root@lvs ~]# ipvsadm  -a -f 66 -r 192.168.0.102 -g

测试结果:

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

LVS持久链接

我们使用客户机上网的时候,有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们使用sh算法,但是sh算法比较简单粗暴,可能会导致调度失衡,为了解决这一问题,我们设置持久链接来解决

解决方案

  • 在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把这个源的主机调度到了那个RS上
  • 如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到同一台RS上。
  • 如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS上

语法格式:ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]] 默认360秒

# 在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]

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

相关文章

ASC格式的协议数据解析

函数来自RTT的AT组件 - at_client.c RTT-AT命令 例如&#xff0c;数据是 CGREG: 0,1&#xff0c;通过at_resp_parse_line_args_by_kw把1赋予link_stat。 at_resp_parse_line_args_by_kw at_resp_parse_line_args at_resp_parse_line_args(resp, 1,"IP%s", ip); …

pythonUI自动化007::pytest的组成以及运行

pytest组成&#xff1a; 测试模块&#xff1a;以“test”开头或结尾的py文件 测试用例&#xff1a;在测试模块里或测试类里&#xff0c;名称符合test_xxx函数或者示例函数。 测试类&#xff1a;测试模块里面命名符合Test_xxx的类 函数级&#xff1a; import pytestclass Test…

深度学习 —— 个人学习笔记14(ResNet、DenseNet)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 二十八、残差网络&#xff08; ResNet &#xff09; import torch import torchvision import time from torch impo…

白骑士的Matlab教学进阶篇 2.5 Simulink

系列目录 上一篇&#xff1a;白骑士的Matlab教学进阶篇 2.4 图像处理 Simulink是MATLAB的扩展工具&#xff0c;提供了一个图形化的建模和仿真环境。它广泛应用于系统设计、仿真、自动控制、信号处理等领域。本文将详细介绍Simulink的简介与基本使用、建立与仿真模型、控制系统…

Linux网络:I/O多路转接poll

目录 一、poll函数解析 二、events和revents事件取值 三、poll的优点 四、poll的缺点 一、poll函数解析 poll函数接口&#xff1a; #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); 参数解析&#xff1a; // struct pollfd 结构 struct p…

【C总集篇】第三章 字符串和格式化输入/ 输出

文章目录 第三章 字符串和格式化输入/ 输出字符/字符串简要理解前言字符介绍和使用数组的简单介绍数组的创建格式 字符串介绍和使用printf函数printf函数一般格式printf()的转换说明修饰符printf函数部分格式字符常用格式字符详解%d%f%c%s printf的返回值 scanf规则说明转化说明…

Spring Boot 3 新特性

Spring Boot 3 带来了许多新特性和改进&#xff0c;这些特性主要围绕提升性能、简化配置、增强的安全性以及支持更现代的Java和库版本。以下是一些Spring Boot 3的关键特性&#xff1a; 支持Java 17和更高版本&#xff1a; Spring Boot 3 官方支持Java 17&#xff0c;并且由于J…

VM——深度学习算子GPU版本耗时不稳定

1、问题&#xff1a;使用3080TI显卡4台130万相机&#xff0c;GPU版本算子&#xff0c;耗时不稳定&#xff0c;15ms-150ms波动 2、方法&#xff1a; 1&#xff09;参考海康提供的问题手册

数学中常用的解题方法

文章目录 待定系数法应用示例1. 多项式除法2. 分式化简3. 数列通项公式 总结 递归数列特征方程特征根的求解通项公式的求解示例 错位相减&#xff0c;差分错位相减法差分的应用结合理解 韦达定理二项式定理二项式定理的通项公式二项式系数的性质应用示例 一元二次求解1. 因式分…

怎样才算精通 Excel?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 高赞回答很系统&#xff0c;但普通人这么学&#xff0c;没等精通先学废了&#xff01; 4年前&#xff0c;我为了学数据分析&#…

Cycript安装报错 Library not loaded终极解决方案

一、下载安装 Cycript 官方完整 资源下载完成后&#xff0c;解压。目录如下&#xff1a; 二、执行 打开命令终端,cd到对应目录&#xff0c;然后执行./cycript #第一步&#xff1a;cd到解压的目录 cd /xx/cycrpt_0#执行&#xff1a; ./cycript 2.1、报错Library not Loaded …

【wsl】wsl + vscode 中使用 typora 打开 markdown 文件

vscode 连接好wsl 使用Open in External App 一个五星好评的插件Open in External App则可以在vscode中用typora打开md文件&#xff0c;不仅如此&#xff0c;还有设定其他应用打开相应的文件&#xff0c;比如chrome打开html。插件食用方法也比较简单&#xff0c;安装后&#…

前端已经学会vue,做粒子效果

目录 1. Canvas API 2. WebGL 3. 粒子系统 4. 动画与性能优化 5. 现有库和框架 6. Vue 组件和状态管理 实践项目建议 案例1 案例2雪花 已经熟悉了 Vue、TypeScript 和 JavaScript&#xff0c;下面是一些你可以学习的内容&#xff0c;以帮助你实现粒子效果的界面&#…

python async

要使用 Python 的 async 特性编写一个代码&#xff0c;以交替使用两个 AI API 处理数据&#xff0c;您可以按照以下步骤进行。假设这两个 AI API 的调用是异步的&#xff0c;并且我们需要在两个 API 之间轮流处理一组数据。 import asyncio import aiohttp async def call_ap…

处理Pandas中的JSON数据:从字符串到结构化分析

在数据科学领域&#xff0c;JSON作为一种灵活的数据交换格式&#xff0c;被广泛应用于存储和传输数据。然而&#xff0c;JSON数据的非结构化特性在进行数据分析时可能会带来一些挑战。本文将指导读者如何使用Pandas库将DataFrame中的JSON字符串列转换为结构化的表格数据&#x…

sql语句+mysql权限

sql语句 1.新增 2.删除 3.修改 4.查询 单表查询 select 字段名列表 from 表名&#xff0c;索引 聚合函数 只有 select ⼦句和 having ⼦句、order by ⼦句中能使⽤聚合函 数&#xff0c;where ⼦句不能使⽤聚合函数。当使⽤聚合查询以后&#xff0c;不能 使⽤where条件&a…

【mysql 第一篇章】系统和数据库的交互方法

一、宏观的查看系统怎么和数据库交互 在我们刚刚接触系统和数据库的时候不明白其中的原理&#xff0c;只知道系统和数据库是需要交互的。所以我们会理解成上图的形式。 二、MYSQL 驱动 随着我们的学习时间的加长以及对程序的了解&#xff0c;发现链接数据库是需要有别的工具辅…

乐凡三防平板:制造业移动作业平台的专业高效之选

在制造业数字化转型的浪潮中&#xff0c;移动作业平台成为了提升生产效率、优化管理流程的关键工具。其中&#xff0c;三防平板因其卓越的防护性能和高效的数据处理能力&#xff0c;正逐渐成为制造业移动作业的首选设备。本文将探讨三防平板如何为制造业带来专业高效的移动作业…

全新Bty分销系统源码v1.0/宝塔分销系统开源版源码/独立后台(附安装教程)

源码简介&#xff1a; 全新Bty分销系统源码v1.0&#xff0c;它作为宝塔分销系统开源版源码&#xff0c;功能强大&#xff0c;它内置了易支付功能&#xff0c;方便多了&#xff01; 这个Bty分销系统开源版&#xff0c;宝塔分销系统开源版。它基于宝塔开放的API底层控制器&…

鸿蒙AI功能开发【hiai引擎框架-主体分割】 基础视觉服务

hiai引擎框架-主体分割 介绍 本示例展示了使用hiai引擎框架提供的主体分割能力。 本示例模拟了在应用里&#xff0c;选择一张图片&#xff0c;识别其图片中的显著性主体并展示出来主体的边界框的数据。 需要使用hiai引擎框架通用文字识别接口hms.ai.vision.subjectSegmenta…