linux负载均衡方案一: lvs/nat+piranha
---200710 感谢wensong
环境:
软件 lvs: 请求的负载均衡分发
piranha: 两台lvs主机热备HA(默认情况下piranha把主从LVS设置为平级,主的DOWN后,从的接管;主的UP后,不会自动切换. keepalived的主从LVS等级森严,会自动切换)
硬件(4台机器)
vs :是LVS负载均衡主机器,同时运行MYSQL主服务。
vsbak :是LVS负载均衡辅助机器,同时运行MYSQL辅助服务。
real1 :运行web平台,程序前后台,NFS主,SYNC主。
real2 :运行web平台,程序前后台,NFS共享,SYNC辅。
集群和负载均衡的概念
集群(Cluster)
所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程
序可以通过网络共享内存进行消息传送,实现分布式计算机。
负载均衡(Load Balance)
网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,
把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网
络的灵活性和可用性。
特点
(1)高可靠性(HA)。利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对
用户的不间断服务。
(2)高性能计算(HP)。即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因
分析、化学分析等。
(3)负载平衡。即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和
软件要求。
LVS系统结构与特点
1. Linux Virtual Server:简称LVS。
是由中国一个Linux程序员章文嵩博士
发起和领导的,基于Linux系统的服务器集群解决方案,其实现目标是创建一个具有良好的扩展性、高可靠性、高性能和高可用性的体系。许多商业的集群产
品,比如RedHat的Piranha、 Turbo Linux公司的Turbo Cluster等,都是基于LVS的核心代码的。
2.
体系结构:
使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器。物理服务器之间可以通过高速的
LAN或分布在各地的WAN相连。
最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得像一个服务于同一IP地址的虚拟服务器。
3.
LVS的三种模式工作原理和优缺点:
Linux Virtual Server主要是在负载均衡器上实现的,负载均衡器是一台加了 LVS
Patch的2.2.x版内核的Linux系统。LVS Patch可以通过重新编译内核的
方法加入内核,也可以当作一个动态的模块插入现在的内核中。
负载均衡器可以运行在以下三种模式下:
(1)Virtual
Server via
NAT(VS-NAT):用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自
地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺
点是效率低,因为返回给请求方的流量经过转换器。
(2)Virtual Server via IP Tunneling
(VS-TUN):用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了
安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 集群所能提供的服务是基于TCP/IP的Web服务、Mail服
务、News服务、DNS服务、Proxy服务器等等.
(3)Virtual Server via Direct
Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接
收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。
以四
台服务器为例实现负载均衡:
安装配置LVS
1. 安装前准备:
(1)首先说明,LVS并不要
求集群中的服务器规格划一,相反,可以根据服务器的不同配置和负载状况,调整负载分配策略,充分利用集群环境中的每一台服务器。如下表:
vs1
eth0
192.168.0.245 主IP
eth0:1 192.168.0.233 机群对外IP,允许用户访问。
eth0:2
192.168.14.1 集群路由IP
eth0:3 192.168.14.2
和虚拟内网路由的IP(不是必须的;如果和内部虚拟网不通再手动添加它)
vsbak
eth1 192.168.0.234 主IP
eth1:1 192.168.14.3
和虚拟内网路由的IP和虚拟内网路由的IP(不是必须的;如果和内部虚拟网不通再手动添加它)
real1 192.168.14.4
real2 192.168.14.5
(2)这4台服务器中,vs1作为虚拟服务器(即负载平衡服务器),负责将用户的访问请求转发到集群内部的real1,real2,然后由
real1,real2分别处理。 Client为客户端测试机器,可以为任意操作系统。
(3)所有OS为centos4.4,所有real
server的Subnet mask 都是24位, vs1和vsbak 的192.168.0.0 网段是24 位。
2.理解LVS中的相关术语
(1) ipvsadm
:ipvsadm是LVS的一个用户界面。在负载均衡器上编译、安装ipvsadm。
(2) 调度算法:
LVS的负载均衡器有以下几种调度规则:
Round-robin,简称rr;
weighted
Round-robin,简称wrr;每个新的连接被轮流指派到每个物理服务器。
Least-connected,简称lc;
weighted Least-connected,简称wlc,每个新的连接被分配到负担最小的服务器。
(3) Persistent
client
connection,简称pcc,(持续的客户端连接,内核2.2.10版以后才支持)。所有来自同一个IP的客户端将一直连接到同一个物理服务器。超
时时间被设置为360秒。Pcc是为https和cookie服务设置的。在这处调度规则下,第一次连接后,所有以后来自相同客户端的连接(包括来自其它
端口)将会发送到相同的物理服务器。但这也会带来一个问题,因为大约有25%的Internet 可能具有相同的IP地址。
(4)
Persistent port
connection调度算法:在内核2.2.12版以后,pcc功能已从一个调度算法(你可以选择不同的调度算法:rr、wrr、lc、wlc、
pcc)演变成为了一个开关选项(你可以让rr、 wrr、lc、wlc具备pcc的属性)。
在设置时,如果你没有选择调度算法
时,ipvsadm将默认为wlc算法。 在Persistent port
connection(ppc)算法下,连接的指派是基于端口的,例如,来自相同终端的80端口与443端口的请求,将被分配到不同的物理服务器上。不幸
的是,如果你需要在的网站上采用cookies时将出问题,因为http是使用80端口,然
而cookies需要使用443端口,这种方法下,很可能会出现cookies不正常的情况。
(5)Load Node
Feature of Linux Director:让Load balancer 也可以处理users 请求。
(6)IPVS
connection synchronization。
(7)ARP Problem of LVS/TUN and
LVS/DR:这个问题只在LVS/DR,LVS/TUN 时存在。
3. 配置实例
(1)
需要的软件包和包的安装:
I. piranha-0.8*.rpm;
II.iptables-1.2*.rpm (架设NAT)。
(2)
real server群:
真正提供服务的server(如web
server),在NAT形式下是以内部虚拟网域的形式,设定如同一般虚拟网域中Client端使用网域:192.168.14.0/24
架设方式同一般使用虚拟IP之局域网络。
a. 设网卡IP
real1 :192.168.14.4/24
real2
:192.168.14.5/24
b.每台server均将default gateway指向192.168.14.1。
192.168.14.1为该网域唯一对外之信道,设定在virtual server上,使该网域进出均需通过virtual server 。
c.
每台server均开启httpd功能供web server服务,可以在各real server上放置不同内容之网页,可由浏览器观察其对各real
server读取网页的情形。
(3) virtual server:
作用在导引封包的对外主机,专职负责封包的转送,不提供
服务,但因为在NAT型式下必须对进出封包进行改写,所以负担亦重。
a.IP设置:
NAT形式下仅virtual
server有真实IP,real server群则为透过virtual server.
b.设定NAT功能
#more
/etc/rc.d/rc.local
service ipvsadm restart
#这个是保证REBOOT后IPVSADM能%100启动。
echo 1 >
/proc/sys/net/ipv4/ip_forward
echo 0 >
/proc/sys/net/ipv4/conf/all/send_redirects
echo 0 >
/proc/sys/net/ipv4/conf/default/send_redirects
echo 0 >
/proc/sys/net/ipv4/conf/eth0/send_redirects
c.
系统安装上Red hat cluster suite
集群软件后,使用一个名为Piranha的配置工具配置集群服务器,此配置工具使用 apache 作web Server
来提供基于web页面的配置接口。此配置接口的web页面站点的配置文件网页文件及其他相关文件存放在/etc/sysconfig/ha/ 目录中。
#
vi /etc/sysconfig/ha/conf/httpd.conf
配置接口页面站点的相关参数。缺省的监听端口是3636,你可以
改成其他的端口 Listen 3636
访问Piranha配置接口页面需要有帐号和密码,帐号默认为piranha,用以下命令配置密码
#
/usr/sbin/piranha-passwd //设置 piranha 的登录口令。
#/usr/sbin/piranha_gui
-f /etc/sysconfig/ha/conf/httpd.conf //启动Piranha配置接口页面站点访问 登录
Piranha。利用此页面直接配置接口配置集群服务。
a).登陆
b).设定“整体配置”(Global Settings)
主
LVS服务器主机IP:192.168.0.245,Primary server private
IP:空(预设),选定网络地址翻译(预设):NAT,路由IP:192.168.14.1, 路由网卡:
eth0:2
c).设定虚拟服务器(Virtual Servers)
添加编辑虚拟服务器部分:(Virtual
Server)名称:(任意取名);应用:http;协议:
tcp;连接:80;地址:192.168.0.233;子网掩码:255.255.255.0,装置:eth0:1; 重入时间:15
(预设);服务延时:6 (预设);加载监控工具:空(预设);调度策略:Weighted least-connections;持续性:空(预设);
持续性屏蔽: 空(预设);按下激活。
实时服务器部分:(Real Servers); 添加编辑:名字:(任意取名);
地址:192.168.14.4; 权重:1 (预设) 按下激活。
另一架real server同上,地址:192.168.14.5。
d).
控制/监控(Controls/Monitoring)
控制:piranha功能的激活与停止,上述内容设定完成后即可按开始键激活piranha.监控器:显示ipvsadm设定之routing
table内容 可立即更新或定时更新。
e)未指出的选项就用默认值;可以手工修改配置文件:/etc/sysconfig/ha
/lvs.cf /etc/sysconfig/ipvsadm;
f)设置自动启动服务并核实:
#chkconfig --level
345 pulse on
(4)备援主机的设定(HA)
单一virtual server的cluster架构virtual server
负担较大,提供另一主机担任备援,可避免virtual server的故障而使对外服务工作终止;备份主机随时处于预备状态与virtual
server相互侦测
a.备份主机:
vsbak
eth1 192.168.0.234 主IP
eth1:1
192.168.14.3 和虚拟内网路由的IP。同样需安装piranha,ipvsadm,iptables等套件
b.登陆
piranha,设置LVS(同上面所述),暂时不启动LVS。
c.在virtual server(192.168.0.245)主机上设定。
a).
执行piranha冗余度 ;
b).按下“激活冗余度”;
冗余LVS服务器IP:
192.168.0.234;HEARTBEAT间隔(秒数):2 (预设), 假定在…秒后进入DEAD状态: 5
(预设); HEARTBEAT连接埠: 539 (预设)
c).按下“套用”;
d).至“控制/监控”页,按下“在当前执行层添加
PULSE DEAMON” ,按下“开始”;
e).在监控器按下“自动更新”,这样可由窗口中看到ipvsadm所设定的routing
table,并且动态显示real server联机情形,若real server故障,该主机亦会从监视窗口中消失。
d.激活备份主机之
pulse daemon (执行# /etc/rc.d/init.d/pulse start)。
至此,HA功能已经激活,备份主机及
virtual server由pulse daemon定时相互探询,一但virtual server故障,备份主机立刻激活代替;至virtual
server
正常上线后,备份LVS不会将工作交还virtual server。
4。LVS测试
1。测试http:从client运行iexplore
因为在real1 和real2
上面的测试页不同,所以登录几次之后,显示出的页面也会有所不同,这样说明real server 已经在正常工作了。
2。停止和重新启动
real1的pulse,看LVS能否自动卸并加real1的连接。换real2同样测试。
注意!!!
1。如果修改了/etc/sysconfig/ha
/lvs.cf(无论是手工编辑还是通过Piranha)只有重新启动pulse服务才会起作用。
2。“整体配置”(Global
Settings) 里的Primary server private IP(May be blank)设置为空即可。切记!
3。改动当前的
配置,还可以使用
ipvsadm直接修改内核路由表,相关操作命令请查阅ipvsadm的命令行帮助。例如:假设当前已经有了real1(192.168.14.4)和
real2(192.168.14.5)两个真实服务器,扩容需要新增另外一台real3(192.168.14.6)真实服务器。直接在/etc
/sysconfig/ha/lvs.cf 中加入了real3的信息,但是无法立即生效,这时可以用以下命令:
ipvsadm -a -t
192.168.0.233:http -r 192.168.14.6:http -m -w 1
这样就可以加入到内核路由表并立即生效。
4.#service
pulse restart后,需要20秒左右才起作用。
5。如果需要解决session问题,只需要修改/etc/sysconfig/ipvsadm,增加“-p 数值”即可;例:
-A -t 192.168.0.233:80 -s wlc -p 480
//持续连接480秒。这个时间要和web程序配置文件里的session时间设置成一样。当一个real服务器失效时ipvsadm会自动把该real
从记录链中去掉并把客户的连接请求转移到其他real.
补充:
lvs操作的流程:
数据包
->vs->查找是否已存在连接
1.存在就根据该连接发包
2.不存在,是新连接,则开始调度
如果vs是普通服务器,
则执行调度算法选择一个rs,然后创建连接,然后发送
如果vs是p服务器(设置了-p
–persistent参数的服务器),则先看看是否有模板可用,如果有,则根据该模板创建连接,然后发包。
如果没有模板可用,就执行调度器调度
到一个rs并创建模板,然后根据该模板创建连接,最后发包。
在ipvsadm的用法中,很多文档对于
persistent参数是这样说明的:
-p –persistent [timeout]
持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout的默认值为300秒。这个时间是可以自行设置
的,决定于web的session或者cookie时间。
“来自同一个客户”该怎么理解呢,是基于IP的客户端还是基于浏览器客户端的
Cookie呢,应该是基于源地址.其实还有一个参数[-M netmask],它指出源地址的匹配方式。例如-p 900 -M
255.255.255.0
就是掩码后网络地址相同的请求使用同一个模板,因此10.1.9.8和10.1.9.9两机器同时访问同一个vs就使用同一个模板,即到同一个rs.
Lvs连接算法:
对
于配置了p的vs,系统在建立新连接例如前,先调度并创建一个连接模板例
如,该连接模板的超时时间为p的参数,例如900s,然后再根据模板创建本次可用的连接,例
如,这样数据就都从该连接过。如果紧接着又有的新请求,vs
则会寻找找模板,如果找到,就不重新schedule,而是根据该模板提供的rs创建真实连接,并
同时reset该模板的超时时间,即又重置到900s.
模板其实也是一个连接,不过比较特别罢了,ipvsadm
-Lcn应该能看到,连接的超时时间就是p的参数,如果该模板被重用,超时时间就被重设。如果用户的每次的http请求不超过超时时间,则用户的请求都根
据模板发往固定的rs。
阅读(1365) | 评论(0) | 转发(0) |