您的位置:首页 > 运维架构 > 网站架构

LVS-DR+HA——keepalived负载均衡+HA高可用群集

2013-08-03 23:07 435 查看
LVS-DR+HA——keepalived[b]负载均衡+HA高可用群集[/b]Lvs-keepalive负载均衡
LVS简介:
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
LVS特点:
需要一个前端的负载调度器(或者多个进行主从备份)。
通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。
在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),
通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。
VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
LVS集群采用IP负载均衡技术和基于内容请求分发技术
LVS集群采用三层结构:负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
LVS的优点:开源,免费;在网上能找到一些相关技术资源;具有软件负载均衡的一些优点;LVS的缺点:最核心的就是没有可靠的支持服务,没有人对其结果负责; 功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;开启隧道方式需重编译内核;配置复杂;主要应用于LINUX,目前没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server(win2003、win2008中)。Keepalived双机热备:
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健检查功能,如判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。
高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)
在非LVS群集环境中使用时Keepalived也可以作为热备软件使用。
Keepalived工作原理:
采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。
VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;
每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。
热备组内的每台服务器都可以成为主服务器,虚拟IP地址(VIP)可以在热备组内的服务器之间进行转移,也称为漂移IP地址,使用Keepalived时,漂移地址的实现不需要手动建立虚拟接口配置文件(如eth0:0或eth1:0等),而是由Keepalived根据配置文件自动管理。

LVS-DR+HA——keepalived[b]负载均衡+HA高可用群集[/b]


Keepalived构建高可用性的LVS负载均衡群集。
使用Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性,对WEB服务器池中的节点进行分健康检查,自动移除失败节点,恢复后再重新加入。
实验拓扑如下:



在基于LVS-Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,两台以上的节点服务器,本例将以DR模式的LVS群集为基础,增加一台从负载调度器,使用Keepalived来实现主、从调度器的热备,从而构建建有负载均衡、高可用两种能力的LVS网站群集平台。
实验环境:
VIP(虚拟IP地址):172.16.16.172/24
主调度器:eth0192.168.10.1/24eth1:172.16.16.1/24
从调度器:eth0192.168.10.2/24eth1:172.16.16.2/24
WEB节点1:192.168.10.3/24eth1:172.16.16.3/24
WEB节点2:192.168.10.4/24eth1:172.16.16.4/24
NFS共享存储:eth0 :192.168.10.5/24
操作步骤:
一:LVS+keepalived高可用群集:
[b]构建高可用的LVS负载均衡群集,主、从调度器配置(DR模式的LVS模式群集):[/b]
Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用来做双机热备。使用Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效点节,恢复后再重新加入。
基于LVS+keepalived实现的LVS群集中,至少包括两台热备的负载调度器,两台以上的节点服务器。
使用Keepalived构建LVS群集时,也需要用到ipvsadm管理工具,但大部分工作会由Keepalived自动完成,不需要手动:
查看主调度器网卡接口IP地址:



查看从调度器网卡接口IP地址:



1.主调度服务器的配置
a.安装keepalived软件包与服务控制
在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-devel、popt-devel等支持库;
在LVS群集环境中应用时,也需要用到ipvsadm管理工具。
yum -y install kernel-developenssl-develpopt-devel



b.安装ipvsadm软件包:



c.编译安装Keepalived:
使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录(无需创建链接文件);

执行make和make install进行安装:

./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.i686/



d.使用keepalived服务:
查看/etc/init.d/keepalived脚本文件;

将其添加为系统服务以便日后管理:




e.主调度服务器的配置:
Keepalived服务的配置目录:/etc/keepalived

主配置文件:keepalived.conf

子目录:samples/ ##提供了许多配置样列作为参考

keepalived配置文件中:
“global_defs {……}”区段用来指定全局参数。

“vrrp_instance实例名称 {……}”区段指定VRRP热备参数,注释文字以“!”符号开头。

主要配置项注解:
! Configuration File for keepalived#!表示注释
global_defs {
notification_email { ### 接收报警的 email 地址,可以添加多个
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_fromroot@localhost
smtp_server 127.0.0.1 ###使用本机转发 email
smtp_connect_timeout 30
router_idLVS_DEVEL ###load balancer 的标识 ID,即本服务器的名称标识
}
vrrp_instanceVI_1 { ###定义VRRP热备实例
state MASTER###热备状态,MASTER表示主服务器
interface eth1 ###HA 监测网络接口即承载VIP地址的物理接口
virtual_router_id 51 ###虚拟路由器的ID号。主、备机的virtual_router_id必须相同
priority 100 ###主机的优先级,数值越大优先能越高。
advert_int 1 ###主备之间的通告间隔秒数
authentication { ###认证信息,每个热备组保持一致
auth_type PASS ###认证类型,主备切换时的验证
auth_pass 1111 ###密码字串
}
virtual_ipaddress { ###指定漂移地址(VIP),可以有多个
172.16.16.172 ###HA 虚拟ip,可加多个
}
}
virtual_server 172.16.16.172 80 { ###虚拟服务器地址(VIP)、端口
delay_loop 15 ###健康检查的间隔时间(秒),每隔 15 秒查询realserver状态
lb_algo rr ###lvs调度算法,这里使用轮询
lb_kind DR ###lvs负载均衡机制,这里使用直连路由
!persistence_timeout 50 ###同一 IP 的连接 50 秒内被分配到同一台realserver
protocol TCP ###用 TCP 协议检查realserver状态

real_server 172.16.16.3 80 { ###第一个WEB节点的地址、端口
weight 1 ###节点的权重
TCP_CHECK { ###健康检查方式
connect_port 80 ###检查的目标端口
connect_timeout 3 ###故障重试秒数(即连接超时)
nb_get_retry 3 ###重试延迟(即重试次数)
delay_before_retry 3 ###重试间隔(秒)
}
}
real_server 172.16.16.4 80 { ###第二个WEB节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
state MASTER:热备状态,MASTER表示主服务器;SLAVE表示备用服务器;当有多台备用的服务器,热备状态改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态】







f.重新启动keepalived服务:



2.从调度器的配置(与主调度器基本相同)
只需要调整router_id、state、prority参数即可,配置完成以后需要重启keepalived服务。

在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-devel、popt-devel等支持库;
在LVS群集环境中应用时,也需要用到ipvsadm管理工具。




安装ipvsadm软件包:



编译安装Keepalived:
使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录(无需创建链接文件);

执行make和make install进行安装:




使用keepalived服务:
查看/etc/init.d/keepalived脚本文件;

将其添加为系统服务以便日后管理:




配置从调度器:修改keepalived.conf文件,只修改有红色注解的那几项,其他参数和主调度器的配置文件完全一样(看注解提示)。



同一个keepalived热备组内,所有服务器的keepalived配置文件基本相同。不同之处主要在于服务器的名称标识、热备状态、优先级
服务器的名称标识(router_id):建议为每个参与热备的服务器指定不同的名称;

热备状态(state):至少应有一台主服务器,状态设为MASTER;如果有多台备用的服务器,将状态设为BACKUP;

优先级(priority):数值越大则取得VIP控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突。

重启keepalived服务:



3. 测试主、从调度器:
若防火墙不关闭的话可以在input链上建规则!(VRRP协议的通告报文使用固定的组播地址224.0.0.18,用IP 报文作为传输协议进行协议报文的传送。)
iptables -I INPUT -p ip -d 224.0.0.18 -j ACCEPT






当启动keepalived服务后,实际状态为MASTER的主服务器取得VIP控制权,并为eth1接口自动添加VIP地址,通过ip命令可以查看。
查看主服器的eth1接口信息(ifconfig命令看不到):



从调度器服务器上启动keepalived服务,此时主服务器仍然在线,VIP地址实际上仍然由主服务器控制,其他服务器处于备用状态,因此在备用服务器中将不会为eth1接口添加VIP地址。
查看从服务器的eth1接口信息:



/var/log/messages : Keepalived的日志消息,在测试主、从故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。
这里以测试连通性为例:
在Windows PC机上执行ping172.16.16.172 -t 命令,能够正常ping通,说明主服务器以接管VIP地址,并及时响应客户机的请求(172.16.16.172为VIP虚拟地址)。
这里我们模拟物理断开主调度器eth1网卡,然后验证:




中间会有断包现象,是因为从调度器取代主调度器,此时查看主从调度器的接口信息:






禁用主调度服务器的eth1网卡,发现ping测试会中断1个包即恢复正常,说明已有其他服务器接替VIP地址,并及时响应客户机的请求。
重新启用主服务器的eth1网卡,发现ping测试再次中断1个包即恢复正常,说明主服务器已恢复正常,并夺回VIP地址的控制权。




主调度器eth1网卡恢复正常后,再次查看两台调度器状态,会发现调度转发恢复正常(也可以从日志文件中查看MASTER、SLAVE状态的迁移记录):







二:LVS+HA —— 配置负载调度器(ipvsadm)[LVS-DR为例]:
在主、从负载调度器主机上分别配置负载调度器,加载ip_vs模块,安装ipvsadm软件包;
LVS-DR模式为例,所以需要调整/proc系统的内核响应参数。
在sysctl.conf添加如下内容:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0







三:在共享存储设备主机上配置共享存储服务(NFS发布共享服务为例):
1.修改/etc/exports文件,内容如下:
/opt/wwwroot192.168.7.0/24(rw,sync,no_root_squash)
允许192.168.10.0/24网段的主机访问NFS的共享。






客户机地址可以是主机名、IP地址、网段地址,允许使用*或?通配符;

权限选项中的rw表示允许读写(ro为只读),sync表示同步写入,no_root_squash表示当客户机以root身份访问时赋予本地root权限(默认是root_squash,将作为nfs nobody用户降权对待)

2.启动RPC、NFS服务:



注意:rhel5系统中RPC服务脚本是portmap,rhel6系统中RPC服务脚本是rpcbind,这里以rhel 5.5为NFS共享存储。

四:LVS+HA——配置服务地址池中web节点服务器:(web1:172.16.16.3;web2:172.16.16.4)
DR模式为例:
调整/proc系统的ARP响应参数;

为虚拟接口lo:0配置VIP地址。

使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突。
a.调整/proc响应参数:
在sysctl.conf添加如下内容:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2




net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
arp_ignore:定义了网卡在响应外部ARP请求时候的响应级别
0:默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
1:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应。
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 0
定义了网卡在向外宣告自己的MAC-IP时候的限制级别
有三个值:
0:默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
1:尽量避免响应ARP请求中MAC不是本网卡的,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就尽量避免响应
2:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应。
执行sysctl -p使修改生效:



b.配置虚拟IP地址(VIP)——节点服务器1的配置:
在每个节点服务器,同样需要具有VIP地址172.16.16.172,但此地址仅用作发送WEB响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚拟接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地以避免通信紊乱。



注意:子网掩码必须为全1
重启network脚本使修改后的IP生效。



添加VIP本地访问路由:



c:安装httpd软件包,创建相应的测试网页,并启用httpd服务程序:



修改/etc/fstab 文件,实现自动挂载:



启动httpd服务并设置开机自启:



其他服务器节点做相同的配置】,web节点2配置相同:

五:访问测试
从Windows PC机中访问http://172.16.16.172,将能够看到由真实服务器提供的网页内容:
在LVS负载调度器中,通过查看节点状态可以观察当前的负载分配情况,对于轮询算法来说,每个节点所获得的连接负载应大致相当:









a.模拟生产故障:物理宕掉主调度器的eth1接口,继续查看:






实验环境下多注意主从调度器、web节点服务器、NFS共享存储的iptables防火墙设置,排错时多想想iptables的设置。
LVS+keepalived群集配置完毕,这样即实现了lvs负载平衡又实现了调度器的热备。
LVS实验环境是互相结合的,根据需求搭建符合自己需求的环境才是王道。
LVS-NAT地址转换模式:/article/4239279.html
LVS-DR直连路由模式:/article/4239280.html

本文出自 “听闻” 博客,请务必保留此出处http://wenzhongxiang.blog.51cto.com/6370734/1263712
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: