专栏名称: 马哥Linux运维
马哥linux致力于linux运维培训,连续多年排名第一,订阅者可免费获得学习机会和相关Linux独家实战资料!
目录
相关文章推荐
InfoQ架构头条  ·  Safe C++提案能复制Rust的内存安全性吗? ·  4 天前  
51好读  ›  专栏  ›  马哥Linux运维

LVS集群详解

马哥Linux运维  · 公众号  · 运维  · 2017-02-09 08:05

正文



一、什么是集群


LVS(Linux Virtual Server)Linux虚拟服务器,将多台虚拟主机组织起来满足同一个需求。由国人章文嵩开发,通过LVS提供的负载均衡可实现一个高性能、高可用的服务器群集,从而以低成本实现最优的服务性能。




二、集群类型  


    LB:Load balancing    高可用集群

    HA:High Availavility    高可用集群

    HP:High Performace     高性能集群




三、lvs的常用集群方式及其详解


1、lvs是由用户空间命令和工作在内核上的netfilter的INPUT链上钩子函数所组成,可根据用户自定义集群实现转发。


2、lvs术语

CIP:客服端使用的IP地址

VIP:虚拟服务器IP地址

DIP:director用于和Real server之间进行通信的IP地址

RIP:后端real server的IP地址

RS:real server   


3、lvs类型

lvs-nat:lvs network address translation :lvs网络地址转换

lvs-dr:director routing 直连路由   

lvs-tun:tuneling 隧道

lvs-fullnat:功能更加强大的网络地址转换  



lvs-nat特性:


    多源ip的目标地址转换,通过将请求报文中的目标地址和目标端口修改为从后端主机中挑选出的某RS的RIP和端口实现转发。


    ①RIP和DIP需在同一个网络中,且需使用私有地址,RS的网关需指向DIP,保证响应报文经过RS进行转发,此模型中VS容易成为单点故障,成为系统的瓶颈。


    ②请求报文和相应报文都经由Director进行转发


    ③支持端口映射


    ④VS需为Linux,RS可以是OS  



LVS-DR特性: 


    通过为请求报文重新封装MAC地址进行转发,源MAC地址是DIP所在接口的MAC地址,目标MAC地址为调度器挑选出来的后端RS的MAC地址,IP首部不会发生改变。


    ①确保前端路由器将目标IP为vip的请求报文发往director


    ②RS的RIP可以是私网地址也可以是公网地址


    ③RS和director必须在同一个网络中


    ④请求报文必须经由调度器,但响应报文则一定不能有调度器转发,而是直接有real server响应客服端请求


    ⑤不支持端口映射,RS可使用OS    



确保前端路由器将目标IP为vip的请求报文发往director


解决方案:


    ①在路由器上静态绑定VIP和director的MAC地址,禁止real server响应 arp请求,禁止RS的vip通告


    ②arptables 


    ③修改RS的内核参数,并将VIP绑定lo的别名上,arp_ignore,arp_announce   



限制响应级别:arp_announce 


0:默认,把本机所有的接口信息向每个接口通告;

1:尽量避免向非本网络通告

2:总是避免;符合我们需要 

限制通告级别:arp_ignore

0:默认使用本地任意接口上配置的地址进行响应 

1:仅在请求的目标ip配置在本地主机的接口报文的接口上是,不给与响应



LVS-tun特性: 


    通过转发方式,不修改请求报文的ip首部,源ip为cip,目标ip为VIP,而是在源ip基础之上再封装一个ip首部,源ip为DIP,目标ip为调度器挑选的RS的VIP。


    ①RIP,DIP,VIP全为公网


    ②RS的网关不能指向DIP 


    ③请求报文经由director转发,但响应报文直接发往CIP


    ④不支持端口映射


    ⑤RS必须支持隧道功能   



LVS常用的调度算法:


静态的调度算法: 


    RR:Round Robin  #轮询,轮转


    WRR:Weighted Round Robin #加权轮询,根据后端每台real server的能承担的负载进行分配不同的请求个数


    SH:Source Hashing #源地址哈希,将来自于同一台IP地址的请求发往同一台后端的real server服务器


    DH:Destination Hashing #目标地址哈希,将发往同一个目标地址的请求始终发往前端调度器挑选出来的real server   


动态的调度算法:


根据算法及其RS当前负载情况进行调度


    LC:least connections,最少连接 

    WLC:weight least connections,加权最少连接 

    SED:shortest expections delay   

    NQ:never queue  

    LBLC:基于本地的最少连接

    LBLCR:带复制功能的基于本地的最少连接


ipvs命令: 


管理集群服务:增、删、改、查  

ipvsadm -A |E -t |u |f service-address [-s scheduler]

    -A:增加

    -E:修改

    -D:删除

    -L:查看

    -t:tcp,protocol type

    -u:udp,protocol type 

    -f:firewall mark

server-address:

    -t,tcp,vip:port

    -u,udp,vip:port 

    -f firewall mark  

    -s:指定调度算法类型,默认为WLC 

ipvsadm -C    #清除所有ipvs 

ipvsadm -Z [-t|u|f service-address]

-Z:清空计数器  


管理集群上的RS:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

    -a:增加

    -e:修改

    -r:real server_ip 

    -g,gateway,dr:直连路由

    -m,masquerde,nat,目标地址转换

    -i,ipip,tun,隧道 

    -w,权重

ipvsadm查看的其他子命令:

ipvsadm -L|l [options]

    -L:查看

    -n:数字格式显示

    --stats:统计数据

    --rate:速率统计

    -c,connetions:显示连接数

    -exact:精确显示 


保存

ipvsadm -S >/path/to/some_rule_file 

ipvsadm-save >/path/to/soem_rule_file 

恢复:

ipvsadm -R

ipvsadm-restore


实验拓扑图:


配置命令:

Real server1:

    route add default gw 192.168.184.128 

Real server2:

    route add default gw 192.168.184.128 


Virutal server:

    ipvsadm -A -t 10.1.10.3:80 -s rr 

    ipvsadm -a -t 10.1.10.3:80 -r 192.168.184.129 -m -w 1 

    ipvsadm -a -t 10.1.10.3:80 -r 192.168.184.130 -m -w 2 

    echo 1>/proc/sys/net/ipv4/ip_forward #开启ip_forward转发功能        


测试结果实验图:


LVS-DR实验拓扑图:



配置命令:


RS1: 


RS2: 


Real Server:


实验结果图:


如上述图所示,lvs-dr配置成功,前端调度器根据wrr算法调度后端服务器实现负载均衡调度,lvs配置很简单,但原理非常重要,只有懂了原理,才能真正的掌握好lvs.     



作者:小耳朵

来源:http://purify.blog.51cto.com/10572011/1866256



点击“阅读原文”查看更多技术文章