Linux集群之LVS

一、LVS简介

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

负载均衡集群(Load Balancing,简称为LB)从工作在协议层来划分为TCP和应用层;TCP协议层是根据请求的目标地址和端口进行调度;应用层协议是根据请求的内容进行调度,而且此种调度为“代理”方式,即反向代理。

二、LVS组成

LVS软件由ipvs和ipvsadm两个程序组成,ipvs是工作在内核中的;ipvsadm是工作在用户空间,将为工作在内核空间的ipvs定义集群服务,作出调度决策算法的功能的一种工具,从功能上来看类似于netfilt.

2.1 LVS工作原理

ipvs工作于netfilter的INPUT链上;ipvsadm用于在ipvs上定义集群服务:同时也得定义此集群服务对应于有哪个后端主机可用;根据所指定的调度方法(算法)作出调度决策;

当用户的请求到达本机时,首先经由PREROUTING链,到达PREROUTING链后进行路由判断,经路由判断后发现是送往本机的,将用户请求送往INPUT链接中,此时ipvs将检查INPUT链上的所有经过的报文,判断是不是请求的集群服务,如果请求的是集群服务,ipvs将“拦下”服务,经过调度算法挑选出一个时先定义好的主机,并将用户请求服务转发出去,经由网络将用户请求送往后端主机并为用户提供服务响应。

 

2.2 LVS常见术语约定

为用户提供挑选后端服务器的主机称为调度器(Director);后端提供服务的主机称为Real Server (简写为RS)。

客户端(Client)的IP称为CIP;被DNS域名解析后的IP称为VIP(Director Virtual IP);调度器面向后方的集群的IP称为DIP(Director IP);Real Server服务器上的IP称为RIP(Real Server)。

2.3 LVS的类型

LVS的类型分为lvs-nat、lvs-dr、lvs-tun、lvs-fullnat。

三、lvs-nat

lvs-nat非常类似于DNAT,支持多目标转发,它是通过修改请求报文的目标地址并根据调度算法所挑选出的某RS的RIP来进行转发。

当用户请求报文到达Director时,源地址为CIP目标地址为VIP,Director经过内部路由后发现是送往本机的,就送往INPUT链,ipvs将检查在INPUT链发现对CIP请求的是集群服务,根据在ipvs中指明的RS1和RS2,并根据内部的调度算法,挑选出一台RS为本次请求服务,此时更改请求报文中的目标地址改为挑选出的RS的IP地址如“CIP:RIP1”,并经由forward链转发出去,在报文到达RS1服务器是源地址是CIP目标地址是RS1的IP地址(即本机的IP地址),本机运行着有用户请求服务,RS1进行报文响应,响应报文的源地址是RIP1,目标地址是CIP,即“RIP1:CIP”;到响应报文达到Director时,Director根据内部的NAT追踪机制,发现用户访问的是CIP,因此Director将进行修改源地址为VIP,报文格式“VIP:CIP”。

lvs-nat架构特性:

(1) RS应该使用私有地址,即RIP应该为私有地址;各RS的网关必须指向DIP;

(2) 请求和响应报文都经由Director转发;高负载场景中,Director易于成为系统瓶颈;

(3) 支持端口映射;

(4) RS可以使用任意类型的OS;

(5) RS的RIP必须与Director的DIP在同一网络;

四、lvs-dr

lvs-dr模型即为直接路由;Director在实现转发时不修改请求的IP首部,而是通过直接封装MAC首部完成转发;目标MAC是Director根据调度方法挑选出某RS的MAC地址;拓扑结构有别有NAT类型;

当用户请求到达路由器,路由器经过路由到达交换机,并把用户请求交给Director,Director经过调度至RS服务器,RS服务器在响应是并不经过Director,而是直接经交换机-->路由器送往用户。

在Director服务器的网卡上配置DIP,在网卡别名上配置VIP;在RS服务器上的网卡配置RIP,把VIP配置到RS服务器内部的lo网卡的别名上如lo:1。当用户请求到达时,首先到达路由器,路由器通过路由送往另一个接口,此接口经过ARP广播,解析到内网中VIP的MAC地址。此时路由器会收到三个VIP的MAC地址,显然这不是我们希望得到的结果,我们得想办法让RS服务器不能响应路由器ARP广播请求解析得到VIP的MAC地址,或者响应了不让响应请求出去;这样就能保证只有Director的VIP会响应ARP广播请求解析VIP的MAC地址。当路由器得到VIP的MAC地址时,路由器会进行封装报文帧,在源报文的基础上加上自己的MAC地址和ARP广播请求解析VIP的MAC地址,然后报文到达Director服务器,Director发现请求的报文是本机的地址,把报文送往INPUT链,ipvs发现这是一个请求的集群服务,根据调度算法挑选出一个RS如RS1,并ARP广播请求解析RS1的RIP地址的MAC得到RS1的RIP地址的MAC地址,源IP地址和目标IP没有变,只是修改源MAC和目标MAC地址变成了Director的和RS1的RIP的Mac地址。当报文送往RS1服务器,RS1服务器判断源IP和目标IP是自己本机上,并响应服务封装报文,源IP是VIP,目标IP是CIP,将报文发送给RS1设置的网关地址路由器接口。

此时会有一个问题,在Linux中由哪块网卡发送出去目标IP就是哪块网卡的IP地址,这里可以要求强求报文必须由lo出去,但lo出不去的,可以通过forward链转发出去的。

架构特性:

(1) 保证前端路由器将目标地址为VIP的请求报文通过ARP地址解析后送往Director;

解决方案:

静态绑定:在前端路由直接将VIP对应的目标MAC静态配置为Director的MAC地址;

arptables:在各RS上,通过arptables规则拒绝其响应对VIP的ARP广播请求;

内核参数:在RS上修改内核参数,并结合地址的配置方式实现拒绝响应对VIP的ARP广播请求;

(2) RS的RIP可以使用私有地址;但也可以使用公网地址,此时可通过互联网上的主机直接对此RS发起管理操作(不安全);

(3) 请求报文必须经由Director调度,但响应报文必须不能经由Director;

(4) 各RIP必须与DIP在同一个物理网络中;

(5) 不支持端口映射;

(6) RS可以使用大多数的OS;

(7) RS的网关一定不能指向Director;

五、lvs-tun

lvs-tun不修改请求报文IP首部,而是通过IP隧道机制在原有的IP报文之外再封装IP首部,经由互联网把请求报文交给选定的RS;

架构特性:

(1) RIP, DIP, VIP都是公网地址;

(2) RS的网关不能,也不可能指向DIP;

(3) 请求报文由Director分发,但响应报文直接由RS响应给Client;

(4) 不支持端口映射;

(5) RS的OS必须得支持IP隧道;

六、lvs-fullnat

lvs-fullnat并不是LVS官方的模型,这是由淘宝开发团队开发的一种模型,并没有被官方收录至LVS中,要使用lvs-fullnat模型需要重新经内核打补丁,并重新编译内核。

lvs-fullnat:通过请求报文的源地址为DIP,目标为RIP来实现转发;对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发;

架构特性:

(1) RIP,DIP可以使用私有地址;

(2) RIP和DIP可以不在同一个网络中,且RIP的网关未必需要指向DIP;

(3) 支持端口映射;

(4) RS的OS可以使用任意类型;

(5) 请求报文经由Director,响应报文经由Director;

七、LVS调度算法

类型 算法
说明
静态方法 RR round-robin, 轮询;
WRR weighted round-robin, 加权轮询;Overhead=conn/weight
SH Source ip Hashing,源地址哈希;把来自同一个地址请求,统统定向至此前选定的RS;
DH Destination ip Hashing, 目标地址哈希;把访问同一个目标地址的请求,统统定向至此前选定的某RS;
动态方法 LC least connection:最小连接,Overhead=Active*256+Inactive
WLC weighted least connection:加权最小连接,Overhead=(Active*256+Inactive)/weight;默认的调度算法
SED Shorted Expection Delay:最短期望延迟,Overhead=(Active+1)*256/weight
NQ Never Queue:永不排序
LBLC Local-Based Least Connection,基于本地的最小连接:动态方式的DH算法
LBLCR Replicated LBLC:带复制的LBLCR

八、LVS-NAT实现

通过前面的原理介绍,这里来实现一下lvs-nat模型,将要使用三台虚拟机,客户端就用物理机来访问;RS-1和RS-2的网卡要使用Vmware Workstation中的仅主机模式,Director要使用两张网卡,一个用于当VIP一个用于当DIP,DIP网卡要使用仅主机模式与后端RS使用一个私有网络地址;

Real Server分别开启Web服务器用于测试,页面就是种RealServer的名称,使用rr调度算法进行轮询,这样更容易看出效果。

8.1 RealServer的配置

(1)配置IP地址及网关

ifconfig 192.168.190.81/24 up  #设置IP地址,如果你已经设置好了,此步可以省略的

route add default gw 192.168.190.100   设置默认网关

[[email protected] ~]# route  -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.190.0   0.0.0.0         255.255.255.0   U    0      0        0 eth0
0.0.0.0         192.168.190.100 0.0.0.0         UG   0      0        0 eth0

(2)启动httpd服务

# service httpd start

8.2 Director的配置

(1)配置IP地址

如果你已经设置好了,此步可以省略;

ifconfigeth0 172.16.9.100/16 up
 ifconfigeth1 192.168.190.100/24 up

(2)开启路由间转发

echo 1 > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat/proc/sys/net/ipv4/ip_forward

1

(3)配置LVS

如果你没有安装ipvsadm,需要在配置好yum源之后直接yum install ipvsadm即可;

ipvsadm -C
 ipvsadm -A -t 172.16.9.100:80 -s rr
 ipvsadm -a -t 172.16.9.100:80 -r192.168.190.81:80 -m
 ipvsadm -a -t 172.16.9.100:80 -r192.168.190.82:80 -m

#-C:表示清空ipvsadm中的所有定义的集群服务

#-A:定义集群服务

#-t:承载的应用层协议为基于TCP协议提供服务的协议;其service-address的格式为“VIP:PORT”,如“172.16.100.6:80”;

#-s:指定调度算法,默认为wlc

#-a:创建集群服务上的RS

#-r:指明RS,server-address格式一般为“IP[:PORT]”;注意,只支持端口映射的lvs类型中才应该显式定义此处端口

#-m:指明LVS的类型为nat

[[email protected] ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP 172.16.9.100:80 rr
 -> 192.168.190.81:80           Masq    1      0         0         
 -> 192.168.190.82:80           Masq    1      0         0

(4)在浏览器中访问测试

在浏览器中输入VIP的地址,不断的刷新将会出现轮询的效果。

九、LVS-DR实现

Real Server分别开启Web服务器用于测试,页面就是种RealServer的名称,使用rr调度算法进行轮询,这样更容易看出效果。

9.1 Real Server的配置

各Real Server的配置都是一样的,这们就介绍一个Real Server的配置即可。

(1)抵制ARP对VIP的请求

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

(2)配置VIP地址及路由

ifconfig lo:0 172.16.9.100 netmask255.255.255.255 broadcast 172.16.9.100 up
route add -host 172.16.9.100 dev lo:0

(3)启动HTTP服务

service httpd start

(4)在浏览器中访问测试

9.2 Director上的配置

(1)配置VIP

ifconfig eth0:0 172.16.9.100 netmask255.255.255.255 broadcast 172.16.9.100 up
route add -host 172.16.9.100 dev eth0:0

(2)配置ipvs服务

 ipvsadm-A -t 172.16.9.100:80 -s rr
 ipvsadm -a -t 172.16.9.100:80 -r 172.16.9.81-g
 ipvsadm -a -t 172.16.9.100:80 -r 172.16.9.82-g

(3)检查ipvs配置信息

[[email protected] ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP 172.16.9.100:80 rr
 -> 17.16.9.81:80               Route   1      0         0        
 -> 17.16.9.82:80               Route   1      0         0

(4)在浏览器中浏览

不断的刷新将会出现轮询的效果。

时间: 2024-10-08 15:20:48

Linux集群之LVS的相关文章

基于Vmare的虚拟Linux集群搭建-lvs+keepalived

基于Vmare的虚拟Linux集群搭建-lvs+keepalived 本文通过keepalived实现lvs服务器的的双机热备和真实服务器之间的负载均衡.这方面的blog挺多,但是每个人搭建集群的环境不同,遇到的问题也不同,本文简述配置的一些过程以及配置过程中遇到问题时的解决方案. 准本工作 1. 创建Linux虚拟机 本文是基于Vmare虚拟环境搭建集群的,所以首先在Vmare中创建一些虚拟机(安装一个Linux系统,其他的复制第一次安装的即可),本文创建4台虚拟机.网卡模式设置成桥接方式,这

linux 集群及lvs

集群及LVS 集群: 一组通过高速网络互联的计算机组,并以单一系统的模式加以管理 价格很多服务器集中起来,提供同一种服务,在客户端看起来就像只有一个服务器 可以在付出较低成本的情况下获得在性能,可靠性,灵活性方面的相对较高的收益 任务调度室集群系统中的核心技术 集群目的: 提高性能:如计算密集型应用,如:天气预报,核试验模拟 降低成本:相对于百万美元级的超级计算机,价格便宜 提高可扩展性:只要增加集群节点即可 增强可靠性:多个节点完成相同功能,避免单点失败 集群分类: 高性能计算集群HPC:通过

Linux集群服务 LVS

linux虚拟服务器(LVS)项目在linux操作系统上提供了最常见的负载均衡软件. 集群定义: 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中 的核心技术.本文就集群系统的定义.发展趋势.任务调度等问题进行了简要论述.集群是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高可用性

基于VMware的虚拟Linux集群搭建-lvs+keepalived

通过keepalived实现lvs服务器的的双机热备和真实服务器之间的负载均衡的blog挺多的,在搭建的时候也参考了相关博文,不同人搭建的实验环境不一样,本文是基于VM搭建的虚拟集群环境,全部虚拟机网卡模式为NAT方式相连,处于同一网段. 搭建环境: 使用redhead 2.6.32-431.el6.x86_64版本的linux,创建四台,配置相关网络信息,确保同一网段下. 配置好各自ip即可,虚拟ip在配置lvs时设定. 安装配置LVS 1.在主备Lvs上安装ipvsadm和keepalive

linux集群之LVS DR模型简单实现

众所周知,LVS集群类型有NAT.DR和TUN,今天写这篇文章主要是看了马哥的视频,然后通过写博客的形式来回顾下自己还记得多少,写的不好,欢迎来喷! DR:集群节点跟director必须在同一个物理网络中: RIP可以使用公网地址,实现便捷的远程管理和监控: director仅负责处理入站请求,响应报文则由realserver直接送往客户端: 与NAT不用DR中的realserver不能将网关DIP: 不支持端口映射 实验环境: director centos6.7 eth0 192.168.1

Linux集群(四)-LVS持久连接与高可用

FWM:FireWall Mark MARK target 可用于给特定的报文打标记 --set-mark value 其中:value 为十六进制数字 借助于防火墙标记来分类报文,而后基于标记定义集群服务:可将多个不同的应用使用同一个集群服务进行调度 实现方法: 在VS主机打标记: iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,- -j MARK --set-mark

Linux集群基础--lvs

系统扩展方式:scale up:向上扩展scale out: 集群类型:LB:load balance 负载均衡集群,HA:high availability,高可用集群HP:很少用 Availability:平均无故障时间/平均无故障时间+故障修复时间 系统:可扩展性:可用性容量性能 系统运维:可用 --> 标准化 --> 自动化 构建高可用系统原则:避免串行化交互 GSLB:globe service load balanceSLB:service load balance Vmvare网

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

CentOS Linux 负载均衡高可用WEB集群之LVS+Keepalived配置

CentOS Linux 负载均衡高可用WEB集群之LVS+Keepalived配置 LB集群是locd balance集群的简称.翻译成中文是:负载均衡集群的意思:集群是一组相互独立的.通过高速网络互联的计算机相互之间构成一个组合,并以单一的系统的模式加以管理.LVS是Linux Virtual Server的简写,翻译中文是Linux虚拟服务器,是一个虚拟的服务器集群系统. 负载均衡集群:是为了企业提供更为实用,性价比更高的系统机构解决方案.负载均衡集群把用户的请求尽可能的平均分发到集群的各