使用lvs搭建负载均衡集群

有时候,单台服务器的性能可能无法应付大规模的服务请求,且其一旦出现故障,就会造成用户在一段时间内无法访问。通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益。

集群是一组相互独立的、通过网络互联的计算机组,并以单一系统的模式加以管理,或用于分摊负载,或用于增强可靠性,或用于高速计算。

一、集群类型

LB:Load Balancing,负载均衡集群,用于消除单点故障,当一个节点出现故障而无法正常提供服务时,自动、快速地切换到另外的节点上去;常见软件或实现方式有lvs, haproxy, nginx

HA:High Availability,高可用集群,将客户端的请求遵从恰当的负载均衡原则分配给各节点的集群;heartbeat, corosync+pacemaker, cman+rgmanager, cman + pacemaker, keepalived

HPC:High Performance Computing,高性能计算集群;hadoop

二、lvs工作原理

lvs由 ipvsadm/ipvs 这两段代码组成,ipvsadm是工作于用户空间的程序,用于编写规则(定义集群服务、调度标准,指明有哪些后端服务器等)并送给ipvs;ipvs是集成于内核中的真正实现调度功能的代码,工作于netfilter的INPUT链上,它会根据指定的调度标准确定将匹配的请求报文调度到哪台后端服务器,然后对请求报文做一定处理(或修改目标ip、或修改目标MAC等)并转到POSTROUTING链上发往相应的后端服务器

三、lvs相关术语

director:调度器,即提供ipvsadm/ipvs,直接面向客户端请求,实现调度功能的主机

real server:后端真实服务器,即真正处理客户端请求的服务器

CIP:client ip

VIP:virtual ip,客户端请求的目标ip,要配置在director上

DIP:director ip

RIP:real server ip

四、lvs的类型

1、lvs-nat

这种模型中,响应报文会经由director转发回client,因此real server和director要位于同一子网中且real server的网关必须指向director,director会对请求报文和响应报文分别做DNAT(目标地址转换)和SNAT(源地址转换)。

nat类型的特性:

①RS可使用私有地址来隐藏服务器;RS的网关必须指向DIP;

②请求和响应都要经过Director,因此在高负载场景中,Director易成为性能瓶颈;

③支持端口映射;

④RS可以使用任意OS;

2、lvs-dr

这种模型中,响应报文不会流经director,而是直接响应给client,因此在real server上必须也配置VIP,且要将其隐藏,即不允许通告和响应arp解析请求,否则请求报文可能不经director而直接到达real server;director不能给请求报文做IP地址转换,只能修改其目标MAC地址以将其送往real server,因此,要求director和real server在同一物理网络中。

dr类型的特性:

⑴保证前端路由将目标地址为VIP的报文统统发往Directory,而不能是RS;

解决方案:

①静态地址绑定:在前端路由器上操作(问题:未必有路由操作权限)

②aprtables

③修改RS上内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求;

⑵RS可以使用私有地址;也可以使用公网地址,此时可通过互联网通过RIP对其直接访问;

⑶RS跟Directory必须在同一物理网络中;

⑷请求报文经由Director,但响应报文不经过Director,因此相比NAT模型,Director负荷大大减小。

⑸不支持端口映射;

⑹RS可以是大多数常见的OS;

⑺RS的网关绝不允许指向DIP;

⑻缺点:RS上绑定vip,风险大

lvs-dr的配置:

⑴RS上首先配置内核参数:

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

说明:

arp_ignore:如何响应接收到的ARP请求;默认为0,表示只要本机有,就响应;1表示仅当请求解析的IP地址为接收请求报文的端口地址时才进行响应

arp_annouce:如何通告本机地址;默认为0,通告本机所有接口地址,2表示仅通告网络直连的接口的地址

这一步的作用在于禁止通告VIP和响应对VIP的ARP解析请求

⑵然后在RS上配置VIP:

ifconfig
lo:0 VIP netmask 255.255.255.255 broadcast VIP up

route add -host VIP dev lo:0  #请求报文本来是物理接口eth#接收的,需要添加一条使请求报文到达VIP所在接口(VIP通常配置在lo:0上)的路由,这样响应报文的源地址才能是VIP。

3、lvs-tun

lvs-tun不同于lvs-dr的地方在于它允许director和real server在不同的网络中,这是通过隧道机制实现的。在这种模型中,director会在请求报文原有IP首部之外再封装一层首部,这样,请求报文的IP首部就变成:内层IP首部(源地址:CIP,目标地址:VIP),外层IP首部(源地址:DIP,目标地址:RIP)。real server收到报文后,先将报文解封获得原来目标地址为VIP的报文,发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

tun类型的特性:

①RIP、VIP、DIP全部是公网地址;

②RS的网关不会也不可能指向DIP;

③请求报文经由Director,但响应报文必须不能经过Director;

④不支持端口映射;

⑤RS的OS必须支持隧道功能,一般需安装隧道网卡;

⑥由于该模型允许Director和RS不在同一物理网络中,因此常用于异地容灾的场景中

lvs-tun的配置可参考http://www.linuxidc.com/Linux/2012-09/71340p3.htm

4、lvs-fullnat

同时修改请求报文的源地址和目标地址(CIP--VIP ==> DIP--RIP);实现director和RS之间跨子网通信,并且in/out流都会经过director;支持端口映射。

fullnat模式没有被整合进linux内核,若要使用需要向内核打补丁,并且不被ipvsadm支持,不过可以使用keepalive生成规则。

四、lvs调度方法

grep -i ‘VS‘ /boot/config-VERSION

⑴静态方法:仅根据调度算法本身进行调度

rr: round robin,轮流,轮询,轮叫

wrr: weighted round robin, 加权轮询

sh: source hashing,源地址hash,表示将来源于同一个CIP的请求始终定向至同一个RS;SESSION保持;

dh: destination hashing, 目标地址hash,后端一般为缓存服务器,可提高缓存命中率

⑵动态方法:根据算法及各RS当前的负载状况进行调度

lc: least connection,最少连接

Overhead=Active*256+Inactive  #overhead值越小越优先被选中,若overhead值一样,则根据real server列表自上而下挑选

wlc: weighted lc,默认调度方法

Overhead=(Active*256+Inactive)/weight

sed: shortest expection delay;

wlc有个缺点,就是当overhead值相同时,权重小的若在列表中靠前则会被优先选择,当请求量只有一个或很少时,这种调度不合适,而sed调度的主要目的在于让权重大的优先接受请求

Overhead=(Active+1)*256/weight

nq: Never Queue,先按权重轮询一圈,然后依照sed的overhead值选择

lblc: Locality-Based Least Connection,动态版dh

lblcr:Replicated lblc

五、使用ipvsadm配置director

yum -y install ipvsadm

⑴定义一个集群服务:

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

-A: 添加

-E: 修改

-f: firewall mark

service-address:

-t|u: VIP:Port

-f: #

例如:ipvsadm -A -t 172.16.100.7:80 -s wlc

⑵向一个已经存在集群服务添加一个RS:

ipvsadm -a|e -t|u|f service-address -r server-address [options]

-a: 添加RS记录

-e: 修改RS记录

options:

-w weight

-g, --gatewaying: 指定lvs工作模式为DR模式,缺省模式

-i, --ipip: ipip encapsulation (tunneling)

-m, --masquerading: masquerading (NAT)

例如:ipvsadm -a -t 172.16.100.7:80 -r 10.0.0.8 -m -w 2

⑶查看已经定义的集群服务及RS:

ipvsadm -L -n

-c: 查看各连接

--stats: 统计数据

--rate: 速率

--exact: 精确值

⑷从集群服务中删除RS:ipvsadm -d -t|u|f service-address -r server-address

⑸删除集群服务:ipvsadm -D -t|u|f service-address

⑹清空所有的集群服务:ipvsadm -C

⑺保存集群服务定义:

ipvsadm -S > /path/to/some_rule_file

ipvsadm-save > /path/to/some_rule_file

⑻让规则文件中的规则生效:

ipvsadm -R < /path/from/some_rule_file

ipvsadm-restore < /path/from/some_rule_file

⑼基于防火墙标记定义集群服务

功能:将同属于同一组应用的多个不同端口的服务定义成一个集群服务,统一调度;例如http和https

结合netfilter来实现一种集群服务定义机制;

①在mangle表的PREROUTING链定义规则,实现指定防火墙标记;

iptables -t mangle -A PREROUTING -d VIP -p {tcp|udp} --dport PORT -j MARK --set-mark #

②基于此前的标记定义集群服务;

ipvsadm -A -f # [-s METHOD]

ipvsadm -a -f # -r RS [options]

例如:

iptables -t mangle -A PREROUTING -d 192.168.30.13 -p tcp -m multiport --dports 80,243 -j MARK --set-mark 2

ipvsadm -A -f 2 -s wlc

ipvsadm -a -f 2 -r 172.16.100.2 -g w 3

⑽lvs持久连接功能

无论使用什么调度方法,持久连接功能都能保证在指定的一段时间内,来自同一个客户端的请求始终被定向至同一个RS。当使用LVS持久连接时,调度器使用连接跟踪(持久连接模板)来记录每一个客户端和给其分配的real server的映射关系

-p, --persistent [timeout]:使用持久连接,默认时长为300秒

持久连接类型:

①PCC(persistent client connections):持久客户端连接,又称零端口连接

在基于tcp或udp定义集群服务时,将来自于同一个客户端对所有端口的请求,始终定向至此前选定的RS;以0作为端口号

例:ipvsadm -A -t 172.16.100.7:0 -s rr -p

②PPC(persistent port connections):持久端口连接,将对同一端口的请求,始终定向至此前选定的RS;单服务调度;各集群服务分开调度

例:ipvsadm -A -t 172.16.100.7:21 -s rr -p

③PFMC(persistent
firewall mark connections):持久防火墙标记连接

iptables -t mangle -A PREROUTING -d 192.168.30.13 -p tcp -m multiport --dports 80,243 -j MARK --set-mark 2

ipvsadm -A -f 2 -s wlc -p 600

六、Session持久机制:

①session绑定:始终将来自同一个源IP的请求定向至同一个RS;没有容错能力;有损均衡效果;

②session复制:在RS之间同步session,每个RS拥有集群中的所有的session;对大规模集群不适用;

③session服务器:利用单独部署的服务器来统一管理集群中的session;

七、real server的健康状态检测

lvs不具备后端RS健康状态检测功能,需要借助keepalive,keepalive不仅能为lvs提供高可用,还可以给lvs生成规则。

1、如何检测RS的健康状态:

利用集群服务依赖的协议进行检测

利用端口扫描或探测类工具对指定协议的端口进行探测

在网络层探测

2、处理措施:

①自动上下线各RS;

online --> fail,探测三次及以上;

offline --> ok,一次即可;

②所有RS均故障时,应该提供一个back server;

ipvsadm -a -t 192.168.30.13:80 -r 127.0.0.1 -m -w 0

时间: 2024-08-02 15:12:32

使用lvs搭建负载均衡集群的相关文章

linux下lvs搭建负载均衡集群

常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat 常用商业集群硬件有:F5,Netscaler,Radware,A10等 一.LVS介绍 LVS是linux virtual server的简写linux虚拟服务器,是一个虚拟的服务器集群系统,可以再unix/linux平台下实现负载均衡集群功能.该项目在1998年5月由章文嵩博士组织成立. LVS的三种工作模式:1.VS/NAT模式(Network address translatio

LVS搭建负载均衡集群

1.集群的概念: 服务器集群就是将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器 2.集群的分类: 高可用集群(HA) 主要用于高可用解决方案的实现,节点间以主备形式,实现容灾:在大型故障的情况下实现快速恢复,快速提供服务 工作方式: 主从方式:主机工作,备机监控 互为主从:两服务器同时在线,一台服务器故障可切换到另一台上.有效的利用服务器资源,但当服务器故障时候,将可能导致服务器负载过大 多台服务器主从:大部分服务器在线使用,小部分监控:若有部分服务器故障,可切换到指定

Linux集群:LVS搭建负载均衡集群(二)

一.DR模式LVS搭建 1.准备工作 调度器dir:192.168.242.128 真实服务器rs1:192.168.242.129,网关恢复为之前的原始网关 真实服务器rs2:192.168.242.130,网关恢复为之前的原始网关 VIP:192.168.242.110 2.dir上编写脚本 [[email protected] ~]# vim /usr/local/sbin/lvs_dr.sh #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forw

RHEL6 搭建LVS/DR 负载均衡集群 案例

搭建LVS/DR 负载均衡集群 案例 实验拓扑图: 操作流程: Director Server :        192.168.4.50 pc50 安装并启用ipvsadm 配置辅助IP地址 创建虚拟服务器,向虚拟服务器中加入节点 Real Server:        192.168.4.51 pc51        192.168.4.52 pc52 配置WEB 服务器 配置辅助IP地址,调整内核参数 Clinet :192.168.4.253 pc253 连接虚拟服务器测试 环境准备:

LVS DR 负载均衡集群

LVS DR 负载均衡集群 试验准备:五台主机ABCDE,主机ABCDE均为单网卡,IP地址分别为192.168.10.2,192.168.10.3,192.168.10.4,192.168.10.5,192.168.10.6.主机A作为内网客户端,主机B负载均衡调度器,主机C和主机D作为网站服务器,主机E作为共享存储,均清除防火墙和SELINUX.操作系统均为RHELx86_64,为最小化安装. 主机A操作 #vim /etc/sysconfig/network-scripts/ifcfg-e

linux集群系列(3) --- LVS之负载均衡集群DR实例

一.简介     1.1.  负载均衡集群:LB (load balancing) LVS 是linux virtual server 的简写,即linux的虚拟服务器,是一个虚拟的服务器集群系统.ip负载均衡技术是在负载调度器的实现技术中效率最高的,在已有的ip负载均衡技术中,主要通过网络地址转换(即VS/NAT 技术).由于使用nat技术会使分派器成为瓶颈,所以提出了通过ip隧道实现虚拟服务器(即VS/TUN)和通过直接路由实现虚拟服务器的方法即VS/DR. VS/NAT.VS/TUN和VS

Centos7搭建lvs+keepalive负载均衡集群

keepalived简介 keepalived是分布式部署解决系统高可用的软件,结合lvs(LinuxVirtual Server)使用,解决单机宕机的问题. keepalived是一个基于VRRP协议来实现IPVS的高可用的解决方案.对于LVS负载均衡来说,如果前端的调度器direct发生故障,则后端的realserver是无法接受请求并响应的.因此,保证前端direct的高可用性是非常关键的,否则后端的服务器是无法进行服务的.而我们的keepalived就可以用来解决单点故障(如LVS的前端

搭建LVS+Keepalived负载均衡集群

这两天学习了LVS+Keepalived负载均衡的搭建.网上的教程非常多,可是动起手来遇到不少问题. 如今把自己的搭建过程以及遇到的一些问题给分享下. 硬件环境: Macbook 8G内存.250G SSD,双核 软件环境: 因为资源有限.搭建了4个虚拟机. 虚拟机 [[email protected] work]# uname -a Linux rs-1 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64 x86_64 x86_6

Linux集群:搭建负载均衡集群(一)

一.负载均衡介绍 主流开源软件LVS.keepalived.haproxy.Nginx等: 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,可以当做7层使用: keepalived的负载均衡功能其实就是lvs: lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而Nginx仅仅支持HTTP,HTTPS,mail,haproxy也支持MySQL这种: 相比较来说,LVS这种4层的更稳定,能承受更多的请求,而Nginx这种7