理解lvs的组成:
Lvs由lvs和ipvs和ipvsadm组成
Lvs的3种工作模式:
Net模式,dr模式,TUN(ip隧道模式)
Lvs的调度算法:
静态调度算法四种:
1.轮询调度(rr)
将所有请求平均的分发到每个集群节点上,即轮流调度。
2.加权轮询调度(wrr)
由于不同的服务器性能不同,因此要考虑让性能高的节点多承担一些请求,这就需要定义每个节点的权重。调度器根据该节点的权重来判断分发给它的请求量。
也就是以多个节点它们之间的权重比例来分发。
3.源地址hash(Sourcehash,sh)
用于实现会话绑定到某个具体节点。根据请求的来源地址进行请求的分发,用于实现将某个客户端的所有请求都分发到一个固定的服务器上,
4.目标地址hash(Destination Hash)
用于将同一类型的请求转发到一个固定节点,例如将以 .jgp、.png等结尾的请求转发到同一个节点。这种算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这种调度算法主要应用在使用了缓存节点的系统中。例如A用户访问 .html时被转发到后端的某个缓存服务器,当缓存中没有时就访问后端的web服务器,并且响应用户后将该资源放入html的缓存服务器;B用户再请求某个html时,依然被转发到html的缓存服务器,这样B用户就可以直接获取这个资源而不用再请求后端web服务器。
动态调度算法六种:
1.最少连接算法(LeastConnection,LC)
通过计算后端服务器当前的活动连接数和非活动连接数的总数,并对多个节点的结果进行比较来决定将请求转发到哪个节点,哪个节点的值最小就将请求转发到哪个节点。因此这种算法会考虑到每个服务器节点当前的连接数,并挑选一个连接数最小(相对最空闲)的节点进行请求转发。
2.加权最少连接(WLC)
因为每个服务器节点的性能可能不同,因此需要性能高的服务器负担更多的请求,所以在最少连接算法的基础上结合服务器节点的权重来进行请求调度。
3.最少期望延迟调度算法(sed)
WLC调度算法有一定的缺陷。当请求量比较少的时候,该算法的计算结果是将请求更多的指向了权重低的服务器,即性能较差的服务器;而我们
希望在请求少的时候将请求尽可能转发到性能高的服务器上。sed这种调度算法为了解决WLC的缺点而生,它不再考虑非活动连接。这种算法在请求量较少的时候也能实现类似加权轮询调度的效果。
4.永不排队(Never Queue,NQ)
这种算法在请求量比较小的时候可以避免sed算法存在的问题,也就是会将请求在sed的结果上进行轮询调度。例如sed算法的结果当前已经将请求有转发到A、B节点,新的请求又被计算到A节点,此时如果有C节点,则NQ算法会将这个新的请求调度到C节点而不是继续调度到A节点而不会理会此时A的权重问题,权重的判断仅仅在sed算法这个步骤进行考虑。也就是NQ算法在sed算法的结果之后增加了轮询的机制(也会考虑一定程度的权重),因此这种算法就会尽量不然请求出现排队的情况,即避免了某个节点非常繁忙而其他节点相对空闲的情况。避免了权重小的节点不会出现没有请求被调度的情况。
5.基于本地的最少连接(Locality-Based Least-Connection,LBLC)
这种算法本质就是LC算法或理解为WLC算法。但是该算法的特性是,注意实现目标是要和静态调度算法中的DH算法一样,用于将同一类请求转发到一个固定节点,因此常用于缓存服务器的场景。但是DH算法因为是静态调度算法,不会考虑后端(缓存)服务器的当前连接数,但LBLC就是在DH算法的基础上考虑后端服务器当前的连接数。如果(缓存)服务器使用了集群(如Memcached的主主复制),因为所有节点的缓存数据都相同,因此要使用负载均衡算法来实现请求按照当前服务器的负载进行转发。而如果后端的每个缓存服务器的内容不同,使用LBLC就会破坏命中率并且导致多个缓存节点缓存了相同的数据,因此为了提高缓存命中率以及防止多个节点缓存相同的数据,一般就不采用LBLC而直接采用DH。所以,要提高负载均衡效果就要破坏缓存命中率以及多个缓存节点会缓存相同数据;要提高缓存命中率已经防止多个节点缓存相同的数据,就会降低负载均衡效果。所以这需要找到一个平衡点,根据实际需要来决定。
6.基于本地的带有复制功能的最少连接调度算法(LBLCR)
为了解决LBLC算法的缺陷,即提高缓存命中率且防止多个缓存节点缓存相同数据,并且保证负载均衡效果。就需要使用这里的调度算法。LBLC就是一个DH+LC的算法,并不会考虑缓存命中率而只考虑尽可能的负载均衡。LBLCR这种算法中,了可以理解为后端多个缓存服务器可以通过内容交换协议实现缓存共享。因此无论请求哪个缓存节点,如果该节点没有数据,它不会直接到Web服务器上查询,而是试图到另一个缓存节点中查询,如果有则将其拿过来并放入当前的缓存服务器,这样就实现一定程度的缓存复制功能,可以提高缓存命中率。
注意,这里的缓存共享并不是完全的Replication,而是仅仅当请求的节点没有需要的数据时去其他缓存节点查询所请求的缓存数据。但是这种机制因为要到其他缓存节点查询,所以性能会比直接使用DH差一些。这种算法也不会防止多个节点缓存相同的数据,而只能保证缓存命中率。
Lvs管理工具ipvsadm:
Ipvsadm的两种安装方式:
一、RPM安装:
1、确定自己linux服务器内核 cd /usr/src/kernels,根据内核版本到http://www.linuxvirtualserver.org/software下载对应版本ipvsadm,我的2.6.18-308.el5-x86_64对应为ipvsadm-1.24-6.src.rpm
2、修改 /usr/src/redhat/SPECS/ipvsadm.spec,将Copyright:改成License。
3、ln -s /usr/src/kernels/2.6.18-308.el5-x86_64 /usr/src/linux
4、rpmbuild -bb /usr/src/redhat/SPECS/ipvsadm.spec
二、TAR安装:
- wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
- tar -zxvf ipvsadm-1.24.tar.gz
- ln -s /usr/src/2.6.18-308.el5-x86_64 /usr/src/linux
- make && make install
- whereis ipvsadm
两个细节注意:一是不需要./configure,二是注意根据内核版本找ipvsadm版本。
http://blog.csdn.net/beyondlpf/article/details/17963907
Ipvsadm使用方法:
Ipvsadm基本命令:
-A添加一个虚拟服务器,可跟ip或者ip:80(端口)
-E编辑一个虚拟服务器
-D删除一个虚拟服务器
-C清空虚拟服务器
-R还原规则
-S保存规则
-a添加一个真实服务器(RS)
-e编辑一个真实服务器
-d删除一个真实服务器
-t使用tcp
-u使用udp
-L list查看虚拟服务器列表
-s指定算法
-r指定真实服务器 RIP
-g指定工作模式为DR模式
-i指定工作模式为tunl模式
-m指定工作模式为NAT模式
-w指定RS权重
-c查看连接状态可与L使用
-n以数字的形式显示输出结果
Lvs的常见故障及解决:
一、裂脑
由于两台高可用服务器对之间,在指定时间内,无法相互检测到对方的心跳,而各自启动故障切换转移功能,取得资源服务及所有权,而此时的两台高可用服务器对都还或者,并且正在运行,这样就会导致同一个IP或服务在两段同时启动而发生冲突的严重问题,最严重的是两台主机占用同一个VIP,当用户写入数据的时候可能同时写在两台服务器上。
1)产生裂脑原因
1、心跳链路故障,导致无法通信
2、开启防火墙阻挡心跳消息传输
3、心跳网卡地址配置等不正确
4、其他:心跳方式不同,心跳广播冲突,软件bug等
备注:
1、心跳线坏了(故障或老化)
2、网卡相关驱动坏了,IP配置即冲突问题(直连)
3、心跳线间连接的设备故障(网卡及交换机)
4、仲裁机器出问题
2)防止裂脑的方法
1、采用串行或以太网电缆连接,同时用两条心跳线路
2、做好裂脑的监控报警,在问题发生时人为第一时间介入仲裁
3、启用磁盘锁,即正在服务的一方只在发现心跳线全部断开时,才开启磁盘锁
4、fence设备(智能电源管理设备)
5、增加仲裁盘
6、加冗余线路
二、lvs负载不均的原因
原因分析
①lvs自身的会话保持参数设置。优化:使用cookie代替session
②lvs调度算法设置,例如rr、wrr、
③后端RS节点的会话保持参数,例如apache的keepalive参数
④访问量较少的情况下,不均衡的现象更加明显
⑤用户发送的请求时间长短和请求资源多少以及大小
三、lvs的排错
1、调度器上lvs调度规则及IP正确性
2、RS节点上VIP和ARP抑制的检查
生成思路
1)对绑定的VIP做实时监控,出问题报警或自动处理后报警
2)把绑定的VIP做成配置文件,例如: vim /etc/sysconfig/network-scripts/lo:0
ARP抑制的配置思路
1)如果是单个VIP,那么可以用stop传参设置0
2)如果RS端有多个VIP绑定,此时,即使是停止VIP绑定也不一定不要置0.
3)RS节点上自身提供服务的检查
4)辅助排除工具有tcpdump、ping等
5)负载均衡和反向代理三角形排查理论
先检查客户端到服务端—>然后检查负载均衡到RS端—>最后检查客户端到LVS端
————————————————