LVS---linux虚拟服务(一)
一、集群cluster
1、集群的产生
为什么需要集群呢?因为一台服务器性能不足,无法满足大量用户的并发访问需求,有两种解决思路。
l 向上扩展
l 向外扩展
所谓的向上扩展就是买更高性能的服务器,比如旧的服务器内存是32G,16核的CPU,我们可以将其替换成更好的服务器,64G的内存,32核的CPU,这就是向上扩展,也叫做纵向扩展。
所谓的向外扩展就是买更多的服务器,多台服务器共同为用户提供服务,这就是集群,买更多的服务器共同为用户提供服务就是向外扩展,也叫做横向扩展。
在实际的生产环境当中,由于成本问题,多使用向外扩展的方式。
2、集群的类型
集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统。
集群分为三个类型:
很多人无法区分负载均衡和高可用,负载均衡并没有提高可用性,比如mysql的主从复制,主数据库负责响应用户的请求,从数据库并没有响应用户的请求,一旦主数据库挂了,从服务器并不能自动顶上,除非我们手工切换,这样没有提高其高可用性,我们可以将高可用性理解为一台主设备挂了,从设备能自动顶上,mysql的评价复制并不能实现这样的效果,但是mysql的主从复制可以将用户的请求合理负载分配,综上所述mysql的主从复制属于负载均衡集群,而不是属于高可用集群。
我们再来看一下上图中提到的那个公式。MTBF指的是正常的时间、MTTR指的是出了故障之后一直到恢复到需要的时间,它们两个加起来就属于所有的时间,然后我们使用“正常的时间”除以“所有的时间”得到的就是”正常时间“所占的值,这个值当然是越大越好。
HPC就不讲了,用到的很少。
3、分布式系统
常见的分布式系统有两种:
- 分布式存储:比如云盘
- 分布式计算:ikuai软路由、hadoop
分布式存储的原理是什么呢?比如我们向百度网盘上传了一个了一个1G的视频,这个视频并不是存储在了一台服务器上,而是将其切割成小的数据块,比如每个数据块是16M大小,将这些数据块存储到不同的服务器上,每一个数据块除了存储在当前的服务器上还有产生一个副本存储其它的服务器,副本可以有多个,这样当一台服务器的存储坏了,也没关系,我们可以加一个新的,然后根据其它服务器上的副本推算出坏的这台服务器上的数据,这就是分布式存储。其实你看,这就工作模式就像是raid差不多,只不过是将磁盘替换成了主机。
4、集群和分布式的区别
分布式每个人完成的工作不一样,是把一个大任务拆解开了,每人完成一部分。
集群结构就是所有人所做的事情都是一样的,把这些人都集合起来就是集群,比如那么多的淘宝服务器,就只是为全球的用户提供买东西的服务,如下图:
后面的三台服务器可能提供的服务是一样的。
二、LVS
1、为什么使用LVS?
上面我们介绍了集群的产生,集群产生的原因就是横向扩展,但这时面临一个问题?那么多的服务器同时提供服务器,那么用户在访问的时候到底访问的是哪一台服务器?如果所有的用户都访问的是一台服务器,那么集群不就白做了吗?如果用户的并发请求是平均分发的,谁来完成这个工作呢?又是如何完成负载的工作呢?
好了,接下来要出场就是负载均衡技术,负载均衡设备负责分发用户的请求。
负载均衡这个概念在IT领域里面非常的常见,有软件,比如nginx,LVS,还有专门的软硬一体设备,比如F5的负载均衡设备,那么它是如何完成分发用户的请求呢?
当F5收到大量的用户请求之后,根据用户定义好的负载算法,将用户的请求进行分配,算法分好多种,比如平均算法、加权算法等等吧,不一定是平均分配的,比如是可以根据服务器的忙碌程度、服务器的性能等等指标进行负载,F5是专门的负载均衡设备,在分发用户请求方面做的非常出色。唯一的缺点就是贵、贵 、贵 、贵!一台F5大概在几十万左右!而且你只买一台吗?不行呀!负载均衡设备非常的重要,服务器坏了之后F5会主动发现,就算不主动发现我们也可以手工向将某台服务器标识成down状态,这样F5就不会将用户请求分发到这个服务器上了,这样并不耽误用户的访问,但是,但是,如果F5坏了呢!!!!这就存在了单点故障,所以如果买F5的话,一般要买两台, 两台设备之间可以负载,也可以主从,这样的高端设备是自带高可用功能的,这样坏一台不耽误用户的访问。除非比较有钱的公司,一般公司是不愿意花个上百万买这玩意的,F5是软硬一体的,所以他很贵,其实有开源的负载均衡软件,我们可以通过将软件部署在普通服务器上, 这样也能实现负载均衡的效果,普通服务器的价格比F5是要便宜很多,但是普通的服务器本身并不带有高可用功能,怎么办呢?我们就要通过高可用技术来实现,搭配LVS的高可用技术就是keeplive,它们是天生一对,keeplive是如何实现的呢?其实也应该猜出来了,VRRP,VRRP就不说了,太熟悉了。
负载均衡软件有:LVS,nginx,haproxy,我们在这里面着重讲解一下LVS。
LVS是国人开发出来的,由于其非常的优秀,被红帽收录到内核当中,收集到内核当中意味着我们不用额外再安装软件。
LVS是全称是linux virtual server(linux 虚拟服务),它通常是这么部署的:
LVS服务器的外部接口通常是一个公网地址,在DNS做域名的IP指向时,指向的地址就是这个接口,而内部接口用到IP就可以是私网地址,如果非要用公网地址也没问题。
2、LVS术语
VS:指的就是LVS服务器,LVS服务器又叫做调度器,其实调度器这个称呼更显得贴切,此外它还有几个名字,virtual server、director server(DS)、dispatcher(调度器)、load,balancer(负载均衡器)。
RS:指的就是真实的服务器,real server、upstram server(上游服务器nginx的叫法)、backend server(后端服务器haproxy的叫法)
CIP:client ip
VIP:VS的外网口IP
DIP:VS的内网接口IP
RIP:real server ip
访问流程:
CIP-----VIP-----DIP----RIP
3、LVS架构
LVS的架构与iptables的架构有些相似。
iptalbe其实是一个规则的编辑工具,用来管理规则的,真正工作的是其实是内核当中net-filter框架当中的五个勾子函数。
LVS也有自己的规则编辑工具,叫ipvsadm,用于管理集群服务和真实服务器,相当于iptalbes命令。然后真正工作的是其实是ipvs,ipvs是工作于内核空间netfilter的INPUT钩子上的框架。
想一下,为什么要放置在INPUT勾子函数那里呢?
我们知道只有目标IP是本服务器的连接才会经过INPUT函数,而用户访问的时候访问的目的IP就是VIP,按理说这个连接会经过INPUT勾子函数,但是LVS服务器并不提供任何服务呀!它是负责分发用户请求,所以我们将LVS框架放到INPUT链的前面,pre-routing后面,目的为了强行改变数据的流向,将原本流经INPUT链的数据改向POST-ROUTING链上,如下图所示:
4、LVS集群的类型
LVS类似其于工作的协议划分的话分为以下两种:
传输层,传输层改变的就是端口,LVS、nginx、haproxy都支持
应用层,只针对特定的协议,http(nginx、httpd、haproxy)、fastcgi(nginx,httpd)、mysql(mysql-proxy)
LVS集群类型分为四种,其实使用最广泛的就LVS-DR类型,其次是LVS-NAT类型,这两种是最常用同的类型,余下的两种我们知道即可。
- LVS-NAT:修改请求报文的目标IP,多目标IP的DNAT。
- LVS-DR:操纵封装新的MAC地址
- LVS-TUN:在原请求IP报文这外新加一个IP首部
- LVS-FULLNAT:修改请求报文的源和目标IP
我们先来讲LVS-NAT:
实际上就是利用了目标NAT转换技术来实现的,将客户端报文的目的IP转换成RS服务器的IP,我们来举一个例子吧!
5、关于会话保持
LVS可以实现连接分发,但是这里面有一个问题。一个用户访问网站时登录了,LVS将其连接分发到RS1服务器上,然后用户刷新了一下浏览器,你说LVS会不会让其连接还是分发到RS1上的呢?如果没有将其分发到RS1的话,那么用户又要重新登录了!用户烦死了!!我们平时通过浏览器访问腾讯视频的时候,登录状态是一直保持着的,它是怎么实现的呢?
第一种办法:同一个用户调度到固定的服务器。
我们可以在LVS上这样设置,将源IP相同的客户端连接定向到同一台真实服务器,可以,这个方法没有问题。
真的没有问题呢?不见得,假如说客户端那边用的是NAT呢?那么多用户的是就是一个源IP,全部定向到RS1服务器上的话,RS1服务器也受不了呀!所以这个方法是不靠谱的,那么应该怎么做才好呢?用cookie,没错,cookie是唯一的,根据cookie进行区分才是真正的好办法!
第二种办法:所有的RS共享所有的会话
怎么共享呢?通过文件服务,如果会话特别多的话,就会占用很多的磁盘空间和带宽了
第三种办法:专门的会话服务器,将所有的会话都保存到一台专门的会话服务器上。
这个专门的会话服务器,比如memcached、redis,这样的会话服务器就很重要了,为了防止单点故障,最好还是要有备份。
三、负载均衡技术概览
1、最早是基于DNS的负载均衡
DNS的负载均衡其实就是一个域名对应多个IP地址,不同的用户访问同一个域名会返回不同的IP地址,最早的DNS负载均衡就是这么实现的,是静态负载均衡的一种。
优点:我们不用搭建DNS服务器,租用就好了。
缺点:更新速度慢,不能立刻生效;服务器的性能DNS无法得知,无法根据服务器的性能来设置权重。
2、反向代理负载均衡
普通的代理是客户使用代理访问多个WEB服务器, 而这种代理是多个客户使用它访问内部 WEB服务器,因此也被称为反向代理模式。
优点:极大的提高静态界面的访问速度;由于外部服务器不会直接访问到服务器,因此比较安全。
缺点:针对每一次代理,代理服务器必须打开对外和对内两个连接,当连接请求大到一定程度,反向代理服务器容易成为服务瓶颈。
3、基于NAT的负载均衡技术
可用软件和可用硬件实现
最常用的软件是LVS
最常用的硬件就是F5,能够实现负载均衡的硬件又被称为四层交换机,由于其硬件是特殊定制的,因此效率非常好。
LVS不多做介绍了,这一节介绍的LVS就是典型的NAT负载均衡。
优先:灵活方便,功能全面强大
缺点:由于进出数据都要通过负载均衡设备,因此负载均衡器容易成为性能瓶颈。
4、扩展的负载均衡技术
针对NAT负载均衡的缺点,又出现了扩展的负载均衡技术。
目前LVS也支持扩展的负载均衡,其实就是DR模式,来回的路径不一致,减轻负载均衡设备压力。
四、服务器容错技术
服务器容错技术是指在服务器硬件或软件出现故障时,仍能完成处理和运算,不降低系统性能,即用冗余的资源使计算机具有容忍故障的能力,可以通过硬件或软件的方式来实现。
服务器软件容错多采用多处理器或者特别设计的具有容错的操作系统来实现,这样的方法主要提供以检查点为恢复基础的恢复机能。具体的实现方法是,是每个运行中的进程都在另一个处理机上具有完全相同,但是不活动的后备进程,当运行中的进程发生了不能恢复的错误时,操作系统将发现这一错误并启用后备进程替换,后备进程从最后一个检查点开始恢复计算。
硬件容错系统应该那就双CPU、内存、通信子系统、磁盘、电源等,确保坏了一个,另一个能自动顶上;而且具有自动故障检测部件、故障隔离部件。
目前服务器的容错技术有三种:集群、双机热备、单机容错
集群不做介绍了,主要看一下双机热备和单机容错是怎么回事?
系统层面之上的东西,包括系统和软件是安装在两台或者两上以上的服务器上,数据放置在独立的磁盘阵列上,两台服务器通过vrrp相互监测,一台坏了,另一台自动顶上。
集群需要多台服务器,双机热备需要两台一模一样的设备,而且故障切换都要有一定的时间,都有局限性,所以又有了单机容错。
单机容错是真正的硬件冗余,关键部分都是两个,一个部件出了问题,另一个部件能够立马顶上,速度非常之快,这才是真正意义上的容错,缺点就是成本较高。
双机热备技术与单机容错技术在适用环境上的不同主要是两者能够实现的可用性的差异决定的,一般,双机热备可以实现99.9%的可用性,而容错服务器可以实现高达99.999%的可用性。因此,从可用性数据来看,双机热备技术大多适用于对于业务连续性要求不是很严格的环境中,如政府,教育以及个别的制造企业中,这些行业对业务的连续性不是那么高。而对于证券、银行对业务的连续性要求非常之高,常采用单机冗余的方式。
LVS---linux虚拟服务(一)的更多相关文章
- LVS (Linux虚拟服务器)-不同的负载均衡方法
随着Internet用户的增长,基于Web的公司处理的通信量急剧增加.有各种解决方案来应对这种不断增长的流量. 一种解决方案是垂直扩展服务器(即:简单地向服务器添加更多的CPU和内存资源.)当然在一定 ...
- 【Linux】虚拟服务器之LVS
写在前面 觉得甚是幸运,能够有机会参与到ITOO配置环境的工作中去.现在正在熟悉,在搭建环境的时候,有LVS安装配置教程,对这一块有些懵逼,这几天查了一些资料,写在这里,和大家分享一下 是什么 LVS ...
- Linux虚拟服务器--LVS
LVS 百科名片 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是L ...
- LVS (Linux虚拟服务器)模型及算法
LVS(Linux Virtual Server)Linux虚拟服务器 LVS集群采用IP负载均衡技术和基于内容请求分发技术. 用户请求发给负载均衡调度器,由负载均衡调度器根据设定的调度算法将请求发给 ...
- LVS (Linux Virtual Server) 负载均衡
[大型网站技术实践]初级篇:借助LVS+Keepalived实现负载均衡 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服 ...
- LVS (Linux Virtual Server) - 负载均衡集群 - keepalived
今天稍微了解了LVS 的原理和使用,在网络上找到不少好文章,稍微加以处理并在这里备份: 原理介绍:Linux Virtual Server 关于:http://www.linuxvirtualserv ...
- LVS负载均衡服务
LVS负载均衡服务 LVS负载均衡调度技术是在Linux内核中实现的,因此被称为Linux虚拟服务器.使用LVS时,不能直接配置内核中的ipvs,而需要使用ipvs的管理工具ipvsadm进行管理. ...
- LVS(Linux Virtual Server)
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我国的章文嵩博士的一个开源项目.在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需 ...
- LVS : Linux Virtual Server 负载均衡,集群,高并发,robust
1 LVS : Linux Virtual Server http://www.linuxvirtualserver.org/ http://www.linuxvirtualserver.org/zh ...
随机推荐
- 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结
<面向对象程序设计Java>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...
- Java:String,int相互转化
int转String int a: a + “” String.valueOf(a) Interger.toString(a) 一般使用以上几种方法进行转化 第一种方法效率不好,ja ...
- 【oracle】INSERT INTO SELECT
- 【未完成】【oracle】存储过程按日期循环
............. DECLARE V_IMPORT_DATE DATE; V_BUSI_DATE DATE; OUT_RET NUMBER; - ...
- css3之水波效果
这些效果可谓多种多样,当然用canvas.svg也都能实现奈何对这些有不熟悉(尴尬),不过咱们用css来写貌似也没想象中的那么难吧. 一 悬浮球水波效果 效果图 css .container { w ...
- Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) G. Polygons 数论
G. Polygons Description You are given two integers
- docker Dockerfile实战
目录 Dockerfile实战 基础pm2 Dockerfile keymetrics/pm2:8-alpine keymetrics/pm2:12-alpine pm2 node Dockerfil ...
- 实现ElementUI Dialog宽度响应式变化
在ElementUI的Dialog中,需要实现其宽度随浏览器宽度变化而变化,并设定默认值,当浏览器宽度大于该值时,Dialog保持该宽度,小于该值时,使用100%宽度. 代码使用 window.onr ...
- (二十七)golang-排序和查找
排序:将一组数据,依据指定的顺序进行排列 (1)内部排序:将数据加载在内存中进行排序: 交换排序(冒泡排序,快速排序)冒泡排序实现: 快速排序实现 (2)外部排序:数据量过大,无法全部加载到内存中,需 ...
- golang基础之工程结构
Golang 工作空间 编译工具对源码目录有严格要求,每个工作空间 (workspace) 必须由 bin.pkg.src 三个目录组成. workspace | +--- bin // go ins ...