集群服务负载均衡------LVS

个人的理解,以一种通俗易懂的方式讲述出来,如果有哪些地方说的不正确的话,希望大家留言指出来。笔者会非是常的感谢!

Cluster服务器集群,直接理解为一些单一的服务器的集合通过某种方式组合起来,为客户端提供服务。重要的是在外部看来它们仅仅是一个系统。

关于为什么要建立服务集群这个问题,这里可以用时下最火的淘宝交易平台为例,淘宝网8月份的商品成交总额是1.2亿人名币,会员数量达到220万,网页浏览量为5000万,这个还是2004年公布的保守数据,现在那就不好说了是吧,就说当是的这个网页浏览量说5000万的浏览量,如果是由单一的服务器提供服务,就是这个服务器的性能再好,面对如此高的访问量,在响应客户端的时候,你能想象吗?这么多的请求都要让它自己来处理,用不了多久,服务器就会累趴下吧!它一旦趴下(down机)你能想象吗?元方你怎么看?

综上总结服务器面临三个问题:

          1、 并发请求数量大,这就要求服务器容量要足够大

          2、 在线访问量大,要求服务器不能中断

          3、 总体的访问量庞大,禅理性能要足够的强

 

面对这些问题我们以往采取的方式是Scale up:(向上扩展),即是将当前使用的服务器,用比它性能更好的服务器替换掉(新机替换掉老机)。服务器单一管理起来非常方便,但是,要知道换上的新机比老机提升了的性能和在这个新机上的花销可不是成比增长的,并且还会造成对老机的浪费。所以就有了Scale out(向外扩展)即是以增加机器的方式来提升服务器的性能,这其实就是Cluster“集群”。

针对以上的三个问题,按服务集群的功能能将其分为三个类别:
1、负载均衡集群(LB,load Balance Cluster)
2、高可用集群(HA,High Available Cluster)
3、高性能集群(HP,High Performance Cluster)
负载均衡集群在Linux中的软件实现方式:LVS
高可用集群在Linux中的软件实现方式:heartbeat corosync
高性能集群在Linux中的软件实现方式:hadoop
首先我们来说说下先负载均衡集群,通过硬件实现的方式,在硬件技术上传到常用到的调度器有F5的BIG IP可处理的并发请求数量高达1000万,IBM的A10并发请求数量可达600万,Citrix,Netscaler可处理并发请求数量为500万,都可以满足我们的需求,但是都太贵了,而我们的软件实现方式很好的弥补了这个缺憾哈!而其中最具代表性之一的解决方案即是淘宝的章文嵩博士创立的LVS。
-----------------------------------LVS框架图-------------------------------------------

LVS(Linux Vitual Server)---虚拟服务器,在工作当中它是作为一个前段的Director(调度器)工作的,Director它本身不提供任何的服务,只是将接收到的请求转发给后端的Real Seerver处理,然后在响应给客户端。所以我们也称LVS为“4 layer switch/route"。LVS本身的两个基本的组件就是:ipvs和ipvsadm。而ipvs是一个工作在内核当中的,它其实就是相当于做成了netfilter框架的一个模块。就像netfilter当中有filter表、net表、mangle表,而你现在又加入了Ipvs表,主要是用于让定义好的规则生效,ipvsadm是工作在用户空间,用来定义LVS的转发规则。LVS是工作在INPUT链上的。
-------------------------------------转发过程图----------------------------------------

Director(调度器)即是负载均衡器,一个合格的Director要满足以下的要求。
1、考虑服务器负载能力通过某种调度方法,调度后端服务器。
2、考虑后端服务器是否正常工作,这也是需要一种机制来完成,我们称其为后端主机健康状态测。
3、考虑Director本身如果出故障,整个服务瘫痪的问题。这里不得不用到高可用集群。即在添加一个Director.
4、为多台的Real Server提供一个共享存储。说到共享存储就不得不说到DAS、NAS、SAN。
DAS:直接辅加存储,即直接连接到主机总线上的存储设备。优点在于存储容量扩展方便,实施起来很简单,但是这种方式太过于限制,它必须要和服务器在同一个机架上。
NAS:网络辅加存储,双方共享文件服务器,只要连接到NAS上就可以实现共享存储。并且Real Server同时写入的时候不会崩溃,因为它是文件系统级别的,但是DNS最多只能同时为十台服务器提供共享存储。
SAN:存储区域网络,
FC SAN光驱动
IP SAN(SSISC)
每个Real Sever都有RIP VIP 
每个Drector都有DIP VIP
LVS有三种转发模型:NAT模型 DR模型 TUN模型,其中DR模型应用最广。
NAT模型:网络地址转换模型,
NAT模型的特点:
1、Diretor和Real Server(RS)必须在同一个子网中。
2、RIP通常使用私有地址,仅限于本地通信
3、Director工作在Clients和RS中间,负责处理进出的全部报文
4、RS网关要指向DIP
5、可以实现端口转换(映射)
6、RS可以是任何操作系统
7、Director可能成为性能瓶颈,所以不适用于教大规模的负载均衡场景
DR模型:直接路由模型
DR模型的特点:
1、RS跟Director必须在同一物理网上(即中间不能隔路由设备)。
2、RIP可以使用公网地址
3、Director仅处理请求报文
4、RS的网关不能指向DIP
5、不能使用端口映射
6、大多数操作系统可以用于RS
7、一般DR模型的Director能处理比NAT模型多的多的请求
DR模型详解:
CIP向VIP发出请求,CIP经由路由设备,到达局域网,它的目的是想和Director的VIP通信,但是它不知道VIP的MAC,在局域网内部通讯看的是MAC地址,所以它要发广播,所有收到广播包的都会回应此广播,此时就会产生问题了,RS1、RS2也会回应因为他们也有同样的VIP啊,那交换机怎么知道,哪个是Director的MAC呢?所以我们这里必须要控制RS1和RS2不回应此广播包,这就不得不提到两个内核参数,arp_ignor和arp_annouce,在RS1和RS2上均对这两个参数给与定义,则RS1和RS2就不会回应由交换发出的这个找VIP的对应的MAC的广播包了。此时数据包就可以到达Director了,Director通过某种调度方法计算发现RS1符合这个要求,所以它要把这个请求包交给RS1来处理,但是它也不知道RS1的MAC啊,所以它也要发起广播消息,此时Director发起的广播是在其内部发起的,每个RS的这个私有的地址都是不一样的。所以当RS1收到这个广播的时候发现时找它的,它就会回应,则此时Director就得到了RS1的MAC,它将请求报文的目标MAC地址换成RS1的MAC地址,然后在将这个请求包返回给交换机,此时交换机就认为这个请求是发给RS1的,它就会将其发给RS1,RS1收到请求包,直接用自己的VIP给予回应,不再经由Director.所以这就需要在RS1中定义一条路由"route add -host VIP dev lo:0"明确告知RS1,只要是请求VIP的,我就用lo:0这个上面的VIP来给予回应。
注意:1、RS和DR都是单网卡的哦,每个RS的VIP是设置在lo:0上的,这个lo:0是虚拟的哈。DR的VIP是在eth0:0上面配置的。
2、由DR发出的广播包不被RS屏蔽掉的原因是因为它是广播的RIP这是他们的私有网络的地址,刚刚设置的参数arp_ignor和arp_annouce,只是针对VIP的哈

TUN模型:隧道模型
TUN模型的特点
1、RS跟Director不必在同一个物理网络中
2、RIP一定不能使用私有地址
3、多数情况下Director仅处理请求报文
4、正常情况下响应报文不能经过Director
5、不能使用端口映射
6、仅允许支持隧道协议的操作系统用于RS
___________________________________________________________________
LVS的十种调度方法,分为静态和动态两类。
静态四种;仅根据算法本身调度,不关心RS上当前的连接状态。
1、RR
根据规则依次论调,不考虑RS的性能。轮到谁就转发给谁。
2、WRR
加权轮询,加入了weight(权重),可以根据RS的性能为其设置权重值,权重越大功能越强,但是不能发硬当前的服务器的运行的情况。
3、DH
目标地址hash,适用于前段是一个drector后端是几个缓存服务器,当客户端第一次访问到的是RS1的时候,DH这种算法保证,在客户端刷新后还是访问的是RS1。
4、SH
源地址hash,用于保证响应的报文和请求的报文是同一个路径。
动态六种:要将RS得连接状态计入调度考量标准。
1、LC
least connection,当一个用户请求过来的时候,就计算下哪台RS的链接谁最小,那么这台RS就获得了下次响应客户端请求的机会,计算的方法Overhead=active*256+inactive,如果两者的结果是相同的则从LVS中的规则依次往下选择RS。这种算法也是不考虑服务器的性能的。
2、WLC
这个就是加了权重的LC,考虑了RS的性能,即是性能好的就给的权重值大一些,不好的给的权重值小一些。缺点就是如果Overhead相同,则会按规则表中的顺序,由上而下选择RS,Overhead=(active*256+inactive)/weight
3、SED
就是对WLC的情况的补充,Overhead=(active+1)*256/weight,加一,就是为了让其能够比较出大小。
4、NQ
never queue 基本和SED相同,避免了SED当中的性能差的服务器长时间被空闲的弊端,它是第一个请求给性能好的服务器,第二个请求一定是给的空闲服务器不论它的性能的好与坏。以后还是会把请求给性能好的服务器
5、LBLC
它就是动态DH和LC的组合,适用于cache群,对于从来没有来过的那些新的请求会分给当前连接数较少的那台服务器。
6、LBLCR
带有复制功能的LBLC,它的适用场景这里举例说明一下,比如说现在又RS1和RS2,第一次访问RS1的5个请求第二次又来了,理所应到Director将会将其交给RS1,而此时在RS2是非常闲的,所以此时最好的处理方法就是可以将后来的这5个请求分别交给RS1和RS2,所以此时就需要把客户端第一次请求的资源复制下来。(特殊情况)
活动链接active和非活动链接inactive小解:
这里以http为例,http本身是一种无状态的链接,当客户端请求访问的时候,有个等待响应过程,这个时段可以称其为活动链接active状态.当服务器端给与响应后,请求因为keepalive而并未断开,则此段时间的状态就是非活动链接状态。
无连接状态即是无追踪
cookie即是个标识用于追踪用户访问过哪个资源,追踪用户的身份,这种单一的cookie是不安全的
session结合cookie或者url完成用户跟踪,客户端的cookie只需要保留session id敏感信息保留在服务器端.
持久连接是靠director上的持久模板来完成的,模板上的条目用hash保存.
防火墙标记服务,将两种服务标记成一种服务,用mangle给某数据报文一个标记MARK,但是不具有永久性,所以需要使用持久连接
LVS中的持久连接类型:
PCC
来自同一个用户端的所有的集群服务请求通通转发给后端的某个特定的Real
Server
PPC
将某客户端的特定的服务请求通过某种算法,转发给后端的某个特定的Real Server
PFWM
将两种服务绑定,即这两种服务都是通过后端所指定的某个Real Sever响应即是将多个PPC和并起来,但是并未达到PCC标准
-p定义持久连接超时时间的,默认是5分钟
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-O] [-M netmask]
ipvsadm -Ln --persistent-conn这是用于查看长连接的超时时常的
【管理集群服务】
1、增加集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler]
-s sheduler 指定调度方法,如果不指定的话默认是WLC
-t|u|f 分别表示tcp|udp|firemark
2、删除集群服务
ipvsadm -D -t|u|f  service-address
【管理集群服务中的RS】 
1、增加集群服务的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] 
[-w weight] 
a|e 其中a表示的是增加 e表示修改
[-g|i|m] -g表示DR模型(gatewaying) -i表示的TUN隧道模型(ipip) m表示的是nat模型(masquerading) ,如果默认不指定的话是DR模型.
2、删除集群服务当中的RS
ipvsadm -d -t|u|f service-address -r server-address
【查看服务信息(规则)】
ipvsadm -L|l
-n 不进行反解
-c 查看连接个数
--stats 查看统计总数
--rate 查看连接速率
ipbsadm -Z 清空计数器
【清空所有定义的规则】
ipvsadm -C
【保存集群服务的规则】
ipvsadm -R = ipvsadm-restore
ipvsadm -S = ipvsadm-save
service ipvsadm save
高可用集群(High Availabitity Cluster)
高可用集群的软件实现方式是:heartbeat corosycn
在SAN共享存储中用到了HA Cluster,HA的实现即是相当于做一个冗余
高可用集群通常会采用可用性来衡量基实际效果。计算机系统的可用性是通过平均无故障时间(MTTF)及平均维修时间(MTTR)来度量。

 

转载于:https://www.cnblogs.com/deamon/archive/2012/11/27/2791507.html

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

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

相关文章

tomcat jsp导入java_[导入]Tomcat JSP Web 开发中的乱码问题小姐

1. 静态页面的乱码问题文件的编码和浏览器要显示的编码不一致。1) 检查文件原始的编码, 可以用记事本打开, 然后选择另存为来看;2) 给当前页面加入一个指令来建议浏览器用指定的编码来显示文件字符内容.3) 如果系统是英文XP,没装东亚字符集支持, 也会显示乱码.2. JSP 页面的乱码…

四大开源分布式存储_ipfs分布式存储行业面临着四大主要风险,你知道是哪些吗?...

为了响应国家号召、推动分布式存储技术落地、防御行业风险,中国分布式存储产业联盟启动,全国从事IPFS以及分布式存储从业者对行业风险及联盟成立的必要性达成了高度共识,目前有36家以上的IPFS分布式存储行业企业填写了联盟申请表。几位国内知…

pjsua帮助手册(中文)

原文地址 : http://www.pjsip.org/pjsua.htm 介绍 PJSUA是一个开源的命令行SIP用户代理(软电话),用PJSIP协议,PJNATH,和PJMEDIA实现。 它虽然只有很简单的命令行界面,但是功能齐全。 SIP功能: 多…

js date转成 时间字符串_秋招快要开始了,前端笔试中的坑位-JS隐式转换问题

我们在写笔试题的时候,经常碰到涉及隐式转换的题目,例如"1" 2 obj 1 [] ![] [null] false 和 叫做严格运算符,对象类型指向地址相同或原始类型( 数值、字符串、布尔值)值相同;叫做相等运算…

Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)

作者:Howie_Y,系原创投稿主页:www.jianshu.com/u/79638e5f0743Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java …

eclipse编译java项目class文件_动态编译 Java 代码以及生成 Jar 文件

导读: 最近在看 Flink 源码的时候发现到一段实用的代码,该代码实现了 java 动态编译以及生成 jar 文件。将其进行改进后可以应用到我们的平台上,实现在平台页面上编写 java 代码语句,提交后由后台进行编译和打成 Jar 包再上传到指…

Dx11DemoBase 基类(三) 实例应用 【已实现】【附带源码】

现在我已经到哪了? 读书时,尤其是技术知识书籍, 我一般会担忧自己是否陷得太深, 细节关注得太多, 而忘了整体的过程; 一直以来对Direct3D 很畏惧, 因为太多函数和细节;现在我必须暂缓下&#x…

修改 decimal 默认值为0.00 sql_被经理邀请去“爬山”,只是因为我写错了一条SQL语句?...

作者:isysc1链接:https://juejin.im/post/5f06a2156fb9a07e5f5180df来源:掘金前戏SQL 写的妙,涨薪呱呱叫!新来的实习生小杨写了一条 SQL 语句SELECT wx_id from user WHERE wx_id 2当小杨迫不及待准备下班回家的时候&…

JS中关于clientWidth、offsetWidth、scrollWidth

网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offsetWidth (包括边线的宽);网页可见区域高: document.body.offsetHeight (包括边线的宽);网页正文全…

shell 执行失败重试_Uipath 机器人总是运行失败怎么办?

要知道为什么RPA机器人容易失败,首先了解下它和常规的应用系统有哪些区别。常规应用系统,就像程序员自己创造了一个世界、一个域,在这个世界里创造它的人就是主宰。出现BUG的风险是相对可控的,顶多是功能用不了。而RPA项目&#x…

c mysql安装教程视频_MySQL安装教程 - Windows安装MySQL教程 - 小白式安装MySQL教程 - 青衫慧博客...

版权声明本文转发自旧站点萧瑟云日志,近期考虑准备将旧站进行关闭(没有精力维护),部分文章将会迁移至本站。文章发表于:2017-10-28 12:32:03前言上次给大家带来了SQL Server的小白式安装教程,这次再次带来一个MySQL的小白式安装教…

PJSIP UA分析(1)--PJSUA主函数

1 intmain(intargc, char*argv[])2 {3 do{4 app_restart PJ_FALSE; //PJ_FALSE是一个宏,一旦用户调用pjsua可执行文件进入该循环,那么默认只执行一次退出5 //如果需要再次循环,那么在下面函数中…

锁定表头和固定列(Fixed table head and columns)

前段时间需要这个功能,但是找了很多都不能完美的实现,不是只能锁定表头,就是浏览器兼容问题什么的,在此就自己做了一个锁定表头和列的js方法,依赖于JQuery。 因为方法很简单,就未封装成插件的形式&#xff…

游戏详细设计说明书_宜家的说明书设计脑洞太大了!

平常我们看到的说明书是像这样纯文字解说的或者是规范的文字配图这些说明书一般都是注重文字的上表达而大家熟悉的家居品牌宜家将说明书创意玩出了新境界!↓↓↓这不,最近由于全球疫情严峻期间宜家的全新说明书手册搜罗了各种纸上游戏意为帮助大家打发无…

centos删除php_centos如何卸载php

查看php版本php -v查看php相关软件包#rpm -qa|grep php(视频教程推荐:linux视频教程)提示如下:#php-pdo-5.1.6-27.el5_5.3#php-mysql-5.1.6-27.el5_5.3#php-xml-5.1.6-27.el5_5.3#php-cli-5.1.6-27.el5_5.3#php-common-5.1.6-27.el5_5.3#php-gd-5.1.6-27…

cgblib 代理接口原理_Java开发者你还不知道?告诉你Dubbo 的底层原理,面试不再怕...

前言平常我们在构建分布式系统的时候,一般都是基于 Dubbo 技术栈或者是SpringCloud 技术栈来做。早期其实最先比较流行的是Dubbo,我记得我们当时有个部分的老大就是用的是Dubbo 来构建的一个系统,到后面才出来的 SpringCloud,由于…

包含对流环热,热流边界,等温边界的稳态热传导方程的FEM求解。

以下面的问题为例:对于如图所示的平面传热问题, 若上端有给定的热流-2W/m2,即从下往上传输热量,结构下端有确定的温度100,周围介质温度为20,在两侧有换热,换热系数为α100W/㎡/K,热导…

python生成动态二维码实例_python生成动态个性二维码(示例代码)

1 安装工具 2 生成普通二维码 3 带图片的二维码 4 动态 GIF 二维码 5 在Python程序中使用 一、安装 首先在python环境下运行, 打开cmd进入python27 进入scripts 然后在scripts输入命令:pip install myqr二、 生成普通二维码 安装了 myqr 之后&#xff0c…

matlab武汉理工大学数值分析线性函数拟合实验_「首席架构师推荐」数值计算库精选...

这是一个著名的数值库列表,这些库用于软件开发中执行数值计算。它不是一个完整的列表,而是一个包含Wikipedia上文章的数字库列表,很少有例外。典型库的选择取决于一系列不同的需求,例如:期望的特性(例如:大维线性代数、并行计算、…

JSONP跨域原理和jQuery.getJSON用法

JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。本文主要介绍JSONP跨域原理,一起来看。 JSONP是一个非官方的协议&…