当前位置: 首页 > news >正文

LVS-NAT + LVS-DR

LVS

现在lvs已经是linux内核标准的一部分,使用lvs可以达到的技术目标是:通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群,他具有良好的可靠性,可延展性和可操作性,从而以低廉的成本实现最优的性能,Lvs是一个实现负载均衡集群开源软件项目,lvs从逻辑上可以分为调度层, server集群层,和共享存储

一个调度主机,有两个网卡

lvs的工作原理

1. 当用户向负载均衡调度器(director server)发起请求,调度器将请求发往内核空间
2. prerouting链首先会接受到用户请求,判断目标ip确定是本机ip,将数据包发往input链
3. IPVS是工作在input链上的,当用户请求到达input时,ipvs会将用户请求和自己定义好的集群服务器进行比对,如果用户请求就是定义的集群服务,那么此时ipvs会强行修改数据包里的目标ip地址以及端口,并将新的数据包发往POSTROUTING链
4. POSTROUTING链接收到数据包后,发现目标ip地址刚好是自己的后端服务器,那么通过选路,将数据包最终发送给后端服务器

lvs组成及术语

1.ipvs:

ip virtual server,一段代码工作在内核空间,ipvs,是真正生效实现
调度的代码(类似nginx中的proxy_pass)

2.ipvsadm

另一段是工作在用户空间,ipvsadm,负责为ipvs内核框架编写规则,定义
谁是集群服务,谁是后端真正的服务器(real server)类似nginx中的
upstrean

DS:前端负责均衡节点(负载均衡服务器)

RS:后端真实工作服务器(web服务器)

vip向外部直接面向用户请求,作为用户请求的目标ip地址(负载均衡的ip地址,提供给用户)

DIP Director Server Ip 和内部主机通讯的ip地址(负责与Real Server交互的内部Ip)
RIP Real Server Ip 后端服务器ip地址
CIP client IP 访问客户端ip地址

vip:对外,公网

dip:对内,局域网

lvs的工作模式

LVS-NAT模式

nat模式工作原理

1. 用户请求ds,此时请求的报文会先到内核空间prerouting链,此时报文ip为cip,目标ip为vip
2. prerouting检测发现数据包目标ip是本机,将数据包送到input链
3. ipvs对比数据包请求的服务是否为集群服务,如果是,修改数据包的目标ip地址为后端服务器的IP地址,然后将数据包发送给POSTROUTING链,此时报文ip为cip,目标ip为rip
4. POSTROUTING通过选路,将数据发送给Real Server
5. RealServer对比发现目标ip为自己的ip,开始构建响应报文发回给Director Server此时报文的源ip为RIP,目标ip为CIP
6. Derector Server在响应客户端前,会将源ip地址修改为自己的VIP,然后响应给客户端,目标ip为cip,此时报文源IP为VIP,目标ip为cip
nat模式的特性
1. Rs应该是私有地址,Rs网关必须指向DIP
2. DIP和RIP必须在同一个网段内
3. 请求和响应报文都应该经过Director Server,高负载场景中Director Server容易成为性能瓶颈
4. 支持端口映射
5. Rs可是使用任意操作系统
6. 缺陷,对Ds压力会比较大,请求和响应都需要经过ds,

nat环境搭建
主机名称ip地址功能
web01192.168.118.200rs
web02192.168.118.201realserver
nat

vip:192.168.10.100

dip:192.168.118.10

负载均衡调度器directorserver,ntp

dns192.168.118.110dns

web服务器:

下载nginx,在index.html写入内容,启动nginx,编写计划任务

yum  -y  install nginx

echo "web-----01" > /usr/share/nginx/html/index.html
[root@web01 ~]# nginx
[root@web01 ~]# crontab -e

30 3 * * * /usr/sbin/ntpdate 192.168.118.10   //时间服务器的IP

nat服务器:

需要两块网卡,再添加一块网卡

配置vip网卡:

1. 在编辑虚拟网络中创建桥接模式的网卡,并且桥接到有网的适配器上
2. 在vmware的虚拟主机资源管理器找到虚拟主机,右键菜单,设置
3. 添加新的网卡,自定义为刚才创建的桥接模式网卡
4. 此时在虚拟主机中使用ifconfig无法找到新的网卡
5. ip a能够查看到新的ens36网卡,没有路由
6. 编辑网卡配置
7. 重启network服务

同步时间,编写计划任务,配置时间服务器,启动服务,设置开机自启动

  142  yum -y install ntpdate.x86_64 
  143  ntpdate cn.ntp.org.cn
  144  which ntpdate
  145  crontab -e

* 2 * * * /usr/sbin/ntpdate cn.ntp.org.cn

  147  yum -y install ntp
  148  systemctl start ntpd
  149  systemctl enable ntpd

dns服务器:

[root@dns ~]# yum -y install bind

[root@dns ~]# vim /etc/named.conf     //添加any
[root@dns ~]# vim /etc/named.rfc1912.zones 

zone "yuanyu.zhangmin" IN {
        type master;
        file "yuanyu.zhangmin.zone";
        allow-update { none; };
};

[root@dns ~]# cd /var/named/
[root@dns named]# cp -p named.localhost yuanyu.zhangmin.zone
[root@dns named]# vim yuanyu.zhangmin.zone


[root@dns named]# named-checkconf /etc/named.conf
[root@dns named]# named-checkconf /etc/named.rfc1912.zones 
[root@dns named]# named-checkzone yuanyu.zhangmin.zone yuanyu.zhangmin.zone
[root@dns named]# systemctl restart named

client客户端:

[root@allow ~]# echo "nameserver 192.168.118.110" > /etc/resolve.conf
[root@allow ~]# ping nat.yuanyu.zhangmin -c2
PING nat.yuanyu.zhangmin (192.168.118.135) 56(84) bytes of data.
64 bytes from 192.168.118.135 (192.168.118.135): icmp_seq=1 ttl=64 time=0.639 ms
64 bytes from 192.168.118.135 (192.168.118.135): icmp_seq=2 ttl=64 time=0.305 ms

 

nat配置规则:在nat服务器配置

安装ipvsadm

[root@nat ~]# yum -y install ipvsadm.x86_64

查看所有的规则,如果已经配置好规则,重启之后也就没有了

# 清空以往的规则
[root@nat ~]# ipvsadm -C
# 查看规则
[root@nat ~]# ipvsadm -L -n
# 新增规则
[root@nat ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
# 添加主机,即添加rs web01,web02添加规则
[root@nat ~]# ipvsadm -a -t 192.168.10.100:80 -r
192.168.118.200:80 -m
[root@nat ~]# ipvsadm -a -t 192.168.10.100:80 -r
192.168.118.201:80 -m
# 设置ip转发
[root@nat ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# 设置生效
[root@nat ~]# sysctl -p
net.ipv4.ip_forward = 1      //支持IP转发了

web服务器网关配置:

临时修改web01和web02的网关,网关必须指向dip(调度服务器的对内的ip)

这也要求了rs ip和dip要在同一个网段,因为dip是要作为网关存在的

[root@web01 ~]# route del default
[root@web01 ~]# route add default gw 192.168.118.100
[root@web02 ~]# route del default
[root@web02 ~]# route add default gw 192.168.118.100

升级

lvs-nat模式的优点配置简单,缺点是请求和响应都必须经过ds,容易成为性能瓶颈
希望有这样的模式,请求的时候使用input链进行负载均衡,响应的时候就不要经过ds,直接由rs响应给客户端
在nat模式的时候,请求vip,接收vip的响应
构想 请求vip,接受rip响应,这是不允许 lvs-dr模式,但是我们可以在rs上也配置vip

LVS-DR模式

1.性能更优,回路不再经过ds
2.ds和rs为了保证用户响应,都要求配置统一的vip
3.由于rs是直接响应client,网关一定不能设置为ds 的dip
4.对rs的vip进行抑制,让ds的vip接收请求,rs的vip不接受请求
5.rs的vip绑定点lo回路网卡上
设置ds主机:192.168.118.202

1.在ens33上挂一个IP地址(vip)192.168.118.203,在rs上的vip和这个vip相同

    9  ifconfig ens33:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up

2.设置主机路由
   11  route add -host 192.168.118.203 dev ens33:0
3.  安装ipvsadm
   13  yum -y install ipvsadm

4.配置规则

    ipvsadm  -C  //清空规则
   14  ipvsadm -A -t 192.168.118.203:80 -s rr
   15  ipvsadm -a -t 192.168.118.203:80 -r 192.168.118.200 -g
   17  ipvsadm -a -t 192.168.118.203:80 -r 192.168.118.201 -g
   18  ipvsadm -Ln
注意:

rs不在需要指定端口,dr不支持端口映射,vip上是80端口,最终就是80端口
-m nat
-g  gateway
设置rs主机

1.在lo接口上绑定vip

2.设置主机路由

3.抑制rs接收请求

web01:

[root@web01 ~]# ifconfig lo:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up
[root@web01 ~]# route add -host 192.168.118.203 dev lo:0
[root@web01 ~]# ifconfig
抑制rs的vip接收请求

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

web02的操作与web01一样,可以使用脚本来操作:

[root@web02 ~]# cat arp.sh
ifconfig lo:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up
route add -host 192.168.118.203 dev lo:0

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

 

测试使用,查看状态

在浏览器上访问vip 192.168.118.203,在dr上查看详情

[root@dr ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.118.203:80                  6      140        0    39432        0
  -> 192.168.118.200:80                  3       12        0      518        0
  -> 192.168.118.201:80                  3      128        0    38914        0

 

相关文章:

LVS-NAT + LVS-DR

LVS 现在lvs已经是linux内核标准的一部分,使用lvs可以达到的技术目标是:通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群,他具有良好的可靠性,可延展性和可操作性,从而以低廉的成本实…...

排序算法——插入排序

一、插入排序概念 直接插入排序(Insertion Sort)是一种简单的排序算法,它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插…...

重修设计模式-行为型-状态模式

重修设计模式-行为型-状态模式 先了解一下状态机的概念,状态机是软件编程中对一种状态场景的抽象表达,构成状态机三要素是:状态(State)、事件(Event)、动作(Action)&…...

网络安全知识渗透测试

渗透测试是一种模拟网络攻击,用于识别漏洞并制定规避防御措施的策略。及早发现缺陷使安全团队能够修复任何漏洞,从而防止数据泄露,否则可能会造成数十亿美元的损失。笔测试还有助于评估组织的合规性、提高员工对安全协议的认识、评估事件响应…...

我国卫星互联网产业集群崛起;1000万资金扶持 上海助推产业互联网平台跨越式发展;河南“数据要素×”行动实施方案发布 | 产业互联网观察第179期

我国卫星互联网产业集群崛起:千帆星座首批卫星发射成功 8月6日,中国版"星链"项目"千帆星座"(G60星链)首批18颗组网卫星在太原卫星发射中心成功发射升空。这些卫星采用上海格思航天自主研发的可堆叠型平板卫星…...

《RT-DETR》论文笔记

原文出处 [2304.08069] DETRs Beat YOLOs on Real-time Object Detection (arxiv.org)https://arxiv.org/abs/2304.08069 原文笔记 What DETRs Beat YOLOs on Real-time Object Detection 1、设计了一种高效的混合编码器,通过解耦尺度内交互和跨尺度融合来提高…...

输出Docker容器的启动命令行脚本

当Docker容器启动后,如果忘记启动参数,比如目录挂载、端口映射等,可以通过Portainer等容器管理工具查看。但是,有时希望能获取容器启动的命令行,因为需要再启动一个类似容器,怎么办呢? 有一款工…...

Dubbo 快速掌握 这篇就够了

1. Dubbo概述 Dubbo 是一款高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开发并在2011年开源。它主要用于解决分布式系统中服务之间的通信问题,支持多种协议,如Dubbo、HTTP、Hessian等,具有服务注册、服务发现、负载均衡、故…...

【每日刷题】Day100

【每日刷题】Day100 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 【模板】堆_牛客题霸_牛客网 (nowcoder.com) 2. 【模板】链表_牛客题霸_牛客网 (nowcoder.com) 3…...

网络协议九 应用层 HTTPS

一 什么是 HTTPS 二 什么是 SSL/TLS 协议 ,TLS 是 SSL 升级后的名字 三. TLS 协议 工作在那一层 四 。OpenSSL 是 SSL/TLS协议的开源实现。 五。重点 HTTPS 的通讯过程 六 TLS 1.2 的连接过程 1. client hello 是浏览器发送给服务器的第一条信息, 是客户…...

【ArrayList】JDK1.8源码详细注释 以及如何实现线程安全的链表

ArrayList(JDK8) ArrayList有四个内部类,成员内部类Itr,成员内部类ListItr,静态内部类SubList,ArrayListSpliterator(暂时用不到)Itr是Iterator的实现类,支持正向遍历,ArrayList的i…...

[python]rasterio运行代码警告proj_create_from_database: Cannot find proj.db

这个报错要分原因还有rasterio版本讨论,因此官方给出了十分具体回答 Frequently Asked Questions What does "RasterioIOError: file.ecw not recognized as a supported file format." mean? This exception is raised when none of rasterios format …...

ThinkPHP5.1.C+CmsEasy-SQL注入

目录 1、ThinkPHP 中存在的 SQL注入 漏洞( select 方法注入) 1.1环境配置 1.1.1将 composer.json 文件的 require 字段设置成如下: 1.1.2设置application/index/controller/Index.php 文件 1.1.3在 application/database.php 文件中配置…...

Python 绘图进阶之词云图:文本数据的可视化艺术

Python 绘图进阶之词云图:文本数据的可视化艺术 引言 在数据科学和自然语言处理领域,词云图(Word Cloud)是一种常用的可视化工具。它通过直观的图形展示文本数据中的高频词汇,使得我们能够快速抓住文本内容的核心主题…...

【Windows】Q-Dir(资源管理器)软件介绍

软件介绍 Q-Dir是一款免费的文件管理器软件,它可以让您更方便地浏览和管理计算机上的文件和文件夹。与Windows自带的资源管理器相比,Q-Dir具有更多的功能和选项。 安装教程 软件下载完成,解压软件。 点击Q-Dir.exe即可打开软件。 功能…...

什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?

大家好,我是鸭鸭! 此答案节选自鸭鸭最近弄的面试刷题神器面试鸭 ,更多大厂常问面试题,可以点击下面的小程序进行阅读哈! 目前这个面试刷题小程序刚出,有网页和小程序双端可以使用! 回归面试题…...

C++-类与对象(中上篇)

一、目标 1. 类的 6 个默认成员函数 2. 构造函数 3. 析构函数 二、对目标的介绍 1. 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生…...

链表 206.反转链表

一般方法 不需要一个个来回换,只需要改变链表的指向,即可完成 一个链表的头节点,也代表了整个链表 class Solution {public ListNode reverseList(ListNode head) {ListNode temp;ListNode cur head;ListNode pre null;while(cur ! null…...

Ubuntu18.04 配置EtherCAT主站IGH SOEM

IGH IGH 是开源的EtherCAT 主站软件 一、安装依赖 sudo apt update sudo apt install build-essential linux-headers-$(uname -r) mercurial autoconf libtool 也不知道安装的完全不完全 uname -r 可以查看内核,我安装的ubuntu18.04的内核版本是 5.4.0-84-gen…...

航空航天构型管理

构型管理(CM)被定义为在产品的生命周期中应用的SE技术和管理规程。CM的五个原则是:CM计划与执行、配置识别、配置变更和差异控制、配置状态核算和配置验证。 广义上的构型管理规划和管理是有效实施配置管理的关键。特别是在不同项目之间的差异中,构型管理…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...