LVS负载均衡(twenty-six day)

news2024/11/28 0:37:22

一、LVS

(一)什么是LVS

linux virtural server的简称,也就是linxu虚拟机服务器,这是一个由章文岩博士发起的开源项目,官网是http://www.linuxvirtualserver.org,现在lvs已经是linux内核标准的-部分,使用lvS可以达到的技术目标是:通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群,他具有良好的可性,可延展性和可操作性,从而以低廉的成本实现最优的性能,Lvs是一个实现负载均衡集群开源软件项目,lvs从逻辑上可以分为调度层server集群层,和共享存储
免费,开源,四层负载均衡

(二)LVS调度算法

1、静态调度算法(Fixed Scheduling Method)
(1)轮询

RR  轮询**
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

(2)加权轮询

WRR  加权轮询**

调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。 这样可以保证处理能力强的服务器处理更多的访问流量。调度器 可以自动问询真实服务器的负载情况,并动态地调整其权值

(3)目标地址hash

DH 目标地址hash**
算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个日标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

(4)源地址hash

SH 源地址hash**
算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是 可用的且未超载,将请求发送到该服务器,否则返回空。
它采用的散列函数与目标地址散列调度算法的相同。除了将请求的目标IP地址换成请求的源IP地址外,它的算法流程与目标地址散列调度算法的基本相似。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

2、动态调度算法(Dynamic Scheduling Method)

(1)Lc最少链接

(2)wlc加权最少链接

(3)sed最少期望延迟

(4)nq从不排队调度算法

(5)lblc基于本地的最少链接

(6)lblb基于复制的最少链接

(三)LVS的工作原理

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

(四)组成以及相关术语

1、组成
(1)ipvs

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

(2)ipvsadm

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

(3)lIvs组成=ipvsipv

内核,负载均衡调度代码)+sadm(ipvs管理器,负责均衡提供集群后端服务等信息

2、术语

(1)DS Dlrector Server 前端负责均衡节点(负载均衡服务器)
(2)RS real server 后端真实工作服务器(web服务器)

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

(4)DIP Director Server lp 和内部主机通讯的ip地址(负责与Real Server交互的内部Ip)

(5)RIP Real Server lp 后端服务器ip地址
(6)CIP clientIP 访问客户端ip地址

(五)三种工作模式

1、*LVS-NET模式
(1)NET模式的工作原理

(1)用户请求ds,此时请求的报文会先到内核空间prerouting链,此时报文ip为cip,目标ip为vip
(2)prerouting检测发现数据包目标ip是本机,将数据包送到input链
(3)ipvs对比数据包请求的服务是否为集群服务,如果是,修改数据包的目标ip地址为后端服务器的IP地址,然后将数据包发送给POSTROUTING链,此时报文ip为cip,目标ip为rip
(4)POSTROUTING通过选路,将数据发送给RealServer
(5)RealServer对比发现目标ip为自己的ip,开始构建响应报文发回给Director Server此时报文的源ip为RIP,目标ip为CIP
(6)Derector Server在响应客户端前,会将源ip地址修改为自己的VIP,然后响应给客户端,目标ip为cip,此时报文源IP为VIP,目标ip为cip

(2)NAT模型的特性

(1)Rs应该是私有地址,Rs网关必须指向DIP
(2)DIP和RIP必须在同一个网段内
(3)请求和响应报文都应该经过Director Server,高负载场景中Director Server容易成为性能瓶颈
(4)支持端口映射
(5)Rs可是使用任意操作系统
(6)缺陷,对Ds压力会比较大,请求和响应都需要经过ds

(3)NAT模式实战-环境准备
角色作用IP
NAT负载均衡调度器DS

内网(192.168.1.10)

外网(192.168.1.102)

web-01真实web服务器Rs192.168.1.11
web-02真实web服务器Rs192.168.1.12
DNS用来解析各主机的域名和IP地址192.168.1.13
client测试192.168.1.14

        给NAT主机增加一张网卡,命名为ens37,自动或者手工获取ip均可,理论上nat对应ds服务器应该有两张网卡vip,dip)vip对外服务,需要使用公网ip,dip内网局域网,使用虚拟机使用仅主机模式,也可以用桥接模式和nat模式都可以 

        步骤

(1)配置两个网卡和两个ip地址,正常来说应该配置两个不同的网段的ip,一个对外的vip,一个对内的dip,现在主要使用nat的网络模式,可以配置桥接模式对外,Nat对内,(教师机不方便配置桥接模式,所以都是配置的nat模式,但是要分清那个IP是VIP。那个IP是dip,在物理主机上要ping通)
(2)克隆主机,生成net模式的机器
(3)设置主机名称NAT
(4)更改ip地址

web-01:

[root@web-01 ~]# yum -y install epel-release
[root@web-01 ~]# yum -y install nginx

[root@web-01 ~]# nginx

web-02:

[root@web-02 ~]# yum -y install epel-release
[root@web-02 ~]# yum -y install nginx

[root@web-02 ~]# nginx

DNS:

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

[root@DNS ~]# vim /etc/named.conf

options {
        listen-on port 53 { 127.0.0.1;
any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { localhost;
any; }

[root@DNS ~]# vim /etc/named.rfc1912.zones 

:set  number

:12,18 co 42

 44 zone "ganmaole.com" IN {
 45         type master;
 46         file "
hamigua.com.zone";
 47         allow-update { none; };
 48 };

[root@DNS ~]# cd /var/named/
[root@DNS named]# cp -p named.localhost ganmaole.com.zone
[root@DNS named]# vim ganmaole.com.zone 
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1

NAT      A       192.168.1.10
DNS      A       192.168.1.13
web-01   A       192.168.1.11
web-02   A       192.168.1.12

检查配置文件

[root@DNS named]# named-checkconf /etc/named.conf
[root@DNS named]# named-checkconf /etc/named.rfc1912.zones
[root@DNS named]# named-checkzone ganmaole.com.zone  ganmaole.com.zone
启动服务
[root@DNS named]# systemctl start named
[root@DNS named]# systemctl enable named    #开机自启

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

NAT:

[root@NAT ~]# vim /etc/resolv.conf    #里面内容只留最后一行
[root@NAT ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160 

 #最后一行加(DNS1=192.168.1.13)
[root@NAT ~]# systemctl restart network

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

时间同步

[root@NAT ~]# yum -y install ntp
[root@NAT ~]# yum -y install ntpdate.x86_64

[root@NAT ~]# crontab -e

[root@NAT ~]# systemctl start ntpd
[root@NAT ~]# systemctl enable ntpd

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

client:

[root@client ~]# echo "nameserver 192.168.1.13" > /etc/resolv.conf
[root@client ~]# ping nat.ganmaole.com
PING NAT.ganmaole.com (192.168.1.10) 56(84) bytes of data.
64 bytes from 192.168.1.10 (192.168.1.10): icmp_seq=1 ttl=64 time=0.711 ms
64 bytes from 192.168.1.10 (192.168.1.10): icmp_seq=2 ttl=64 time=0.460 ms

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(4)NAT模式搭建

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

[root@NAT ~]# ipvsadm -C
[root@NAT ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@NAT ~]# ipvsadm -A -t 192.168.1.102:80 -s rr
[root@NAT ~]# ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.11:80 -m

2、*LVS-DR模式
3、 LVS-Tun模式(隧道模式)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 实现上浮气泡效果

一、 效果 二、代码 1.用 li 来做每个气泡 <div class"dataSea_middle_bottom"><ul><liv-for"(item,index) in keyBusiness":key"index"class"pops animal"><p class"fb">{{ item.name}}</p>…

Java面试题(一)----Java基础

基础 Java中和equals有什么区别&#xff1f; 一个是运算符&#xff0c;一个是方法。 如果比较的对象是基本数据类型&#xff0c;则比较数值是否相等&#xff1b;如果比较的是引用数据类型&#xff0c;则比较的是对象的内存地址是否相等。 因为Java只有值传递&#xff0c;对于…

SQL Zoo 9-.Window functions

以下数据均来自SQL Zoo 1.Show the lastName, party and votes for the constituency S14000024 in 2017.&#xff08;显示2017年选区“S14000024”的姓氏、政党和选票&#xff09; SELECT lastName, party, votesFROM geWHERE constituency S14000024 AND yr 2017 ORDER BY…

开启IDEA打开新项目时窗口提示

1.背景 实际开发中很多时候,我们会同时打开多个项目,或者项目切换, 这时候有2中情况,打开新窗口或者在当前窗口打开(即:关闭当前窗口,打开新窗口) 具体是那种情况,要根据实际场景,因此我们希望可以弹框提示: 是打开新窗口,还是在当前窗口打开 具体设置如下: 2.步骤 3.测试…

中国科技统计年鉴,数据覆盖1991-2022年多年份

基本信息. 数据名称: 中国科技统计年鉴 数据格式: excel 数据时间: 1991-2022年 数据几何类型: xlsx 数据坐标系: WGS84 数据来源&#xff1a;国家统计局 数据预览&#xff1a; 数据可视化.

zabbix“专家坐诊”第251期问答

问题一 Q&#xff1a;zabbix模板自带的监控项很多都不需要&#xff0c;也不用删除&#xff0c;就是怎么让他们都不展示出来 A&#xff1a;禁用掉 Q&#xff1a;还是在的&#xff0c;我想要就看不见&#xff0c;不是不启用&#xff0c;想要效果跟删除一样&#xff0c;看不见&am…

我在高职教STM32——I2C通信之SHT20传感器(1)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助CSDN平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分…

go-zero中基本配置及获取参数

一、使用配置文件启动项目 1、在项目的etc文件夹下分别创建开发环境和测试环境的配置文件,这里简单点使用不同的端口 2、配置Makefile文件启动命令来启动不同配置文件 runDev:go run users.go -f etc/application-dev.yml runProd:go run users.go -f etc/application-prod.ym…

RC电路(三):零点和极点

一、零极点定义 零点和极点是在自动控制原理中用于描述系统特性的概念。‌ 零点&#xff08;Zero&#xff09;&#xff1a;‌在传递函数的分子多项式等于零的解。即当系统的输入信号等于零时&#xff0c;‌输出信号不为零的情况下&#xff0c;‌输入信号与输出信号相等的点。‌…

人工智能系统测试生命周期详解之测试数据准备

前面的文章里我们已经整体介绍过了人工智能测试的生命周期&#xff0c;它需要经历测试需求的分析、测试环境的准备、数据的准备与验证、测试的执行预分析以及上线后的监控这样一个过程。前面的文章已经为大家介绍了人工智能系统测试生命周期的“需求分析”环节和“测试环境准备…

SPSS-主成分分析实践

相信各位小伙伴都知道主成分分析的原理&#xff0c;我们今天用SPSS来实现一下主成分分析 主成分分析步骤 对原来的全部指标进行标准化&#xff0c;以消除变量在水平和量纲的影响根据标准化的数据矩阵求出相关系数矩阵求出协方差矩阵的特征根和特征向量确定主成分&#xff0c;…

DRM(Direct Rendering Manager)直接渲染管理

DRM是Linux 内核的一个子系统&#xff0c;负责与现代显卡的GPU进行交互。DRM 公开了一个API (libdrm)&#xff0c;用户空间程序可以使用该API 向 GPU 发送命令和数据并执行诸如配置显示器模式设置之类的操作。DRM 最初是作为X 服务器直接渲染基础架构的内核空间组件开发的&…

大规模复杂场景三维重建与理解——学习笔记

一、完整的大规模复杂场景三维重建与理解系统 一个完整的大规模复杂场景三维重建与理解系统包含“自主式场景数据获取->高精度联合位姿解算->完整化三维几何重建->细粒度三维语义分割->结构化三维矢量表达->全天候长时定位定姿->高时效地图增量更新”等模块。…

2022年第一至第四批专精特新“小巨人”企业数据,企业名称、经营范围、公示批次等字段可查询

基本信息. 数据名称: 第一至第四批专精特新“小巨人”企业数据 数据格式: Shpxlsx 数据时间: 2022年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源&#xff1a;《中国城市统计年鉴》中统计的工业企业数相关数据&#xff0c;对象为地级及以上的城市&#xff0c;统计…

【书生大模型实战营第三期 | 进阶岛第2关-Lagent 自定义你的 Agent 智能体】

学习心得&#xff1a;Lagent 自定义你的 Agent 智能体 摘要 Lagent 是一个为大语言模型设计的轻量级开源智能体框架&#xff0c;它不仅支持多种智能体范式&#xff0c;如 AutoGPT、ReAct&#xff0c;还集成了多种工具&#xff0c;包括但不限于 Arxiv 搜索、Google 搜索等。通…

电子行业数字工厂管理系统解决方案

电子行业数字工厂管理系统解决方案是针对电子企业特定需求而设计的一套综合管理系统&#xff0c;旨在通过数字化手段提升生产效率、优化资源配置、降低运营成本&#xff0c;并确保高品质产品的输出。以下是一个详细的电子行业数字工厂管理系统解决方案的概述&#xff1a; 一、系…

C语言:字符函数,字符串函数

在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语言标准库中提供了一系列库函数。 一. 字符分类函数 C语言中有一系列的函数是专门做字符分类的&#xff0c;也就是一个字符是属于什么类型的字符的。 这些函数的使用…

你知道AI模型是如何学习的吗?

在人工智能的广阔天地中&#xff0c;AI模型的学习方式不仅决定了其智能行为的深度和广度&#xff0c;更是推动技术进步和应用创新的关键动力。随着AI技术的飞速发展&#xff0c;我们越来越意识到&#xff0c;深入了解AI的学习机制对于把握其潜能至关重要。 我们将从基础概念出…

hive之greatest和least函数

1、greatest函数&#xff1a; greatest(col_a, col_b, ..., col_n)比较n个column的大小&#xff0c;过滤掉null或对null值进行处理&#xff0c;当某个column中是string&#xff0c;而其他是int/double/float等时&#xff0c;返回null&#xff1b; 举例&#xff1a; select g…

Python 中的变量赋值、多重赋值

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在编程中&#xff0c;变量赋值是最基础的操作之一。Python 作为一门动态类型语言&#xff0c;其变量赋值和多重赋值具有独特的灵活性和简洁性。本文将详细介绍 Python 中的变量赋值、多重赋值&#xff0c;并包含…