马哥linuxLVS学习笔记.docx
《马哥linuxLVS学习笔记.docx》由会员分享,可在线阅读,更多相关《马哥linuxLVS学习笔记.docx(41页珍藏版)》请在冰点文库上搜索。
马哥linuxLVS学习笔记
Cluster
LAMP
假定:
perfork 2M 动态10M
200个请求----->1000个请求(800静态+200动态)
800*2+200*10=3.6GMemory
资源瓶颈:
ScaleOn:
向上扩展,加CPU, Memoey, Net, Storage
ScaleOut:
向外扩展,
LoadBalancing:
LB
RR:
轮询
WRR:
加权
集群
1、负载均衡集群:
LoadBalancing
并发处理能力
rsync+inotify
2、高可用集群:
HighAvailablity
在线时间/(在线时间+故障处理时间)
DAS:
DirectAttachedStorage block级别,速度快、脑裂
NAS:
Network AttachedStorage
Split-Brain 脑裂
STONITH:
ShootTheOtherNodeInTheHead
Fencing:
隔离。
节点级别隔离,资源级别隔离
3、HPC:
HighPerformancecompute
向量机
并行处理集群:
分布式文件系统、任务切割机制
分布式存储:
分布式文件系统
Hadoop
负载均衡:
Hareware:
F5,BIGIP
NetScaler
A10
Radware
Software:
四层:
LVS
七层:
nginx haproxy
Nginx和LVS对比的总结:
1、Nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下LVS并不具备这样的功能,所以Nginx单凭这点可利用的场合就远多于LVS了;但Nginx有用的这些功能使其可调整度要高于LVS,所以经常要去触碰触碰,触碰多了,人为出问题的几率也就会大。
2、Nginx对网络稳定性的依赖较小,理论上只要ping得通,网页访问正常,Nginx就能连得通,这是Nginx的一大优势!
Nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;LVS就比较依赖于网络环境,目前来看服务器在同一网段内并且LVS使用direct方式分流,效果较能得到保证。
另外注意,LVS需要向托管商至少申请多一个ip来做VisualIP,貌似是不能用本身的IP来做VIP的。
要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。
3、Nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。
LVS的安装和配置、测试就要花比较长的时间了;LVS对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。
4、Nginx也同样能承受很高负载且稳定,但负载度和稳定度差LVS还有几个等级:
Nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的。
5、Nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。
目前LVS中ldirectd也能支持针对服务器内部的情况来监控,但LVS的原理使其不能重发请求。
比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大量内存而不能释放,使用多一个Nginx做apache代理的话,这些窄带链接会被Nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的资源占用。
这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。
7、Nginx能支持http、https和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是最完美的方案了。
具体的应用还得具体分析,如果是比较小的网站(日PV小于1000万),用Nginx就完全可以了,如果机器也不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用LVS。
LVS:
LinuxVirtualServer
lvs和iptables不能共同使用
lvs ipvsadm管理集群服务 / ipvs内核
LVS类型
NAT:
地址转换
DR:
直接路由
TUN:
隧道
NAT:
集群节点跟director必须在同一个IP网络中;
RIP通常是私有地址,仅用于各集群节点间的通信;
director位于client和realserver之间,并负责处理进出的所有通信;
realserver必须将网关指向DIP;
支持端口映射;
realserver可以使用任意OS;
较大规模应该场景中,director易成为系统瓶颈;
∙Theclusternodesneedtobeonthesamenetwork(VLANorsubnet)astheDirector.
∙TheRIPaddressesoftheclusternodesarenormallyprivate,non-routableIPaddressesusedonlyforintraclustercommunication.
∙TheDirectorinterceptsallcommunication(networkpacketsgoingineitherdirection)betweentheclientcomputersandtherealservers.
∙TheclusternodesusetheDirector'sDIPastheirdefaultgatewayforreplypacketstotheclientcomputers.
∙TheDirectorcanremapnetworkportnumbers.Thatis,arequestreceivedontheDirector'sVIPononeportcanbesenttoaRIPinsidetheclusteronadifferentport.
∙Anytypeofoperatingsystemcanbeusedonthenodesinsidethecluster.
∙ AsingleDirectorcanbecomethebottleneckforthecluster.
DR:
集群节点跟director必须在同一个物理网络中;
RIP可以使用公网地址,实现便捷的远程管理和监控;
director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
realserver不能将网关指向DIP;
不支持端口映射;
∙TheclusternodesmustbeonthesamenetworksegmentastheDirector.
∙TheRIPaddressesoftheclusternodesdonotneedtobeprivateIPaddresses.
∙TheDirectorinterceptsinbound(butnotoutbound)communicationbetweentheclientandtherealservers.
∙Theclusternodes(normally)donotusetheDirectorastheirdefaultgatewayforreplypacketstotheclientcomputers.
∙TheDirectorcannotremapnetworkportnumbers.
∙Mostoperatingsystemscanbeusedontherealserversinsidethecluster.
∙AnLVS-DRDirectorcanhandlemorerealserversthananLVS-NATDirector.
Realserver不能解析(屏蔽)client的arp请求(client广播vip询问vip的mac地址)
VIP:
MAC(DVIP)
arptables:
kernel2.4.26and2.6.4comewith2newdeviceflagsfortuningtheARPstack:
arp_announceandarp_ignore.
arp_announce:
DefinedifferentrestrictionlevelsforannouncingthelocalsourceIPaddressfromIPpacketsinARPrequestssentoninterface.
arp_ignore:
DefinedifferentmodesforsendingrepliesinresponsetoreceivedARPrequeststhatresolvelocaltargetIPaddresses.
kernelparameter:
arp_ignore-INTEGER
0-(default):
replyforanylocaltargetIPaddress,configuredonanyinterface
1-replyonlyifthetargetIPaddressislocaladdressconfiguredontheincominginterface
2-replyonlyifthetargetIPaddressislocaladdressconfiguredontheincominginterfaceandbothwiththesender'sIPaddressarepartfromsamesubneton thisinterface
3-donotreplyforlocaladdressesconfiguredwithscopehost,onlyresolutionsforglobalandlinkaddressesarereplied
4-7-reserved
8-donotreplyforalllocaladdresses
arp_announce-INTEGER
0-(default)Useanylocaladdress,configuredonanyinterface.
1-Trytoavoidlocaladdressesthatarenotinthetarget'ssubnetforthisinterface.
2-Alwaysusethebestlocaladdressforthistarget.
arp_ignore:
定义接收到ARP请求时的响应级别;
0:
只要本地配置的有相应地址,就给予响应;
1:
仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;
arp_announce:
定义将自己地址向外通告时的通告级别;
0:
将本地任何接口上的任何地址向外通告;
1:
试图仅向目标网络通告与其网络匹配的地址;
2:
仅向与本地接口上地址匹配的网络进行通告;
*****************************************************************************************************************************
LVS-DR工作原理详解
为了阐述方便,我根据官方原理图另外制作了一幅图,如下图所示:
VS/DR的体系结构:
我将结合这幅原理图及具体的实例来讲解一下LVS-DR的原理,包括数据包、数据帧的走向和转换过程。
官方的原理说明:
Director接收用户的请求,然后根据负载均衡算法选取一台realserver,将包转发过去,最后由realserver直接回复给用户。
实例场景设备清单:
说明:
我这里为了方便,client是与vip同一网段的机器。
如果是外部的用户访问,将client替换成gateway即可,因为IP包头是不变的,变的只是源mac地址。
① client向目标vip发出请求,Director接收。
此时IP包头及数据帧头信息如下:
②VS根据负载均衡算法选择一台active的realserver(假设是192.168.57.122),将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里。
此时IP包头及数据帧头信息如下:
③ realserver(192.168.57.122)在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文。
随后重新封装报文,发送到局域网。
此时IP包头及数据帧头信息如下:
④ 如果client与VS同一网段,那么client(192.168.57.135)将收到这个回复报文。
如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。
******************************************************************************************************************************
TUN:
集群节点可以跨越Internet;
RIP必须是公网地址;
director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
realserver网关不能指向director;
只有支持隧道功能的OS才能用于realserver;
不支持端口映射;
∙TheclusternodesdonotneedtobeonthesamephysicalnetworksegmentastheDirector.
∙TheRIPaddressesmustnotbeprivateIPaddresses.
∙TheDirectorcannormallyonlyinterceptinboundcommunicationbetweentheclientandtheclusternodes.
∙ThereturnpacketsfromtherealservertotheclientmustnotgothroughtheDirector.(Thedefaultgatewaycan'tbetheDIP;itmustbearouteroranothermachineseparatefromtheDirector.)
∙TheDirectorcannotremapnetworkportnumbers.
∙OnlyoperatingsystemsthatsupporttheIPtunnelingprotocolcanbeserversinsidethecluster.
session affility
四种静态:
rr:
wrr:
dh:
sh:
Destinationhashing
ThismethodalwayssendsrequestsforthesameIPaddresstothesameserverinthecluster.
Likethelocality-basedleast-connection(LBLC)schedulingmethod,thismethodisusefulwhentheserversinsidetheclusterarereallycacheorproxyservers.
Sourcehashing
CanbeusedwhentheDirectorneedstobesurethereplypacketsaresentbacktothesamerouterorfirewallthattherequestscamefrom.
ThisschedulingmethodisnormallyonlyusedwhentheDirectorhasmorethanonephysicalnetworkconnection,sothattheDirectorknowswhichfirewallorroutertosendthereplypacketbackthroughtoreachtheproperclientcomputer.
动态调度方法:
lc:
最少连接
active*256+inactive
谁的小,挑谁
wlc:
加权最少连接
(active*256+inactive)/weight
sed:
最短期望延迟
(active+1)*256/weight
nq:
neverqueue
LBLC:
基于本地的最少连接
DH:
LBLCR:
基于本地的带复制功能的最少连接
LVS:
ipvsadm/ipvs
INPUT:
-->POSTRUTING
ipvsadm:
管理服务:
-A
-E
-D
管理RS:
-a
-e
-d
查看:
-L|-l
-n
--stats
--rate
--timeout
--sort
--daemon
规则管理:
-C
-S
-R
ipvsadm:
管理集群服务
添加:
-A-t|u|fservice-address[-sscheduler]
-t:
TCP协议的集群
-u:
UDP协议的集群
service-address:
IP:
PORT
-f:
FWM:
防火墙标记
service-address:
MarkNumber
修改:
-E
删除:
-D-t|u|fservice-address
#ipvsadm-A-t172.16.100.1:
80-srr
管理集群服务中的RS
添加:
-a-t|u|fservice-address-rserver-address[-g|i|m][-wweight]
-t|u|fservice-address:
事先定义好的某集群服务
-rserver-address:
某RS的地址,在NAT模型中,可使用IP:
PORT实现端口映射;
[-g|i|m]:
LVS类型
-g:
DR
-i:
TUN
-m:
NAT
[-wweight]:
定义服务器权重
修改:
-e
删除:
-d-t|u|fservice-address-rserver-address
#ipvsadm-a-t172.16.100.1:
80-r192.168.10.8-m
#ipvsadm-a-t172.16.100.1:
80-r192.168.10.9-m
查看
-L|l
-n:
数字格式显示主机地址和端口
--stats:
统计数据
--rate:
速率
--timeout:
显示tcp、tcpfin和udp的会话超时时长
-c:
显示当前的ipvs连接状况
删除所有集群服务
-C:
清空ipvs规则
保存规则
-S
#ipvsadm-S>/path/to/somefile
载入此前的规则:
-R
#ipvsadm-R
LVS-NAT配置
1.[root@lvs~]#grep-ivs/boot/config-2.6.18-308.el5
2.#CONFIG_X86_VSMPisnotset
3.CONFIG_IP_VS=m
4.#CONFIG_IP_VS_DEBUGisnotset
5.CONFIG_IP_VS_TAB_BITS=12
6.#IPVStransportprotocolloadbalancingsupport
7.CONFIG_IP_VS_PROTO_TCP=y
8.CONFIG_IP_VS_PROTO_UDP=y
9.CONFIG_IP_VS_PROTO_ESP=y
10.CONFIG_IP_VS_PROTO_AH=y
11.#IPVSscheduler
12.CONFIG_IP_VS_RR=m
13.CONFIG_IP_VS_WRR=m
14.CONFIG_IP_VS_LC=m
15.CONFIG_IP_VS_WLC=m
16.CONFIG_IP_VS_LBLC=m
17.CONFIG_IP_VS_LBLCR=m
18.CO