LVS 是一个开源的软件,可以实现LINUX平台下的简单负载均衡。首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
IPVS是LVS集群系统的核心软件,它的主要作用是:
|
IPVS的负载均衡机制有三种,这里使用IP Tunneling机制:
|
IPVS的负载调度算法有十种:
- 轮叫(Round Robin)
- 加权轮叫(Weighted Round Robin)
- 最少链接(Least Connections)
- 加权最少链接(Weighted Least Connections)
- 基于局部性的最少链接(Locality-Based Least Connections)
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
- 目标地址散列(Destination Hashing )
- 源地址散列(Source Hashing)
- 最短期望延迟(Shortest Expected Delay)
- 无须队列等待(Never Queue)
为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍一下:
1,virtual-service-address:是指虚拟服务器的ip 地址
2,real-service-address:是指真实服务器的ip 地址
3,scheduler:调度方法
(lna@networksbase.com 翻译 ipvsadm v1.21 2004 年4 月)
ipvsadm 的用法和格式如下:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p
[timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port
[-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h
命令选项解释:
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可
以。
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也
就是增加一台新的虚拟服务器。
-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则
-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器
记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l --list 显示内核虚拟服务器表
-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
--start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说
明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的
VRRP 功能。
--stop-daemon 停止同步守护进程
-h --help 显示帮助信息
其他的选项:
-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
[vip:port] or [real-server-ip:port]
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务
[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s --scheduler scheduler 使用的调度算法,有这样几个选项
rr轮叫调度(Round-Robin Scheduling)|wrr加权轮叫调度(Weighted Round-Robin Scheduling)|lc最小连接调度(Least-Connection Scheduling)|wlc加权最小连接调度(Weighted Least-Connection Scheduling)|lblc基于局部性的最少链接(Locality-Based Least Connections Scheduling)|lblcr带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)|dh目标地址散列调度(Destination Hashing Scheduling)|sh8.源地址散列调度(Source Hashing Scheduling))|sed|nq,
默认的调度算法是: wlc.
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客
户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真实的服务器[Real-Server:port]
-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
-i --ipip 指定LVS 的工作模式为隧道模式
-m --masquerading 指定LVS 的工作模式为NAT 模式
-w --weight weight 真实服务器的权值
--mcast-interface interface 指定组播的同步接口
-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c
--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon 显示同步守护进程状态
--stats 显示统计信息
--rate 显示速率信息
--sort 对虚拟服务器和真实服务器排序输出
--numeric -n 输出IP 地址和端口的数字形式
一、lvs的优势:
1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的 lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和 cpu方面基本无消耗。
2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。
3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。
4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。
5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。
另:lvs也不是完全能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以,用lvs也得多多当心为妙。
二、nginx和lvs作对比的结果
1、nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以 nginx单凭这点可利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,所以经常要去触碰触碰,由lvs的第2条优点 看,触碰多了,人为出问题的几率也就会大。
2、nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的 节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。另 外注意,lvs需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。
3、nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间了,因为同上所述,lvs对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。
4、nginx也同样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的;nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。
5、nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前lvs中 ldirectd也能支持针对服务器内部的情况来监控,但lvs的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚 好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能 会因此而恼火。
6、nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大 量内存而不能释放,使用多一个nginx做apache代理的话,这些窄带链接会被nginx挡住,apache上就不会堆积过多的请求,这样就减少了相 当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。lvs没有这些功能,也就无法能 比较。
7、nginx能支持http和email(email的功能估计比较少人用),lvs所支持的应用在这点上会比nginx更多。
在使用上,一般最前端所采取的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。
重要的ip地址,最好交由lvs托管,比如数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。
nginx可作为lvs节点机器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所逊色于nginx。
nginx也可作为中层代理使用,这一层面nginx基本上无对手,唯一可以撼动nginx的就只有lighttpd了,不过lighttpd目前还没有 能做到nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和lvs是最完美的方案了。
现在网络中常见的的负载均衡主要分为两种:一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,也有类似于LVS、Nginx、HAproxy的基于Linux的开源的负载均衡策略,
商用负载均衡里面NetScaler从效果上比F5的效率上更高。对于负载均衡器来说,不过商用负载均衡由于可以建立在四~七层协议之上,因此适用 面更广所以有其不可替代性,他的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用。
另一种负载均衡的方式是通过软件:比较常见的有LVS、Nginx、HAproxy等,其中LVS是建立在四层协议上面的,而另外Nginx和HAproxy是建立在七层协议之上的,下面分别介绍关于
LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
LVS的特点是:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生;
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
3、工作稳定,自身有完整的双机热备方案;
4、无流量,保证了均衡器IO的性能不会收到大流量的影响;
5、应用范围比较广,可以对所有应用做负载均衡;
6、LVS需要向IDC多申请一个IP来做Visual IP,因此需要一定的网络知识,所以对操作人的要求比较高。
Nginx的特点是:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx能支持http和Email,这样就在适用范围上面小很多;
8、不支持Session的保持、对Big request header的支持不是很好,另外默认的只有Round-robin和IP-hash两种负载均衡算法。
HAProxy的特点是:
1、HAProxy是工作在网络7层之上。
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
相关推荐
同时,实验还涉及了TCP/IP网络配置和Linux操作系统管理的基础知识,有助于提升网络工程专业学生的实践技能和理论知识。此外,实验中提到的iSCSI存储技术是网络存储的一种重要协议,允许存储设备通过IP网络进行数据...
【搭建LVS集群实战负载均衡】的随堂笔记主要涵盖了LVS集群的理论知识和实际操作步骤,旨在帮助读者从零开始快速构建LVS负载均衡集群。以下是详细的知识点解析: 1. **LVS集群概述**: - 集群是一种由多台计算机...
下面我们将深入探讨这些重要的PCB设计理论知识。 1. **PCB设计基础**: - **布局规划**:设计前需考虑电路功能、元件尺寸和散热需求,合理布局以优化信号路径,减少干扰。 - **层叠结构**:理解多层板的结构,如...
### LVS基本概念及要诀解析 #### 一、核心概念与架构 LVS,即Linux Virtual Server,...以上是对LVS基本概念及要诀的深入解读,旨在帮助读者全面理解LVS的工作原理和实践技巧,为构建高效稳定的LVS集群提供理论指导。
- MySQL分区理论与实验:介绍MySQL的分区技术,包括范围分区、列表分区、哈希分区等,以及如何在实际环境中进行分区实验。 第5章:MySQL性能优化 涵盖MySQL的基础操作、SQL语句优化和索引优化,旨在提升数据库的...
实习者在9个月的时间里,通过学习和实践,将理论知识转化为实际技能,为未来职业生涯奠定了坚实基础。实习岗位是集成电路版图设计工程师,这是一个涉及到半导体物理、固体物理等多个复杂领域的专业职位。 【实习...
【标题】"Linux基础课件逻辑卷基本概念共10页.pdf" 提供了一个学习Linux基础知识的焦点,特别是关于逻辑卷这一主题。逻辑卷管理器(Logical Volume ...通过实践操作,如创建LV、调整大小和挂载,将有助于巩固理论知识。
5. **大型网站优化实践**:除了理论知识,本教程还将结合实际案例,演示如何在大型网站环境中应用上述技术,解决实际问题。这包括性能监控、压力测试、问题排查和应急响应等环节,提升开发者在复杂环境下的实战能力...
理论知识考试与技能操作考核是鉴定的主要方式,其中技能操作考核尤为重要,它检验了设计师的实际操作能力和问题解决技巧。每个等级的考核时间也有所不同,从90分钟到120分钟,确保了评估的全面性和准确性。 #### ...
9. **实战应用与案例分析**:教程中可能包含实际的设计案例,帮助学生理解理论知识在实际设计中的应用,提升解决实际问题的能力。 10. **优化与调试技巧**:了解如何通过Allegro的高级特性进行设计优化,以及在遇到...
通过以上解析可以看出,本次竞赛不仅考验了参赛者的理论知识掌握程度,还着重考察了其实操能力和对集成电路设计、FPGA编程、工艺仿真等方面的实际应用能力。参赛者需要具备扎实的基础理论知识,同时还需要熟练掌握...
8. **源码分析**:提供的源码应包含了上述功能的实现,你可以逐行阅读理解代码逻辑,学习如何将理论知识应用到实际项目中。 通过学习和实践这个仿QQ主界面的案例,你不仅可以掌握ListCtrl的使用,还能提升对Windows...
8. **案例分析**:通过实际的设计案例,学习者可以将理论知识应用到实践中,这有助于加深对Cadence工具的理解和掌握。 在学习这个教程的过程中,建议按照以下步骤进行: 1. 阅读基础理论知识,了解IC设计的基本概念...
版图设计是一项综合了理论知识、工艺理解和技术技能的复杂任务,设计师需要具备电路原理、工艺技术以及艺术性的布局技巧,才能创建出高效、可靠的集成电路版图。通过不断学习和实践,设计师能够掌握这个领域的精髓,...
理解并掌握集成电路版图layout设计不仅需要理论知识,还需要实践经验。通过实例学习和实践,可以更好地理解和应用设计原则,为未来在IC设计领域的工作打下坚实基础。对于想要从事这一领域的人来说,这些都是非常宝贵...
论文首先对论文的选题背景和意义进行了介绍,然后对集群、负载均衡、LVS 模式和调度算法等理论进行了阐述,接着介绍了基于 Linux 的负载均衡系统的设计和实现,最后对系统进行了功能测试。 知识点: 1. 云计算和...
学习Cadence布局知识不仅需要理论基础,更需要大量实践。通过完成实际项目,逐步掌握工具的使用技巧,理解布局设计对电路性能的影响。同时,及时关注行业动态,了解新的设计规则和工艺技术,以保持设计的先进性。 ...
Linux集群大全是一个深入探讨Linux集群技术的资源集合,旨在帮助用户构建高可用性和高性能的分布式系统。...记住,实践是检验理论的最好方式,因此在理论学习后,亲手搭建和操作集群系统将大大加深理解和技能掌握。
集成电路设计是电子工程领域中的核心部分,涉及到许多复杂的理论和技术。以下是对题目中涉及的一些知识点的详细说明: 1. 集成电路成本主要由晶圆成本、封装成本、测试成本、研发成本和知识产权费等构成。 2. CMOS...