为您找到与网络负载均衡的几种方式相关的共200个结果:
欢迎大家来到读文网,小编为大家揭开CDN的神秘面纱,欢迎大家阅读。
CDN 是一个经策略性部署的整体系统.能够帮助用户解决分布式存储.负载均衡.网络请求的重定向和内容管理等问题.其目的是通过在现有的 Internet 中增加一层新的网络架构.将网站的内容发布到最接近用户的网络" 边缘 ".使用户可以就近取得所需的内容.解决 Internet 网络拥塞状况.提高用户访问网站的响应速度.从技术上全面解决由于网络带宽小.用户访问量大.网点分布不均等原因.解决用户访问网站的响应速度慢的根本原因.
CDN是个很庞大的概念和体系.全世界CDN服务提供商屈指可数.
我们熟悉的Google就是某CND的最大客户.我们今天只选取其中一小部分来讨论.
说了半天.看上去似乎很复杂.鉴于经典的大多是搞WEB的.接触的最多的是WEB服务器/数据库等.既然是浅谈.我就举个简单的例子.
比如你弄一网站.假设你有能力购买2台服务器.作为WEB服务.暂时我们认为服务器本身不存在性能问题.一台托管在北方的网通机房.一台托管在南方的电信机房.2台服务器内容互为同步.则通过智能的DNS解析设备.将网通的用户定位到北方网通的服务器上.将电信的用户定位到南方电信的服务器上.这.就是最基础的CDN.我的理解是 --- 广域网的负载均衡.
2台服务器放置问题我不想多谈.有钱就行.2台服务器内容同步的方式很多.我也不想多谈.今天主要是要谈一下.如何实现让网通的用户去访问放置在网通的服务器.电信的用户去访问放置在电信的服务器.
即如今很多服务提供商所谓的智能DNS解析.也就是互联网链路的负载均衡.
(提问) 我们访问一个域名.比如 www.quduwen.com. 谁知道实际的访问过程是怎么样的?
(奖励) 谁知道的给100G.一组大棱光.一个源生虚空?没人知道吗?那不怪我了!
......
电信/网通.2条链路的负载均衡.我们先来谈谈这个.因为这个是访问者最直观的体验.
既然CDN的目的是为了提高用户访问网站的响应速度.最直接的方法就是做互联网链路的智能导向.
当然.CDN也涉及多台服务器负载均衡.应用的负载均衡.包括中间件的应用负载均衡.因为时间关系暂且不表.
当我们将 www.quduwen.com 输入IE地址栏敲回车后.首先要去你的Local DNS做解析.什么是Local DNS?就是你本机网卡所设置的DNS服务器.比如我的是: 202.96.128.68.如果Local DNS没有 www.Bluieidea.com 的Cache记录.则Local DNS会询问上级DNS服务器.注意.DNS的查询结构是树状的.最后查询的DNS为root.即为root DNS.或者称为根DNS.根DNS在全世界只有13台.中国境内没有.当root DNS接受到请求后.通过查询获得的结果一般是: quduwen.com这个域的解析服务器为ns1.chinadns.com.要求你去询问ns1.chinadns.com去做解析.ns1.chinadns.com是哪里来的?当然是你申请注册域名的机构自己的DNS服务器.也就是你quduwen.com这个域名的隶属DNS.隶属DNS获得了你域名解析的请求.则查询A记录.返回quduwen.com的IP地址给最初的PC Client端.完成了一次域名解析为IP地址的全部过程.
虽然很绕.但是如果能搞明白.那才能理解下面的关于智能DNS的技术原理.
上述DNS查询的常规流程.基本上就是如下图:
PC -> Local DNS -> Root DNS -> ns1.chinadns.com -> IP -> 返回给PC
智能DNS的工作原理即是在ns1.chinadns.com这一步.工作流程如下:
PC -> Local DNS -> Root DNS -> 智能DNS解析 -> 返回IP地址 -> 返回给PC
注意.上述的"返回IP地址"这一步.其实是根据PC的来源.智能的返回电信或者网通的IP地址.即如果请求解析的PC是电信线路的.则返回托管在南方电信机房的服务器的电信IP地址.反之.则返回托管在北方网通机房的网通的IP地址.
看到这里.出现了一个问题.如何判断这个请求DNS的PC.他是电信线路还是网通线路呢?
有2个方法.一个聪明的.一个笨的.我们先说笨的方法.如果智能DNS有一张庞大的IP地址分配表.表里面有所有的电信IP地址段和所有的网通地址段.则可以通过查询这个IP地址表来判断.请求的PC是属于哪个线路上的.这个方法是最直接.最高效.最稳妥的方法.虽然的确是笨了点.但是请各位注意.往往笨的方法就代表着稳定.代表着高可用性.所以.我很遗憾的告诉大家.基本上银行.证券.金融.这些重要部门.都是使用的这种笨的方法.
另外一个聪明的方法.则是通过智能的动态检测的方法.在智能DNS解析设备接受到PC的DNS请求的时候.将使用电信/网通的2条线路分别发送一个探测包.发送目标可以为目标PC的IP地址.不过更多的发送目标为Local DNS.这个包可能是ICMP的PING包.也可能是反向DNS查询的DNS包(TCP 53).当2个包有回应后.比较2个包的时间戳.延迟小的.则判定为优先解析的链路.
说到这里.基本上把智能DNS解析的工作原理简单的介绍了一下.当然.实际环境中会有更复杂.更多方法更多手段来实现.我写这篇小文的目的.一来分享一下.二来混点威望.仅此而已.
CDN很庞大.我认为此文主要是探讨其中的一部分.即互联网链路的负载均衡.也就是业内称为: 广域网的全球负载均衡和应用交付网络.
浏览量:2
下载量:0
时间:
欢迎来到读文网,本文为大家带来广域网(服务器)链路负载均衡是什么,希望能帮助到你。
CDN 是一个经策略性部署的整体系统.能够帮助用户解决分布式存储.负载均衡.网络请求的重定向和内容管理等问题.其目的是通过在现有的 Internet 中增加一层新的网络架构.将网站的内容发布到最接近用户的网络" 边缘 ".使用户可以就近取得所需的内容.解决 Internet 网络拥塞状况.提高用户访问网站的响应速度.从技术上全面解决由于网络带宽小.用户访问量大.网点分布不均等原因.解决用户访问网站的响应速度慢的根本原因.
CDN是个很庞大的概念和体系.全世界CDN服务提供商屈指可数.
我们熟悉的Google就是某CND的最大客户.我们今天只选取其中一小部分来讨论.
说了半天.看上去似乎很复杂.鉴于经典的大多是搞WEB的.接触的最多的是WEB服务器/数据库等.既然是浅谈.我就举个简单的例子.
比如你弄一网站.假设你有能力购买2台服务器.作为WEB服务.暂时我们认为服务器本身不存在性能问题.一台托管在北方的网通机房.一台托管在南方的电信机房.2台服务器内容互为同步.则通过智能的DNS解析设备.将网通的用户定位到北方网通的服务器上.将电信的用户定位到南方电信的服务器上.这.就是最基础的CDN.我的理解是 --- 广域网的负载均衡.
2台服务器放置问题我不想多谈.有钱就行.2台服务器内容同步的方式很多.我也不想多谈.今天主要是要谈一下.如何实现让网通的用户去访问放置在网通的服务器.电信的用户去访问放置在电信的服务器.
即如今很多服务提供商所谓的智能DNS解析.也就是互联网链路的负载均衡.
(提问) 我们访问一个域名.比如 www.Blueidea.com. 谁知道实际的访问过程是怎么样的?
(奖励) 谁知道的给100G.一组大棱光.一个源生虚空?没人知道吗?那不怪我了!
......
电信/网通.2条链路的负载均衡.我们先来谈谈这个.因为这个是访问者最直观的体验.
既然CDN的目的是为了提高用户访问网站的响应速度.最直接的方法就是做互联网链路的智能导向.
当然.CDN也涉及多台服务器负载均衡.应用的负载均衡.包括中间件的应用负载均衡.因为时间关系暂且不表.
当我们将 www.Blueidea.com 输入IE地址栏敲回车后.首先要去你的Local DNS做解析.什么是Local DNS?就是你本机网卡所设置的DNS服务器.比如我的是: 202.96.128.68.如果Local DNS没有 www.Bluieidea.com 的Cache记录.则Local DNS会询问上级DNS服务器.注意.DNS的查询结构是树状的.最后查询的DNS为root.即为root DNS.或者称为根DNS.根DNS在全世界只有13台.中国境内没有.当root DNS接受到请求后.通过查询获得的结果一般是: Blueidea.com这个域的解析服务器为ns1.chinadns.com.要求你去询问ns1.chinadns.com去做解析.ns1.chinadns.com是哪里来的?当然是你申请注册域名的机构自己的DNS服务器.也就是你Blueidea.com这个域名的隶属DNS.隶属DNS获得了你域名解析的请求.则查询A记录.返回Blueidea.com的IP地址给最初的PC Client端.完成了一次域名解析为IP地址的全部过程.
虽然很绕.但是如果能搞明白.那才能理解下面的关于智能DNS的技术原理.
上述DNS查询的常规流程.基本上就是如下图:
PC -> Local DNS -> Root DNS -> ns1.chinadns.com -> IP -> 返回给PC
智能DNS的工作原理即是在ns1.chinadns.com这一步.工作流程如下:
PC -> Local DNS -> Root DNS -> 智能DNS解析 -> 返回IP地址 -> 返回给PC
注意.上述的"返回IP地址"这一步.其实是根据PC的来源.智能的返回电信或者网通的IP地址.即如果请求解析的PC是电信线路的.则返回托管在南方电信机房的服务器的电信IP地址.反之.则返回托管在北方网通机房的网通的IP地址.
看到这里.出现了一个问题.如何判断这个请求DNS的PC.他是电信线路还是网通线路呢?
有2个方法.一个聪明的.一个笨的.我们先说笨的方法.如果智能DNS有一张庞大的IP地址分配表.表里面有所有的电信IP地址段和所有的网通地址段.则可以通过查询这个IP地址表来判断.请求的PC是属于哪个线路上的.这个方法是最直接.最高效.最稳妥的方法.虽然的确是笨了点.但是请各位注意.往往笨的方法就代表着稳定.代表着高可用性.所以.我很遗憾的告诉大家.基本上银行.证券.金融.这些重要部门.都是使用的这种笨的方法.
另外一个聪明的方法.则是通过智能的动态检测的方法.在智能DNS解析设备接受到PC的DNS请求的时候.将使用电信/网通的2条线路分别发送一个探测包.发送目标可以为目标PC的IP地址.不过更多的发送目标为Local DNS.这个包可能是ICMP的PING包.也可能是反向DNS查询的DNS包(TCP 53).当2个包有回应后.比较2个包的时间戳.延迟小的.则判定为优先解析的链路.
说到这里.基本上把智能DNS解析的工作原理简单的介绍了一下.当然.实际环境中会有更复杂.更多方法更多手段来实现.我写这篇小文的目的.一来分享一下.二来混点威望.仅此而已.
CDN很庞大.我认为此文主要是探讨其中的一部分.即互联网链路的负载均衡.也就是业内称为: 广域网的全球负载均衡和应用交付网络.
浏览量:2
下载量:0
时间:
CISCO路由器是世界领先的产品,其路由器的功能也有所不同,特别是的配置,那么你知道CISCO路由器的配置有哪几种方式吗?下面读文网小编收集了一些CISCO路由器配置的相关资料。希望能够帮助你。
首先是要理解远程拨号和站点到站点的区分,远程拨号,基本上不需要怎样配置,
有1个客户端要安全,在客户端内部已集成了大量的加密、验证、算法。
用户只要在客户端配置1个远程拨号的物理拨号地址就能够了。
拨号软件会到端去协商加密方式,如果协商成功,远端服务器会推送1个IP地址给客户端,
客户端默许的所有流量都走这个虚拟的IP,进过这个虚拟的IP就会加密。
注意远程拨号是单台装备和中心网络之间的连接方式,工作主要在中心服务器上做,
固然也离不开路由器和交换机装备的支持。
可以给客户端推送很多网络配置,生成1个虚拟的网卡来接收这些配置,
(有些其他厂商的产品,远程拨号也会产生虚拟网卡);站点到站点的主要利用到1个分支机构和中心的连接,
两端都是1个网段,他们之间通常会通过配置来加密的跑动态路由协议,
主要是利用在网络和网络之间的连接。
网络的拓扑很简单:第1步是安装XP的客户端产品,接下来配置中心站点的服务器,
第1阶段和基础配置相同,注意要用group2;第1点5阶段重要的是要配置aaa,
要让aaa帮助推送pool和用户名密码认证。然后做1个isakmpprofile来关联第1阶段和1.5阶段的配置。
然后做第2阶段的工作,和基础的路由器配置方法是1样的。
建1个动态的map,匹配上第2阶段转换集合isakmpprofile。配置1个静态map,
利用这个动态map,然后把静态map利用到接口上。
R1路由器上连通性配置
R1(config)#interface e0
R1(config-if)#ip address 10.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config)#interface e1
R1(config-if)#ip address 1.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.2
R2路由器上连通性配置
R2(config)#interface e0
R2(config-if)#ip address 1.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config)#interface e1
R2(config-if)#ip address 2.2.2.2 255.255.255.0
R2(config-if)#no shutdown
R2(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.1
R1路由器IpSec配置
R1(config)#crypto isakmp enable (optional)默认启用
R1路由器IpSec isakmp 配置(阶段一的策略)
R1(config)#crypto isakmp policy 10
R1(config-isakmp)#hash md5
R1(config-isakmp)#authentication pre-shared
R1(config-isakmp)#encryption 3des
R1(config-isakmp)#group 2
R1路由器Pre-Share认证配置
R1(config)#crypto isakmp key cisco address 10.1.1.2
R1路由器IpSec变换集配置(阶段二的策略)
R1(config)#crypto ipsec transform-set cisco esp-3des esp-md5-hmac R1 (cfg-crypto-trans)#mode tunnel
R1路由器加密图的配置
R1(config)#crypto map cisco10 ipsec-isakmp
R1(config-crypto-map)#set peer 10.1.1.2
R1(config-crypto-map)#set transform-set cisco
R1(config-crypto-map)#match address 101
R1路由器定义感兴趣流量
R1(config)#access-list 101 permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255 R1路由器加密图绑定到接口
R1(config)#interface e0
R1(config-if)#crypto map cisco
4、R2路由器IpSec配置
R2(config)#crypto isakmp enable (optional)默认启用
R2路由器IpSec isakmp 配置(阶段一的策略)
R2(config)#crypto isakmp policy 10
R2(config-isakmp)#hash md5
R2(config-isakmp)#authentication pre-share
R2(config-isakmp)#encryption 3des
R2(config-isakmp)#group 2
R2路由器Pre-Share认证配置
R2(config)#crypto isakmp key cisco address 10.1.1.1
R2路由器IpSec变换集配置(阶段二的策略)
R2(config)#crypto ipsec transform-set cisco esp-3des esp-md5-hmac
R2(cfg-crypto-trans)#mode tunnel
R2路由器加密图的配置
R2(config)#crypto map cisco 10 ipsec-isakmp
R2(config-crypto-map)#set peer 10.1.1.1
R2(config-crypto-map)#set transform-set cisco
R2(config-crypto-map)#match address 101
R2路由器定义感兴趣流量
R2(config)#access-list 101 permit ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255
R2路由器加密图绑定到接口
R2(config)#interface e0
R2(config-if)#crypto map cisco
CISCO路由器的配置有哪几种方式的相关
浏览量:3
下载量:0
时间:
负载均衡,这是在计算机网络技术应用中的一种比较关键的技术。其最大的作用就是使网络设备和服务器的带宽的拓展方法更加透明而有效,可以更加灵活的处理网络数据,使得网络的可用性进一步提高。
那么在众多的负载均衡品牌中,那些品牌是最值得信赖的呢?下面,读文网小编为朋友们推荐一些吧。
推荐一:信诺瑞得
信诺瑞得这一品牌的负载均衡技术与产品是由北京信诺瑞得信息技术有限公司开发的,该公司是我国唯一的一家专注于数据中心的优化与安全解决方案和服务研究与技术开发的企业,目前,信诺瑞得品牌的负载均衡正以同行业中一流的技术与专业的服务,赢得了广大客户与消费者的信赖。
推荐二:弘积
弘积品牌的负载均衡技术与产品是由上海弘积信息科技有限公司开发的,该公司是我国一家在载均衡应用交付的产品研发销售领域具有极大竞争力的企业。值得一提的是,该公司被同行业评为应用交付提供商中的最佳。
推荐三:F5
F5这一品牌的负载均衡技术与产品主要是F5公司开发,该公司总部位于美国,在应用交付网络领域中具有着全球领先地位。F5负载均衡于2000年进驻中国,其最大特点就是安全、快速、可靠、实用。目前,已经可以遭我国境内为各大企业与用户提供了全面的技术支持。必须要说的是,仅仅中国移动公司就已经使用了超过千套的F5负载均衡系统。
推荐四:深信服
深信服品牌的负载均衡技术与产品是由深信服科技有限公司开发的,该公司于2000年成立,自成立初就致力于网络安全与网络产品优化的研究与开发,目前,广告已经成为我国具有领先地位的新网络产品供应商。深信服品牌的负载均衡最大的特点就是具有全网可视性,在性能监控与智能预警方面可靠性极高。
以上四个品牌,是小编为朋友们推荐的在负载均衡领域具有绝对领先优势的品牌。除了这四个品牌之外,像梭子鱼、有旺、Radware等品牌的负载均衡也是可以值得信赖的。
浏览量:2
下载量:0
时间:
最近几年,网络浏览和使用需求的攀升,导致了网站的访问量和数据流量也大幅度的增加,对于网站服务器的计算处理能力提出了更高的要求。单一网站服务器已经无法满足需求,多台计算机建立的网络负载均衡设备成为网络服务器的主流。读文网小编就在这里给大家介绍网络服务器负载均衡的相关知识。
网络负载均衡是将两台或多台计算机建成一个服务器集合,它将服务器的资源重新整理,提高了服务器运行的效率。目前许多中小型网站使用的软件负载均衡技术,就是利用软件程序来配置均衡负载,这样不必去做大量的硬件升级,产生额外较多的花费,在现有资源的基础上,提升数据流量承载能力。
网络服务器负载将用户的任务发送到多台计算机,这种扩展的计算作业能力远远超过了一台服务器,并且这种负载结构还可以纠正可能发生的错误。
尽管计算机工艺和技术不断升级,但是一个计算机服务器的可执行处理能力仍然被限制在每秒钟执行几万到几十万个命令,如果使用多台计算机服务器逻辑架构成一个组合,这样网络服务器每秒钟执行的命令将会更多,甚至达到几百万个。基于这种构想,工程师设计了网络服务器的负载均衡结构。
在网络服务器负载均衡结构中,多台服务器之间是平等的关系,它们可以独立的运行指令而不必依托其他服务器,通过这种流量、指令分担,让用户可以更快速的获得服务,缩短了用户等待信息回复的时间,有效了解决了用户大量和高峰密集访问服务问题。
负载均衡结构提升了计算机服务器和网络设备的运行带宽和数据吞吐量,让网络服务器具有更多的灵活机动性和实用性。目前,负载均衡结构除了用于网络服务器之外,还用于优化防火墙、IP地址转换、网络内部协议支持、反向代理等。
由上可见,网络服务器负载均衡让普通的服务器计算机拥有了更大的处理能力,即使当有服务器信号中断,网络负载均衡机制也可以重新制定其他服务器计算机来完成用户需要的指令并及时给予回馈;在服务器负载过重时,系统也可以轻松应对。
网络服务器的相关
浏览量:3
下载量:0
时间:
现如今,网络的使用已经十分普遍,就连无线网络也开始流行起来,那么关于无线网络大家了解多少呢。比如,无线网络接入方式大家知道吗。读文网小编在这里为大家详细介绍。
各种无线网络接入方式都有明显的优势和缺点,在选择网络接入方式之前,各种接入设备标称的理论值往往会误导消费者。我们先看看不同的无线接入方式的实际传输速度如何。
GPRS的理论网络速度峰值可以达到112Kbps,而CDMA 1X的峰值为152Kbps,两者相差并不是很多。当然,对于无线网络技术而言,单纯的理论值对比没有什么意义,实际的速度测试才有价值。
为了公平起见,测试之前不经过任何软件优化,而且选择国内外各地的服务器进行三次下载速度对比测试,测试使用Flashget三个线程,取最终的平均速度。此外,我们还使用普通56K外置Modem的测试成绩作为参考。
从速度表现来看,CDMA 1X是最为出色的,尽管距离理论上的峰值仍有不小的距离,但是已经超越了56K外置Modem,速度完全能够让人接受。相对而言,GPRS表现欠缺一些,或许是因为中国移动的网络负荷量过大,其速度下降十分明显,甚至不如56K Modem。
浏览量:2
下载量:0
时间:
随着网络流量的增加,服务器开始面临繁重负载,这时就需要搭配一套HTTP负载均衡系统了,那么Linux下该如何配置HTTP负载均衡系统呢?随读文网小编一起来学习一下吧。
无法预测或缺乏一贯的表现是你所无法承受的。那么,我们如何能消除这些缺点呢?在大多数情况下,一套合适的负载均衡解决方案有望满足这个要求。今天我将为各位介绍如何使用HAProxy搭建一套HTTP负载均衡系统。
HAProxy是一种流行的开源负载均衡和代理系统,面向GNU/Linux平台上的TCP/HTTP服务器。HAProxy采用了单一线程的事件驱动型架构而设计,它能够轻松地处理10G网卡线路速度,现广泛应用于许多生产环境中。其功能特性包括:自动检查健康状况、可定制的负载均衡算法、支持HTTPS/SSL以及会话速率限制等。
我们在本教程中要达到什么样的目的?
在本教程中,我们将逐步介绍为HTTP网站服务器配置基于HAProxy的负载均衡系统这个过程。
前提条件
你至少需要一台(最好是两台)网站服务器来证实所搭建负载均衡系统的功能。我们假设,后端HTTP网站服务器已经搭建并运行起来。
将HAProxy安装到Linux上
就大多数发行版而言,我们可以使用你所用发行版的软件包管理器来安装HAProxy。
将HAProxy安装到Debian上
在Debian中,我们需要为Wheezy添加向后移植功能。为此,请在/etc/apt/sources.list.d中创建一个名为“backports.list”的新文件,其内容如下:
deb http://cdn.debian.net/debian wheezybackports main
更新你的软件库数据,并安装HAProxy。
# apt get update # apt get install haproxy
将HAProxy安装到Ubuntu上
# apt get install haproxy
将HAProxy安装到CentOS和RHEL上
# yum install haproxy
配置HAProxy
在本教程中,我们假设有两台HTTP网站服务器已搭建并运行起来,其IP地址分别为192.168.100.2和192.168.100.3。我们还假设,负载均衡系统将在IP地址为192.168.100.4的那台服务器处进行配置。
为了让HAProxy发挥功用,你需要更改/etc/haproxy/haproxy.cfg中的几个项目。这些变更在本章节中予以描述。万一某个配置对不同的GNU/Linux发行版而言有所不同,会在相应段落中加以注明。
1. 配置日志功能
你首先要做的工作之一就是,为你的HAProxy建立合适的日志功能,这对将来进行调试大有用处。日志配置内容位于/etc/haproxy/haproxy.cfg的global部分。下面这些是针对特定发行版的指令,用于为HAProxy配置日志。
CentOS或RHEL:
要想在CentOS/RHEL上启用日志功能,把:
log 127.0.0.1 local2
换成:
log 127.0.0.1 local0
下一步,在/var/log中为HAProxy创建单独的日志文件。为此,我们需要改动当前的rsyslog配置。为了让配置简单而清楚,我们将在/etc/rsyslog.d/中创建一个名为haproxy.conf的新文件,其内容如下。
$ModLoad imudp $UDPServerRun 514 $template Haproxy,“%msg%” local0.=info /var/log/haproxy.log;Haproxy local0.notice /var/log/haproxystatus.log;Haproxy local0.* ~
该配置将把基于$template的所有HAProxy消息隔离到/var/log中的日志文件。现在,重启rsyslog,让变更内容生效。
# service rsyslog restart
Debian或Ubuntu:
要想在Debian或Ubuntu上为HAProxy启用日志功能,把:
log /dev/log local0 log /dev/log local1 notice
换成:
log 127.0.0.1 local0
下一步,为HAProxy配置单独的日志文件,编辑/etc/rsyslog.d/中一个名为haproxy.conf的文件(或者Debian中的49-haproxy.conf),其内容如下。
$ModLoad imudp $UDPServerRun 514 $template Haproxy,“%msg%” local0.=info /var/log/haproxy.log;Haproxy local0.notice /var/log/haproxystatus.log;Haproxy local0.* ~
该配置将把基于$template的所有HAProxy消息隔离到/var/log中的日志文件。现在,重启rsyslog,让变更内容生效。
# service rsyslog restart
2. 设置默认值
下一步是为HAProxy设置默认变量。找到/etc/haproxy/haproxy.cfg中的defaults部分,把它换成下列配置。
log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 20000 contimeout 5000 clitimeout 50000 srvtimeout 50000
上述配置推荐HTTP负载均衡器使用,但可能不是最适合你环境的解决方案。如果那样,请参阅HAProxy参考手册页,进行适当的改动和调整。
3. 网站服务器集群的配置
网站服务器集群(Webfarm)的配置定义了可用的HTTP服务器集群。我们所建负载均衡系统的大部分设置都将放在这里。现在,我们将创建一些基本的配置,我们的节点将在这里加以定义。把从frontend部分到文件末尾的所有配置换成下列代码:
listen webfarm *:80 mode http stats enable stats uri /haproxy?stats stats realm Haproxy Statistics stats auth haproxy:stats balance roundrobin cookie LBN insert indirect nocache option httpclose option forwardfor server web01 192.168.100.2:80 cookie node1 check server web02 192.168.100.3:80 cookie node2 check
“listen webfarm *:80”这一行定义了我们的负载均衡系统将侦听哪些接口。出于本教程的需要,我将该值设为“*”,这让负载均衡系统侦听我们的所有接口。在实际场景下,这可能不合意,应该换成可从互联网来访问的某个接口。
stats enable stats uri /haproxy?stats stats realm Haproxy Statistics stats auth haproxy:stats
上述设置声明,可以在http://《load-balancer-IP》/haproxy?stats处访问负载均衡系统的统计数字。这种访问由简单的HTTP验证以及登录名“haproxy”和密码“stats”来确保安全。这些设置应该换成你自己的登录信息。如果你不想让这些统计数字被人看到,那么可以完全禁用它们。
浏览量:2
下载量:0
时间:
有些人还在为电脑要怎么上网而发愁,其实上网的媒介有好几种,并不是单单的一种或者是两种,下面读文网小编就为大家介绍一下笔记本电脑和台式机这两种电脑的上网方式,欢迎大家参考和学习。
ADSL宽带上网是目前各城市城镇上网接入主推的主流,ADSL其实是DSL的一种。大家知道,数字用户线DSL(Digital Subscriber Line)是一种不断发展的高速上网宽带接入技术,该技术采用较先进的数字编码技术和调制解调技术在常规的电话线上传送宽带信号。目前已经比较成熟并且投入使用的的数字用户线方案有ADSL、HDSL、SDSL和VDSL(ADSL的快速版本)等,这些方案都是通过一对调制解调器来实现,其中一个调制解调器放置在电信局,另一个调制解调器放置在用户一端。在使用DSL浏览因特网时,不需要另外再缴纳电话费,因为通过ADSL上网并没有经过电话交换网接入Internet,只占用PSTN线路资源和宽带网络资源,所以只需要缴纳ADSL月租费。
国内目前最主流宽带接入方式是ADSL(Asymmetric Digital Subscriber Line)非对称数字用户线。为什么叫非对称数字用户线呢?这是因为ADSL被设计成向下流(下行,即从中心局到用户侧)比向上流(上行,即从用户侧到中心局)传送的带宽宽,其下行速率从512Kbit/s到8Mbit/s,而上行速率则从64Kbit/s到640Kbit/s。ADSL接入Internet有虚拟拨号和专线接入两种方式。采用虚拟拨号方式的用户采用类似MODEM和ISDN的拨号程序,在使用习惯上与原来的方式没什么不同。采用专线接入的用户只要开机即可接入Internet。
此外,更高速度的甚高比特率数字用户线(VDSL)也正在许多大中城市流行。VDSL是ADSL的发展方向,是目前最先进的数字用户线技术。VDSL通常采用DMT调制方式,在一对铜双绞线上实现数字传输,其下行速率可达13~52Mbps,上行速率可达1.5~7Mbps,传输距离约为300米~1.3公里。利用VDSL可以传输高清晰度电视(HDTV)信号。
适合人群:适合于绝大部分国庆在家上网的读者使用,目前据笔者所知很多地方国庆期间都在推广免费安装ADSL超低价包月的业务,可以说这为ADSL宽带在城市的普及起到了至关重要的作用。对于大多数准备在国庆期间上网的读者而言,如果你还没有开通宽带,你可到当地ISP营业厅办理ADSL开户手续,按标准缴纳相关的费用,然后安装人员便会在预约时间内到你家里安装开通ADSL。
浏览量:2
下载量:0
时间:
为了让自己的智能手机和平板电脑能够无线上网,一般用户都会在家里安装无线路由器,这样自己家里就能组建成一个小型无线局域网,无线路由器发射出wifi无线信号,附近的无线网络设备都可以接受wifi信号上网,但也有时候会出现wifi无线信号太弱,覆盖率太小,严重影响用户使用无线上网,下面读文网小编就来讲一下影响WiFi无线网络信号覆盖的几种主要因素。
很多时候我们抱怨无线信号不好其实是错怪了无线路由器。由于受到网络设备的体积、芯片的功率和天线的增益影响,导致我们的产品接收无线信号的能力也不同。一些智能移动终端的无线接收效果往往要低于我们的计算机,而另一些比较奇葩的设备,例如前几年流行的解除无线密码的“卡王”、“卡皇”等无线网卡,接收信号的灵敏度甚至高出我们其他设备的数倍。
因此,影响无线信号的覆盖范围和质量受制于众多因素,只有具体问题具体分析才能找到解决问题的根本方法。总的来说,无线信号弱,影响用户上网,读文网小编认为最简单的解决方法还是更换功率大的无线路由器,终端设备尽量不要离无线路由器太远,保持近距离。
WiFi无线网络信号的相关
浏览量:3
下载量:0
时间:
有的时候我们电脑不清楚是本地连接,宽带连接还是其他移动网,今天教大家怎么查看电脑网络连接方式,下面是读文网小编整理的一些关于如何查看电脑网络连接方式的相关资料,供您参考。
右键点击 打开网络和共享中心 并选择 更改适配器设置,如下图:
正常上网过程中,如果仅 3G连接(此处名称为Unicom)图标亮,则上网方式为3G拨号上网。
查看电脑网络连接方式的相关
浏览量:18
下载量:0
时间:
思科公司已成为公认的全世界网络互联解决方案的领先厂商,其公司出产的一系列路由器更是引领世界,那么你知道怎么设置Cisco路由多链路负载均衡吗?下面是读文网小编整理的一些关于怎么设置Cisco路由多链路负载均衡的相关资料,供你参考。
(一)实验拓朴
(二)实验要求
1、R1连接本地子网,R2为边缘策略路由器,R3模拟双ISP接入的Internet环境。
2、要求R1所连接的局域网部分流量走R2-R3间上条链路(ISP1链路),部分流量走R2-R3间下条链路(ISP2链路)从而实现基于源的供应商链路选择和网络负载均衡。
(三)各路由器配置如下
R1#sh run //路由器R1的配置
……
interface Loopback0 //模拟子网一:192.168.1.0/24
ip address 192.168.1.1 255.255.255.0 //模拟子网中第一台主机
ip address 192.168.1.2 255.255.255.0 secondary //模拟子网中第二台主机
!
interface Loopback2 //模拟子网二:192.168.2.0/24
ip address 192.168.2.1 255.255.255.0
ip address 192.168.2.2 255.255.255.0 secondary
!
interface FastEthernet0/0
ip address 12.0.0.1 255.255.255.0
duplex half
!
……
!
router rip //通过RIP协议配置网络的连通性
version 2
network 192.168.1.0
network 192.168.1.0
network 12.0.0.0
……
end
-----------------------------
R3#sh run //路由器R3的配置
Building configuration...
……
interface Loopback0 //模拟一个连接目标
description to internet
ip address 100.100.100.100 255.255.255.0
!
interface Serial1/1 //模拟ISP1的接入端口
ip address 123.0.0.3 255.255.255.0
serial restart-delay 0
!
……
interface Serial1/3 //模拟ISP2的接入端口
ip address 223.0.0.3 255.255.255.0
serial restart-delay 0
!
router rip
version 2
network 100.0.0.0
network 123.0.0.0
network 223.0.0.0
no auto-summary
!
……
end
---------------------------------------------------------------------------------
R2#sh run //策略路由器R2的配置
Building configuration...
……
interface FastEthernet0/0
ip address 12.0.0.2 255.255.255.0
ip policy route-map isp-test //在接口上启用策略路由isp-test进行流量控制
duplex half
!
……
interface Serial1/1
ip address 123.0.0.1 255.255.255.0
serial restart-delay 0
!
interface Serial1/3
ip address 223.0.0.1 255.255.255.0
serial restart-delay 0
……
router rip
version 2
network 12.0.0.0
network 123.0.0.0
network 223.0.0.0
no auto-summary
……
logging alarm informational
access-list 101 permit ip 192.168.1.0 0.0.0.255 host 100.100.100.100 //访问控制列表101,用于过滤原地址,允许子网192.168.1.0流量通过 */
access-list 102 permit ip 192.168.2.0 0.0.0.255 host 100.100.100.100 //访问控制列表102,用于过滤原地址,允许子网192.168.2.0流量通过 */
!
route-map isp-test permit 10 //定义route-map,取名为isp-test,序列为10
match ip address 101 //检查源地址,匹配acl 101
set ip default next-hop 123.0.0.3 //指定下一跳地址
!
route-map isp-test permit 20 //定义isp-test的第二条语句,序列号为20
match ip address 102 //检查源地下,匹配acl102
set ip default next-hop 223.0.0.3
!
route-map isp-test permit 30 //定义isp-test的第三条语句,序列号为30
set default interface Null0 //丢弃不匹配规定标准的包
……
end
---------------------------------------------------------------------------------
(四)调试
R2#sh ip policy //显示应用的策略
Interface Route map
Fa0/0 isp-acc
R2#sh route-map isp-test //显示配置的路由映射图
route-map isp-test, permit, sequence 10
Match clauses:
ip address (access-lists): 101
Set clauses:
ip default next-hop 123.0.0.3
Policy routing matches: 0 packets, 0 bytes
route-map isp-test, permit, sequence 20
Match clauses:
ip address (access-lists): 102
Set clauses:
ip default next-hop 223.0.0.3
Policy routing matches: 0 packets, 0 bytes
route-map isp-test, permit, sequence 30
Match clauses:
Set clauses:
default interface Null0
Policy routing matches: 0 packets, 0 bytes
========================================================================
R1#traceroute //路由跟踪
Protocol [ip]: //ip流量
Target IP address: 100.100.100.100 //目标地
Source address: 192.168.1.1 //源地址为子网一的第一台主机
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 100.100.100.100
1 12.0.0.2 72 msec 216 msec 276 msec
2 123.0.0.3 288 msec 360 msec * //ISP1入口
-------------------------------------------------------------------------------
R1# traceroute
Protocol [ip]:
Target IP address: 100.100.100.100
Source address: 192.168.1.2 //源地址为子网一的第二台主机
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 100.100.100.100
1 12.0.0.2 92 msec 188 msec 52 msec
2 123.0.0.3 416 msec 436 msec * //ISP1入口
----------------------------------------------------------------------------------
R1#traceroute
Protocol [ip]:
Target IP address: 100.100.100.100
Source address: 192.168.2.1 //源地址为子网二的第一台主机
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 100.100.100.100
1 12.0.0.2 136 msec 40 msec 144 msec
2 223.0.0.3 356 msec * 132 msec //ISP2入口
---------------------------------------------------------
R1#traceroute
Protocol [ip]:
Target IP address: 100.100.100.100
Source address: 192.168.2.2 //源地址为子网二中第二台主机
Numeric display [n]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Port Number [33434]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Type escape sequence to abort.
Tracing the route to 100.100.100.100
1 12.0.0.2 28 msec 104 msec 200 msec
2 223.0.0.3 300 msec * 196 msec //ISP2入口
-----------------------------------------------------
设置Cisco路由多链路负载均衡的相关
浏览量:2
下载量:0
时间:
思科cisco依靠自身的技术和对网络经济模式的深刻理解,使他成为了网络应用的成功实践者之一,其出产的路由器也是全球顶尖的,那么你知道怎么设置cisco AP用户数限制及负载均衡吗?下面是读文网小编整理的一些关于怎么设置cisco AP用户数限制及负载均衡的相关资料,供你参考。
NETGEAR ProSafe WFS709TP可以对全局或个别AP实现最大用户数限制。当AP上的无线客户端的数量达到设定值时,该AP将不再允许其他的客户端接入了,直到有已接客户端断开为止。
如果要对WFS709TP下所有AP进行用户数量限制,可进入Configuration>Advanced>WLAN>Radio中,在802.11b/g页面,将Max Clients设为想要的值(默认64,可设置0到255个用户)。然后点Apply应用。
如果只需对某一个AP设置最大用户数,可到Configuration>Advanced>WLAN>Advanced中,点Add添加要设置的AP的Location ID号。
然后选择802.11b/g页面,同样也是修改Max Clients。设置完后点Apply应用。
设置cisco AP用户数限制及负载均衡的相关
浏览量:2
下载量:0
时间:
现在上网的方法越来越多了,例如有宽带、移动3g等等,那么你知道电脑网络连接方式怎么判断吗?下面是读文网小编整理的一些关于电脑网络连接方式的相关资料,供你参考。
右键点击 打开网络和共享中心 并选择 更改适配器设置,如下图:
正常上网过程中,如果仅 3G连接(此处名称为Unicom)图标亮,则上网方式为3G拨号上网。
看过文章“电脑网络连接方式”
浏览量:2
下载量:0
时间:
大家可能会接触到cdr这种格式的文件,这种文件是平面设计常用软件中CorelDraw的源文件格式。由于CorelDRAW是矢量图形绘制软件,所以cdr可以记录文件的属性、位置和分页等。但它在兼容度上比较差,所有CorelDRAW应用程序中均能够使用,但其他图像编辑软件打不开此类文件。打开这种文件需要使用CorelDRAW软件,打开这种格式文件的时候最好安装一个比较高一点的版本。免得你不知道文件版本,旧版打不开。下面跟读文网小编来了解一下吧!
打开方式一:在桌面上找到CorelDRAW图标,在CorelDRAW软件打开的状态下,双击cdr文件,文件自然就会打开在CorelDRAW绘图区域。
打开方式二:找到文件所在位置,鼠标拖拽至CorelDRAW软件界面的标题栏(位于窗口的最顶端,显示该软件当前打开文件的路径和名称),当鼠标变成箭头底下带个加号的时候,松开鼠标,此时的cdr文件会在新的绘图窗口打开,这里需要注意的是,必须得在标题栏才行(如果不是在标题栏,它打开的就是本页面了)。
打开方式三、找到所存文件,鼠标右键,选择打开方式为CorelDRAW X7。
浏览量:2
下载量:0
时间:
CPU作为电脑的核心组成部份,它的好坏直接影响到电脑的性能。下面是读文网小编带来的关于linux在多核处理器上的负载均衡原理的内容,欢迎阅读!
现在互联网公司使用的都是多CPU(多核)的服务器了,Linux操作系统会自动把任务分配到不同的处理器上,并尽可能的保持负载均衡。那Linux内核是怎么做到让各个CPU的压力均匀的呢?
做一个负载均衡机制,重点在于:
1. 何时检查并调整负载情况?
2. 如何调整负载?
先看第一个问题。
如果让我这样的庸俗程序员来设计,我第一个想到的就是每隔一段时间检查一次负载是否均衡,不均则调整之,这肯定不是最高效的办法,但肯定是实现上最简单的。实际上,2.6.20版linux kernel的确使用软中断来定时调整多CPU上的压力(调用函数run_rebalance_domains),每秒1次。
但每秒一次还是不能满足要求,对很多应用来说,1秒太长了,一秒钟内如果发生负载失衡对很多web应用都是不能接受的,何况其他实时应用。最好kernel能够紧跟进程的变化来调整。
那么,好,我们在进程创建和进程exit的时候检查并调整负载呢?可以,但是不完整,一个进程创建以后如果频繁的睡眠、醒来、睡眠、醒来,它这样折腾对CPU的负载是有影响的,你就不管它了吗?说到底,我们其实关注的是进程是否在使用CPU,而不是它是否诞生了。所以,我们应该在进程睡眠和醒来这两个时间点检查CPU们的负载。
再看第二个问题,怎么调整负载呢?从最繁忙的那个CPU上挪一个进程到最闲的那个CPU上,如果负载还不均衡,就再挪一个进程,如果还不均衡,继续挪....这也是个最笨的方法,但它却真的是linux CPU负载均衡的核心,不过实际的算法在此基础上有很多细化。对于Intel的CPU,压缩在同一个chip上的多核是共享同一个L2的(如下图,里面的一个Processor其实就是一个chip),如果任务能尽可能的分配在同一个chip上,L2 cache就可以继续使用,这对运行速度是有帮助的。所以除非“很不均衡”,否则尽量不要把一个chip上的任务挪到其他chip上。
于是,为了应对这种CPU core之间的异质性——在不同的core之间迁移任务,代价不同——Linux kernel引入了sched_domain和sched_group的概念。sched_domain和sched_group的具体原理,可参考刘勃的文章和英文资料。
【代码剖析】
SMP负载均衡检查或调整在两个内核函数里发生:
1. schedule()。当进程调用了sleep、usleep、poll、epoll、pause时,也就是调用了可能睡去的操作时都会转为内核代码里对schedule()函数的调用。
2. try_to_wake_up() 。说白了就是进程刚才睡了,现在要醒来,那醒来以后跑在哪个CPU上呢?这个选择CPU的过程,也就是负载均衡的过程。
我们先看schedule()的代码,我们忽略函数前面那些和负载均衡无关的代码(本文代码以内核2.6.20版为准):
[kernel/sched.c --> schedule() ]
3489 cpu = smp_processor_id();
3490 if (unlikely(!rq->nr_running)) {
3491 idle_balance(cpu, rq);
3492 if (!rq->nr_running) {
3493 next = rq->idle;
3494 rq->expired_timestamp = 0;
3495 wake_sleeping_dependent(cpu);
3496 goto switch_tasks;
3497 }
3498 }
每个CPU都有一个运行队列即这里的 rq,运行队列里放着该CPU要运行的进程,如果运行队列里没有进程了,就说明当前CPU没有可调度的任务了,那就要调用idle_balance从其它CPU上“平衡”一些(就是挪一些)进程到当前rq里。
再看 idle_balance()的实现:
[kernel/sched.c --> idle_balance()]
2806 /*
2807 * idle_balance is called by schedule() if this_cpu is about to become
2808 * idle. Attempts to pull tasks from other CPUs.
2809 */
2810 static void idle_balance(int this_cpu, struct rq *this_rq)
2811 {
2812 struct sched_domain *sd;
2813 int pulled_task = 0;
2814 unsigned long next_balance = jiffies + 60 * HZ;
2815
2816 for_each_domain(this_cpu, sd) {
2817 unsigned long interval;
2818
2819 if (!(sd->flags & SD_LOAD_BALANCE))
2820 continue;
2821
2822 if (sd->flags & SD_BALANCE_NEWIDLE)
2823 /* If we've pulled tasks over stop searching: */
2824 pulled_task = load_balance_newidle(this_cpu,
2825 this_rq, sd);
2826
2827 interval = msecs_to_jiffies(sd->balance_interval);
2828 if (time_after(next_balance, sd->last_balance + interval))
2829 next_balance = sd->last_balance + interval;
2830 if (pulled_task)
2831 break;
2832 }
2833 if (!pulled_task)
2834 /*
2835 * We are going idle. next_balance may be set based on
2836 * a busy processor. So reset next_balance.
2837 */
2838 this_rq->next_balance = next_balance;
2839 }
从子 sched_domain到父sched_domain遍历该CPU对应的domain(2816行),并调用load_balance_newidle,我们继续:
[kernel/sched.c --> load_balance_newidle()]
2730 static int
2731 load_balance_newidle(int this_cpu, struct rq *this_rq, struct sched_domain *sd)
2732 {
2733 struct sched_group *group;
2734 struct rq *busiest = NULL;
2735 unsigned long imbalance;
2736 int nr_moved = 0;
2737 int sd_idle = 0;
2738 cpumask_t cpus = CPU_MASK_ALL;
2739
2740 /*
2741 * When power savings policy is enabled for the parent domain, idle
2742 * sibling can pick up load irrespective of busy siblings. In this case,
2743 * let the state of idle sibling percolate up as IDLE, instead of
2744 * portraying it as NOT_IDLE.
2745 */
2746 if (sd->flags & SD_SHARE_CPUPOWER &&
2747 !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
2748 sd_idle = 1;
2749
2750 schedstat_inc(sd, lb_cnt[NEWLY_IDLE]);
2751 redo:
2752 group = find_busiest_group(sd, this_cpu, &imbalance, NEWLY_IDLE,
2753 &sd_idle, &cpus, NULL);
2754 if (!group) {
2755 schedstat_inc(sd, lb_nobusyg[NEWLY_IDLE]);
2756 goto out_balanced;
2757 }
2758
2759 busiest = find_busiest_queue(group, NEWLY_IDLE, imbalance,
2760 &cpus);
2761 if (!busiest) {
2762 schedstat_inc(sd, lb_nobusyq[NEWLY_IDLE]);
2763 goto out_balanced;
2764 }
2765
2766 BUG_ON(busiest == this_rq);
2767
2768 schedstat_add(sd, lb_imbalance[NEWLY_IDLE], imbalance);
2769
2770 nr_moved = 0;
2771 if (busiest->nr_running > 1) {
2772 /* Attempt to move tasks */
2773 double_lock_balance(this_rq, busiest);
2774 nr_moved = move_tasks(this_rq, this_cpu, busiest,
2775 minus_1_or_zero(busiest->nr_running),
2776 imbalance, sd, NEWLY_IDLE, NULL);
原来就是我们上面说的“笨办法”,针对当前CPU所属的每个domain(从子到父),找到该 sched_domain里最忙的sched_group(2752行),再从该group里找出最忙的运行队列(2759行),最后从该“最忙”运行队列里挑出几个进程到当前CPU的运行队列里。move_tasks函数到底挪多少进程到当前CPU是由第4和第5个参数决定的,第4个参数是指最多挪多少个进程,第5个参数是指最多挪多少“压力”。有了这两个参数限制,就不会挪过头了(即把太多进程挪到当前CPU,造成新的不均衡)。
举个例子,假如有一台8核的机器,两个CPU插槽,也就是两个chip,每个chip上4个核,再假设现在core 4最忙,core 0第二忙,如图:
按照 刘勃的文章里的提法,首先是core domain,即Processor 0属于domain 1,Processor 1属于domain 2,其中domain 1包含4个sched_group,每个group对应一个core,如下图(group未画出):
假如现在是 Core 3 在执行idle_balance,则先在domain 1里找最忙的group,找到第二忙的group是core 0(core 4不在domain 1里,所以不会找到它),再从core 0里找最忙的runqueue(运行队列),core 0就一个运行队列,所以直接就是它对应的runqueue了,然后从该runqueue里挪出几个任务到Core 3,这一层domain的均衡做完了。
接着是domain 1的父domain,即 cpu_domain,下图的domain 0:
这个domain 0包含了两个group,每个group对应一个chip,即每个group对应了4个core。
在domain 0找最繁忙的group,显然会找到Processor1 对应的group(因为core 4超忙),那么继续在Processor 1里找最忙的runqueue,于是找到core 4,最后从core 4的runqueue里挑出几个任务挪到core 3,。
这样,整个系统8个核都基本平衡了。
也许有人要问,为什么是从子domain到父domain这样遍历,而不是倒过来,从父到子遍历呢?这是因为子domain通常都是在一个chip上,任务的很多数据在共享的L2 cache上,为了不让其失效,有必要尽量让任务保持在一个chip上。
也许还有人要问:如果core 3本来就是最忙的core,它如果运行idle_balance,会发生什么?答案是什么也不会发生。因为在find_busiest_group函数里,如果发现最忙的是“本CPU”,那么就直接返回NULL,也就不再做任何事。
那core 3岂不永远是最忙的了?呵呵,大家忘了,系统里总有闲的CPU(哪怕是相对比较闲),它总会执行schedule(),就算它从不调用sleep从不睡眠,时钟中断也会迫使其进程切换,进而调用schedule,进而将繁忙CPU的任务揽一部分到自己身上。这样,谁最闲,谁早晚会从忙人身上揽活儿过来,所以忙人不会永远最忙,闲人也不会永远最闲,所以就平等,就均衡了。
再看try_to_wake_up():
[kernel/sched.c --> try_to_wake_up()]
1398 static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync)
1399 {
......
1417
1418 cpu = task_cpu(p);
1419 this_cpu = smp_processor_id();
1420
1421 #ifdef CONFIG_SMP
1422 if (unlikely(task_running(rq, p)))
1423 goto out_activate;
1424
1425 new_cpu = cpu;
1426
1427 schedstat_inc(rq, ttwu_cnt);
1428 if (cpu == this_cpu) {
1429 schedstat_inc(rq, ttwu_local);
1430 goto out_set_cpu;
1431 }
变量this_cpu和变量cpu有什么区别?变量this_cpu是实际运行这个函数的处理器(“目标处理器”),而变量cpu是进程p在睡眠之前运行的处理器??为了方便我们暂且称之为“源处理器”。当然,这两个处理器也可能是同一个,比如进程p在处理器A上运行,然后睡眠,而运行try_to_wake_up的也是处理器A,其实这样就最好了,进程p在处理器A里cache的数据都不用动,直接让A运行p就行了??这就是1428行的逻辑。
如果this_cpu和cpu不是同一个处理器,那么代码继续:
1447 if (this_sd) {
1448 int idx = this_sd->wake_idx;
1449 unsigned int imbalance;
1450
1451 imbalance = 100 + (this_sd->imbalance_pct - 100) / 2;
1452
1453 load = source_load(cpu, idx);
1454 this_load = target_load(this_cpu, idx);
1455
1456 new_cpu = this_cpu; /* Wake to this CPU if we can */
1457
1458 if (this_sd->flags & SD_WAKE_AFFINE) {
1459 unsigned long tl = this_load;
1460 unsigned long tl_per_task;
1461
1462 tl_per_task = cpu_avg_load_per_task(this_cpu);
1463
1464 /*
1465 * If sync wakeup then subtract the (maximum possible)
1466 * effect of the currently running task from the load
1467 * of the current CPU:
1468 */
1469 if (sync)
1470 tl -= current->load_weight;
1471
1472 if ((tl <= load &&
1473 tl + target_load(cpu, idx) <= tl_per_task) ||
1474 100*(tl + p->load_weight) <= imbalance*load) {
1475 /*
1476 * This domain has SD_WAKE_AFFINE and
1477 * p is cache cold in this domain, and
1478 * there is no bad imbalance.
1479 */
1480 schedstat_inc(this_sd, ttwu_move_affine);
1481 goto out_set_cpu;
1482 }
1483 }
计算出“目标处理器”和“源处理器”各自的负载( 1453行和1454行),再计算“目标处理器”上的每任务平均负载 tl_per_task,最后进行判断:如果“目标处理器”的负载小于“源处理器”的负载且两处理器负载相加都比 tl_per_task小的话,唤醒的进程转为“目标处理器”执行。还有一种情况就是1474行的判断,如果“目标处理器”的负载加上被唤醒的进程的负载后,还比“源处理器”的负载(乘以imbalance后)的小的话,也要把唤醒的进程转为“目标处理器”执行。如果两个因素都不满足,那还是由p进程原来呆的那个CPU(即”源处理器“)继续来处理吧。
有点儿绕,是吧?其实代码虽绕,用意是简单的:
1472行-1473行其实是这样一个用意:如果“目标处理器”的负载很小,小得即使把压力全给到“源处理器”上去也不会超过“源处理器”上的平均任务负载,那么这“目标处理器”的负载是真的很小,值得把p进程挪过来。
1474行的用意则是:如果我们真的把p进程挪到“目标处理器”以后,“目标处理器”的压力也不比“源处理器”大多少,所以,还是值得一挪。
说来说去,还是那个笨原则:把任务从最忙的CPU那儿转到很闲的CPU这儿。
我们已经看过了睡眠和醒来时的内核函数,那么软中断里的 run_rebalance_domains又干了些什么呢?其实也很简单,它调用了load_balance函数,而这个函数和load_balance_newidle实现上基本一样,就不累述了。
浏览量:2
下载量:0
时间:
很多人不知道怎么建立win7中的宽带连接,更别说快捷方式了。那么如何为win7电脑网络连接创建快捷方式呢?就让读文网小编来告诉大家为win7电脑网络连接创建快捷方式的方法吧,希望对大家有所帮助。
第一步,先鼠标桌面右键,找到“个性化”设置,出来如下的界面,如图:
第二步,在个性化窗口下找到左边的“更改桌面图标”按钮并点击,把“网络”那一项勾上,点击确定,这样桌面上就有“网络”的快捷图标了。如图:
第三步,右键桌面上的“网络”,找到属性,会出现下图:
第四步,点击上图中“设置新的连接或网络”,会弹出选择一个连接选项,接着点击下面的“连接到Internet ”。
第五步,在win7系统弹出的界面中会提示您想如何连接?然后在下面的选项中选择“宽带(pppoe)(R)”,如图:
第六步:我们只要在出现在对话框中根据提示输入用户名、密码以及宽带的快捷图标的名称。然后点击连接,这样宽带连接设置就完成了。
最后,如果要在win7 64位旗舰版创建快捷方式,只需依次点击控制面板-网络和共享中心-更改适配器设置,然后右键宽带连接-创建快捷方式就行了。
浏览量:2
下载量:0
时间: