LVS(Linux virual server)

news2024/11/24 17:08:28

目录

一.集群和分布式简介

1.系统性能扩展方式

2.集群Cluster

3.分布式 

 4.集群和分布式

 二.lvs(Linux virtual server) 运行原理

1.lvs介绍

2.lvs集群体系结构

3.LVS概念

4.lvs集群的类型

nat模式

nat模式数据逻辑

 lvs-nat模式原理及部署方法

实验环境部署

实验流程 

原理

 三.lvs部署命令介绍

1.lvs软件相关信息

2.ipvsadm命令 


一.集群和分布式简介

1.系统性能扩展方式

Scale UP :向上扩展 , 增强
Scale Out :向外扩展 , 增加设备,调度分配问题, Cluster

2.集群Cluster

Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
Cluster常见的三种类型:
  • LBLoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
  • HAHigh Availiablity(高可用)SPOFsingle Point Of failure

    MTBF:Mean Time Between Failure 平均无故障时间,正常时间

    MTTR:Mean Time To Restoration( repair )平均恢复前时间,故障时间
    A=MTBF/( MTBF+MTTR (0,1) 99%, 99.5%, 99.9%, 99.99%, 99.999%
   SLA Service level agreement (服务等级协议)是在一定开销下为保障服务的性能和可       用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质     量的主要因素。在 常规的领域中,总是设定所谓的三个9 ,四个 9 来进行表示,当没有达到     这种水平的时候,就会有一 些列的惩罚措施,而运维,最主要的目标就是达成这种服务水     平。
  停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关      注计划外停机时间
  • HPCHigh-performance computing(高性能计算,国家战略资源,不在课程范围内)

3.分布式 

分布式存储 :Ceph GlusterFs FastDFS MogileFs
分布式计算 :hadoop Spark
分布式常见应用
分布式应用—— 服务按照功能拆分,使用微服务
分布式静态资源—— 静态资源放在不同的存储集群上 分布式数据和存储 -- 使用 key-value 缓存系统
分布式计算—— 对特殊业务使用分布式计算,比如 Hadoop 集群

 4.集群和分布式

  • 集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据 和代码都是一样的
  • 分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务
  • 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数 来提升效率,
  • 对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器 完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决 定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点, 都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败

 二.lvs(Linux virtual server) 运行原理

1.lvs介绍

LVS:linux Virtual Server,负载调度器,内核集成,阿里的四层SLB(Server LoadBalance)是基于LVS+keepalived实现
LVS只能做到四层负载无法做到七层
LVS 官网 : http://www.linuxvirtualserver.org/
LVS 相关术语
  • VS: Virtual Server,负责调度
  • RS:RealServer,负责真正提供服务

2.lvs集群体系结构

用户(user)请求通过网络到达lvs(load balance),两个共同组成了高可用,一个出问题另一个立即顶替,保证了稳定性,然后负责将请求调度到真正的real server上, 调度也有四种方式(lvs-nat, lvs-dr,lvs-tun,lvs-fullnat)。调度过来到底给那台,用到lvs的算法。

3.LVS概念

VS Virtual Server
RS Real Server
CIP Client IP
VIP: Virtual serve IP VS 外网的 IP(对客户开放)
DIP: Director IP VS 内网的 IP  (对real server开放)
RIP: Real server IP (real server自身ip)
访问流程: CIP <--> VIP == DIP <--> RIP

4.lvs集群的类型

lvs-nat : 修改请求报文的目标IP, 多目标 IP DNAT (就是user访问到lvs,lvs做了个转换,直接访问real server)
lvs-dr 操纵封装新的 MAC 地址
lvs-tun : 在原请求IP 报文之外新加一个 IP 首部
lvs-fullnat 修改请求报文的源和目标 IP

nat模式

Ivs-nat:

  • 本质是多目标IPDNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RSRIPPORT实现转发
  • RIPDIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
  • 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
  • 支持端口映射,可修改请求报文的目标PORT
  • VS必须是Linux系统,RS可以是任意OS系统

nat模式数据逻辑

1. 客户端发送访问请求,请求数据包中含有请求来源( cip ),访问目标地址( VIP )访问目标端口
9000port
2.VS 服务器接收到访问请求做 DNAT 把请求数据包中的目的地由 VIP 换成 RS RIP 和相应端口
3.RS1 相应请求,发送响应数据包,包中的相应保温为数据来源( RIP1 )响应目标( CIP )相应端口
9000port
4.VS 服务器接收到响应数据包,改变包中的数据来源( RIP1-->VIP , 响应目标端口( 9000-->80
5.VS 服务器把修改过报文的响应数据包回传给客户端
6.lvs NAT 模式接收和返回客户端数据包时都要经过 lvs 的调度机,所以 lvs 的调度机容易阻塞

 lvs-nat模式原理及部署方法

实验环境部署

设备                                           角色                                                        ip

rhel9-lvs                                      lvs                                              vip:192.168.10.129/24

                                                                                                      dip:   192.168.94.130/24

rhel9-ndoe1                                RS1                                           rip:    192.168.94.135/24

rhel9-node2                                RS2                                           rip:    192.168.94.140/24

rhel9-node3                               Client                                          cip:    192.168.10.160/24                                     

rhel9-lvs

 

 rhel-node1,rhel-ndoe2

 

 

 

rhel-node3 

 注:nat模式和仅主机模式是为了区分网络。(nat模式看作外网,仅主机模式看作内网)

rhel-lvs :

由于lvs两个网卡上的ip属于两个网段,是不通信的,所以需要打开其内核路由功能

[root@rhel9-lvs ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1  # 这里默认的是0,需要改成1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@rhel9-lvs ~]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

net.ipv4.ip_forward=1
# 在配置文件的最后一行加上
[root@rhel9-lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

# 加上配置参数后不回立刻生效,需要输入以上指令,才回生效

 rhel-node1,rhel-node2的网关必须指向lvs(就是192.168.94.130)

[root@rhel-node1 ~]# vim /etc/NetworkManager/system-connections/ens160.nmconnection 
# 修改配置文件中的网关
[root@rhel-node1 ~]# grep ^address /etc/NetworkManager/system-connections/ens160.nmconnection 
address1=192.168.94.135/24,192.168.94.130
[root@rhel-node1 ~]# nmcli connection up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@rhel-node1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.94.130  0.0.0.0         UG    100    0        0 ens160
192.168.94.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160
[root@node2 ~]# vim /etc/NetworkManager/system-connections/ens160.nmconnection 
[root@node2 ~]# grep ^address /etc/NetworkManager/system-connections/ens160.nmconnection 
address1=192.168.94.140/24,192.168.94.130
[root@node2 ~]# nmcli connection reload 
[root@node2 ~]# nmcli connection up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@node2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.94.130  0.0.0.0         UG    100    0        0 ens160
192.168.94.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160

 在rhel-node1和rhel-node2上安装web服务

[root@rhel-node1 ~]# systemctl stop firewalld.service 
[root@rhel-node1 ~]# setenforce 0
[root@rhel-node1 ~]# getenforce 
Permissive
# 关闭防火墙和selinux
[root@rhel-node1 ~]# yum install httpd -y
[root@rhel-node1 ~]# systemctl enable httpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
# 开机自启加启动
[root@rhel-node1 ~]# echo node1 - 192.168.94.135 > /var/www/html/index.html
# 将内容写入共享目录
[root@rhel-node1 ~]# systemctl restart httpd
[root@rhel-node2 ~]# systemctl stop firewalld.service 
[root@rhel-node2 ~]# setenforce 0
[root@rhel-node2 ~]# getenforce 
Permissive
# 关闭防火墙和selinux
[root@rhel-node2 ~]# yum install httpd -y
[root@rhel-node2 ~]# systemctl enable httpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
# 开机自启加启动
[root@rhel-node2 ~]# echo node2 - 192.168.94.140 > /var/www/html/index.html
# 将内容写入共享目录
[root@rhel-node2 ~]# systemctl restart httpd

注:在实验当中两个服务器内容不一样是为了更清晰的展现效果,在工作中两个服务器内容应当一致。 

 在rhel-lvs主机中检测:

[root@rhel9-lvs ~]# curl 192.168.94.135
node1 - 192.168.94.135
[root@rhel9-lvs ~]# curl 192.168.94.140
node2-192.168.94.140

#lvs主机应当看可以正常范围到两个web服务器中的内容

以上均为实验开始前的环境部署

实验流程 

在lv主机上安装lvs软件包

[root@rhel9-lvs ~]# yum install ipvsadm -y

查看当前策略

[root@rhel9-lvs ~]# ipvsadm -Ln
# 查看当前策略
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

# 当前无策略

在lvs主机上开始写入策略 

[root@rhel9-lvs ~]# ipvsadm -A -t 192.168.10.129:80 -s rr
# -A 表示增加虚拟server, -t 表示增加的调度是tcp协议的服务
# 后面输入的ip是客户访问此ip时开始调度:后加访问的端口
# -s 是指定你的调度算法    rr 是轮巡(静态算法)
[root@rhel9-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.10.129:80 rr
# 该策略有了之后,后段需要调度那些主机,需要继续写出来

[root@rhel9-lvs ~]# ipvsadm -a -t 192.168.10.129:80 -r 192.168.94.135:80 -m
[root@rhel9-lvs ~]# ipvsadm -a -t 192.168.10.129:80 -r 192.168.94.140:80 -m
[root@rhel9-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.10.129:80 rr
  -> 192.168.94.135:80            Masq    1      0          0         
  -> 192.168.94.140:80            Masq    1      0          0  
# -r 表示real server 真实主机   
# -m 表示我们当前用的lvs的模式是nat  ,同理,-g 则表示直连路由, -i表示tun,隧道模式
# -w 指定权重,就是给谁多给谁少, 因为此时的算法是rr,和-w 冲突,所以不生效,要想生效算法应写wr

检测:当访问192.168.10.129时,他真正访问的应该是后端的服务器 

注意,lvs主机的防火墙和selinux也要关闭

[root@rhel9-lvs ~]# for i in {1..10}
> do
> curl 192.168.10.129
> done
node2-192.168.94.140
node1 - 192.168.94.135
node2-192.168.94.140
node1 - 192.168.94.135
node2-192.168.94.140
node1 - 192.168.94.135
node2-192.168.94.140
node1 - 192.168.94.135
node2-192.168.94.140
node1 - 192.168.94.135


# 因为是轮循的算法,所以是你一次我一次
# 在企业中两次访问结果应是一致的,以上只是测试,为了更好的提现效果
[root@rhel9-lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
# 保存策略

 

原理

客户把流量打到了vip上,vip得到流量以后去读取我们lvs的规则策略,看是给谁的,然后查看调度算法是什么,得到调度算法后,按照调度算法对后端的real server(rs)进行调度,调度后rs得到了请求,rs看到的请求是cip, 但是rs无法仍过来数据请求,所以他只能向网关里面扔数据请求,而rs的网关恰恰是lvs的dip,网关处理扔过来的数据请求,最后通过lvs主机的vip来转发到我们的客户。

 三.lvs部署命令介绍

1.lvs软件相关信息

  • 程序包:ipvsadm
  • Unit File: ipvsadm.service
  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • ipvs调度规则文件:/etc/sysconfig/ipvsadm

2.ipvsadm命令 

  • 核心功能:
  • 集群服务管理:增、删、改
  • 集群服务的RS管理:增、删、改
  • 查看

命令参数

管理集群服务
ipvsadm -A|E -t tcp |u udp |f (防护墙标签) \
service-address( 集群地址 ) \
[-s scheduler( 调度算法 )] \
[-p [timeout]] \
[-M netmask] \
[--pepersistence_engine] \
[-b sched-flags]
ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存
管理集群中的real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m]( 工作模式 ) [-w
weight]( 权重 )
ipvsadm -d -t|u|f service-address -r server-address 删除 RS
ipvsadm -L|l [options] 查看 rs
ipvsadm -Z [-t|u|f service-address] 清楚计数器

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

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

相关文章

Proxy302:你的一站式代理IP解决方案

一、Proxy302介绍 Proxy302&#xff0c;一款优秀的全球代理IP平台&#xff0c;以按需充值的灵活方式、覆盖广泛的代理类型及直观高效的用户上手体验与界面设计&#xff0c;赢得了市场广泛认可。Proxy302亮点不仅在于其功能的强大&#xff0c;更在于其对用户体验的深刻理解和不…

代发考生战报:7月26号北京考试通过 HCIP-Cloud云计算 H13-527

代发考生战报&#xff1a;7月26号北京考试通过 HCIP-Cloud云计算 H13-527 &#xff0c;考试遇到4个新题&#xff0c;剩下都是题库里的&#xff0c;但是没打高分&#xff0c;可能题库里的答案有问题&#xff0c;但是能考过就行&#xff0c;挺满足的&#xff0c;就是把题库都背会…

IT知识库文档查找与学习:rfc文档

RFC文档查找 RFC&#xff08;Request for Comments&#xff09;文档是互联网工程任务组&#xff08;Internet Engineering Task Force, IETF&#xff09;发布的一系列备忘录&#xff0c;旨在提供互联网技术和应用的标准、规范、指南和最佳实践。RFC文档是互联网发展的基石&…

小怡分享之String类的小练习

前言&#xff1a; &#x1f308;✨之前小怡给大家分享了String类&#xff0c;今天小怡给大家分享String类的一些小习题。 1.第一个只出现一次的字符 思路&#xff1a; 遍历字符串&#xff0c;把对应字符位置的下标开始计数&#xff0c;count[字符-‘a’]&#xff1b;再次遍历…

数模——灰色关联分析算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、基本概念了解 1.什么是灰色系统&#xff1f; 2.什么是关联分析&#xff1f; 二、模型原理 三、建模过程 1.找母序列&#xff08;参考序列&am…

力扣面试150 逆波兰表达式求值 栈 模拟栈

Problem: 150. 逆波兰表达式求值 &#x1f468;‍&#x1f3eb; 参考题解 class Solution {//纯数组模拟栈实现(推荐) 3 ms 36 MBpublic static int evalRPN(String[] tokens) {int[] numStack new int[tokens.length / 2 1];int index 0;for (String s : tokens) {swit…

常见中间件漏洞(二、WebLogin合集)

目录 二、WebLogic Weblogic介绍 2.1 后台弱口令GetShell 漏洞描述 影响范围 环境搭建 漏洞复现 2.2 CVE-2017-3506 漏洞描述 影响版本 环境搭建 漏洞复现 2.3 CVE-2019-2725 漏洞描述 影响版本 环境搭建 漏洞复现 2.4 CVE-2018-2628 漏洞描述 漏洞影响 环…

STM32学习笔记2 --- GPIO输入

目录 AD/DA 按键 传感器模块 传感器模块细节 按键模块电路 传感器模块接入电路 OLED ​编辑 代码 封装驱动代码 GPIO读取函数 按键控制LED代码 部分解释 光敏传感器代码 部分解释 接线图 c知识补充 AD/DA AD&#xff1a;模拟-数字转换 DA&#xff1a;数字-模拟…

使用Idea进行Java开发断点打不进去

我在进行打断点时 出现了这个问题导致我无法进行断点测试 问题原因&#xff1a; 打的断点太多了 &#xff0c;导致线程冲突 解决办法 &#xff1a; 删除之前打完未去掉的断点 完美解决 Nice&#xff01; 有可能会不小心点到断点失效键&#xff0c;断点有可能会变成灰色 则为无…

【系统分析师】-综合知识-企业信息化与系统规划

1、一个有效的客户关系管理&#xff08; Customer Relationship Management,CRM&#xff09;解决方案应具备畅通有效的客户交流渠道、对所获信息进行有效分析和&#xff08;CRM 与 ERP 很好地集成&#xff09;等特点。 通过将&#xff08;人力资源、业务流程与专业技术&#x…

uniapp连接手机调试App,并最终打包成apk文件,和上传到应用商店的问题

对于一些刚开始使用uniapp开发app的同学来说&#xff0c;有时候仅仅是第一步连接手机进行开发测试都很难进行。这篇文章就来向大家介绍一些怎样连接手机进行调试我们开发中的项目&#xff0c;并最终将开发好的项目打成apk包进行安装&#xff0c;和将开发好的App应用上传到应用商…

【递归】用递归的方法求阶乘

用递归的方法求 阶乘&#xff0c;这里我们以 求5&#xff01;为例&#xff0c;使用C语言实现 #include<stdio.h>int fact(int n){if(n1){return 1;}elsereturn n*fact(n-1); }int main(){int result;resultfact(5);printf("5的阶乘是 &#xff1a;%d",result)…

宝众宝达IPO终止:原实控人去世时间矛盾,婚外情主角任总经理

近日&#xff0c;上海证券交易所披露的信息显示&#xff0c;江苏宝众宝达药业股份有限公司&#xff08;下称“宝众宝达”&#xff09;及其保荐人中信建投证券撤回上市申请文件。因此&#xff0c;上海证券交易所决定终止对其首次公开发行股票并在主板上市的审核。 据贝多财经了解…

XXLJob接入说明

1、配置 1.1、pom文件 引入依赖 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId> </dependency> 1.2、bootstrap.yml 增加xxljob读取配置 common-xxljob.yaml 内容如下&#xff1a; xxl:job:adm…

JavaScript(二十七)——JavaScript 函数定义

目录 JavaScript 函数定义 函数声明 函数表达式 Function() 构造函数 函数提升&#xff08;Hoisting&#xff09; 自调用函数 函数可作为一个值使用 函数是对象 箭头函数 JavaScript 函数定义 JavaScript 使用关键字 function 定义函数。 函数可以通过声明定义&#…

力扣第45题:跳跃游戏 贪心DP(C++)

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…

【附保姆级教程】两个月内快速涨粉17万,变现2w+,儿童英语阅读,家长辅导孩子必备!

目录 一、前言 二、儿童英语阅读教程 第一步&#xff1a;利用AI代写英语阅读短文 第二步&#xff1a;使用Flux生成场景图 第三步&#xff1a;将文本转为音频 第四步&#xff1a;使用canva工具进行排版 第五步&#xff1a;剪辑视频 一、前言 大家好&#xff0c;我是小奇…

如何在国外市场推广中国游戏

在国外市场推广中国游戏需要一种考虑文化差异、市场偏好和有效营销渠道的战略方法。以下是成功向国际观众介绍和推广中国游戏的关键步骤和策略&#xff1a; 进行市场调研 了解目标市场&#xff1a;首先确定哪些外国市场对你的游戏最具潜力。考虑类似游戏类型的受欢迎程度、玩…

找工作准备刷题Day21 动态规划算法 (卡尔41期训练营 8.6)

上周有些事情回了趟老家&#xff0c;祝广大博友身体健康&#xff0c;多运动。前面的贪心算法题目后面慢慢补&#xff0c;近期找到了一个实习&#xff0c;大概持续三个月&#xff0c;现在计划是白天工作&#xff0c;晚上下班以后运动运动刷题。要加强牛客网那种两小时3道题的刷题…

【LVS】负载均衡--nat模式/实验

一、LVS运行原理 LVS:Linux Virtual Server &#xff0c;负载调度器&#xff0c;内核集成&#xff0c;章文嵩&#xff0c;阿里的四层 SLB(Server LoadBalance) 是基于LVSkeepalived 实现 LVS 官网 : http://www.linuxvirtualserver.org/ LVS 相关术语 VS: Virtual Server&…