LVS负载均衡(twenty-six day)

一、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.rhkb.cn/news/397699.html

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

相关文章

学术周交流与学习节选

文章目录 1、粒度多模态运动分析1.1 免特征重建的终身行人重识别1.2 无样本保留的终身行人重识别1.3 粒度多模态运动之类增量学习1.4 粒度多模态之人体姿态估计扩散模型 2、深度伪造的被动取证与主动防御2.1 研究现状及主要方法2.2 基于梯度的伪影特征表示2.3 基于伪造自适应学…

SQL注入实例(sqli-labs/less-18)

0、初始页面 先使用brup爆破密码,账号admin,密码admin 1、确定闭合字符 判断注入点在post请求参数的User-agent处 闭合字符为单引号 2、爆库名 3、爆表名 4、爆列名 5、查询最终目标 在index.php中有这么一句 $insert"INSERT INTO security.uage…

haproxy算法与具体实现

一、负载均衡 1.什么是负载均衡 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均 衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从…

『大模型笔记』人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)

人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF) 文章目录 一. 人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)1. 概念解释2. RLHF的组成部分2.1. 强化学习(Reinforcement Learning, RL)2.2. 状态空间(state space)2.3. 动作空…

深入InnoDB核心:揭秘B+树在数据库索引中的高效应用

目录 一、索引页与数据行的紧密关联 (一)数据页的双向链表结构 (二)记录行的单向链表结构 二、未创建索引情况 (一)无索引下的单页查找过程 以主键为搜索条件 以非主键列为搜索条件 (二…

ffmpeg 内存模型

最近在学习ffmpeg,阅读了一些packet和frame关于内存操作的api。在此长话短说,只说核心点。 ffmpeg模型 AVFrame 表示编码前的原始数据帧,AVPacket 表示编码后的压缩数据包。 问题: (1)从av_read_frame读…

算法打卡 Day20(二叉树)-找树左下角的值 + 路径总和 + 从中序与后序遍历序列构造二叉树

文章目录 Leetcode 513-找树左下角的值题目描述解题思路 Leetcode 112-路径总和题目描述解题思路相关题目Leetcode 113-路径总和 ii Leetcode 106-从中序与后序遍历序列构造二叉树题目描述解题思路类似题目Leetcode 105-从前序与中序遍历序列构造二叉树 Leetcode 513-找树左下角…

HSL模型和HSB模型,和懒人配色的Color Hunt

色彩不仅仅是视觉上的享受,它在数据可视化中也扮演着关键角色。通过合理运用色彩模型,我们可以使数据更具可读性和解释性。在这篇文章将探讨HSL(Hue, Saturation, Lightness)和HSB(Hue, Saturation, Brightness&#x…

Java中的抽象类与接口

1. 抽象类 1.1 抽象类概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的, 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 比如&…

freeRTOS学习之ARM架构

分析了arm架构以及RISC指令集的部分内容,同时复习了计算机组成原理中函数的汇编指令流程,也就是CPU的工作流程,大有裨益!

【python】使用FastAPI开发文件下载和上传服务的详细分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

如何使用Zoom API创建一个会议?

一、注册一个免费的Zoom账号(zoom.us) 二、在Zoom 应用市场(App Marketplace)创建一个server to server 的app,授予创建会议的权限。 三、创建一个Zoom API的服务端程序(node.js) 1、git clone https://github.com/zoom/server-to-server-o…

英语口语成人英语生活英语口语表达四六级英语培训柯桥小语种学习

全红婵向外国人展示金牌夺冠后,全红婵向外国友人展示金牌。视频中,一位外国男子对全红婵说:“How are you?”全红婵回应:“Good!Good!全红婵比出“拿捏”手势对方说全红婵是奥运冠军&#xff0c…

SpringCloud与SpringBoot之间的关系解析

Spring Cloud和Spring Boot是两个独立的项目,分别用于构建微服务架构和快速构建Java应用程序。它们之间有着密切的关系,可以相互配合使用。 Spring Boot简介 Spring Boot是一个用于快速构建Java应用程序的框架。它简化了Spring应用程序的开发过程&#x…

IDEA使用LiveTemplate快速生成方法注释

文章目录 1 场景2 要点2.1 新增LiveTemplate模版2.2 模版内容填写 3 练习手段 1 场景 方法的注释,一般包含作者、创建时间、功能描述、输入参数、返回值,如果每个方法的注释都手写,非常耗时,且容易随着后期变更代码导致差异&#…

Python酷库之旅-第三方库Pandas(075)

目录 一、用法精讲 306、pandas.Series.str.cat方法 306-1、语法 306-2、参数 306-3、功能 306-4、返回值 306-5、说明 306-6、用法 306-6-1、数据准备 306-6-2、代码示例 306-6-3、结果输出 307、pandas.Series.str.center方法 307-1、语法 307-2、参数 307-3、…

Python | Leetcode Python题解之第331题验证二叉树的前序序列化

题目: 题解: class Solution:def isValidSerialization(self, preorder: str) -> bool:pre 1for i in preorder.split(,):if i.isdigit():if pre 0:return Falsepre 1else:if pre 0:return Falsepre - 1return pre 0

GPS跟踪环路MATLAB之——数字锁频环

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 GPS跟踪环路MATLAB之——数字锁频环 前言为什么要锁频环科斯塔斯环鉴别器环路滤波器matlab程序获取完整程序 前言 从事卫星导航基带处理的童鞋都知道,跟踪环路属…

【DM】Linux下安装 DM数据库-命令行安装

【DM】Linux下安装 DM数据库-图形化安装 1、安装前准备工作1.1 检查 Linux系统信息1.2 创建DM安装用户1.3 检查操作系统限制1.4 检查系统内存与存储空间1.4.1 检查内存1.4.2 检查存储空间1.4.2 检查临时文件目录1.4.3 设置 JAVA 环境 2、使用dmdba用户安装DM82.1 挂载 DM 安装光…

vue中v-html 后端返回html + script js中click事件不生效

效果图&#xff1a; 需求&#xff1a;点击加号执行后端返回的script中的代码 后端返回的html&#xff1a; <!DOCTYPE html> <html langzh> <head> <title>xxx</title> <style>body{font-size: 14px}p{text-indent: 30px;}textarea{width…