云计算 频道

开源项目中小云平台应用缓存与负载均衡

  【IT168评论】互联网的快速发展和无线物联网的崛起,为互联网服务平台快速响应请求提出更高要求。应用缓存系统对于服务提高响应速度和解决高并发的读写应用数据给出解决方案。这里列举目前在互联网服务各个层面应用缓存系统可使用的开源项目。

  本文使用的名词解释参考

  2.1网页静态内容加速

  Squid www.squid-cache.org squid作为一个开源的跨平台的web缓存代理,把常用的请求内容缓存到系统,提高HTTP,HTTPS,FTP的响应速度。为互联网服务提供商节省带宽,提升用户体验,降低应用的硬件投入成本。本方案应用squid在如下几个方面:

  (1)网站静态内容缓存,公司网站使用内容管理系统进行内容发布,对外提供服务,公网互联网用户访问首先请求squid代理缓存,如果有缓存就直接返回缓存,没有缓存由缓存访问网站内容管理系统请求内容并缓存返回。

  (2)办公内网透明上网代理缓存,公司所有的办公pc代理网关指向squid搭建的透明反向代理,代理代为pc访问各个互联网网站,并使用算法对常用访问的网页内容进行缓存,提高内网访问互联网的访问速度,降低办公网出口带宽。

  2.2应用对象缓存

  开发互联网应用,经常会用到数据库系统存储数据,提升数据库系统的读写速度和反映能力无疑是提高应用响应能力的基础。但是由于中小企业在硬件投入上的局限性,而把数据对象加载到内存进行缓冲无疑成为性价比非常好的的解决方案。以当前市售典型PC服务器硬件对比,对于内存读写基本数倍快于硬盘读写。目前几乎所有互联网应用都应用到了应用独立缓存系统作为数据库和应用之间作为缓冲,这里我们介绍由FAL Labs实验室在2007年使用C语言编写的高性能简单键值对轻量数据库Tokyo Cabinet实现的缓存系统。

  Tokyo Tyrant 是Tokyo Cabinet的网络接口,提供兼容Memcached(一种广泛使用分布式缓存系统)协议访问,为各种应用开发(C,JAVA,PHP,PERL...)使用提供良好的兼容性。相比较其他缓存系统,Tokyo Tyrant接口支持双机互为主备模式,在应用高可用负载均衡系统前提下支持故障转移,同时由于直接使用linux原生的网络模型epoll,对于小数据的高并发读写具有很高的性能。同时FAL Labs同时推出了Tokyo Cabinet的全文索引系统Tokyo Dystopia和基于web界面的内容管理系统Tokyo Promenade。提升了数据库的易用性。

  FAL Labs在2010年使用C++语言重写了具有自动过期实现的Kyoto Cabinet数据库替代Tokyo Cabinet和Kyoto Tycoon替代Tokyo Tyrant,软件采用组件化和插件化开发,能够轻松扩展,同时性能上得到进一步加强,为大家提供了更好的选择。

  本方案在应用Tokyo Tyrant作为缓存系统接口,Memcached协议作为通讯协议,配置双机互为主备模式,作为故障转移的处理方案。前端使用LVS配置虚拟服务器作为负载均衡和高可用的对外服务器访问,在对象关系映射系统的缓存中完全应用本缓存系统,使原数据库的访问流量降低50%,原一个WEB检索耗费200毫秒,现使用缓存系统降低为50毫秒左右,响应时间提升达4倍之多。

  三、基于LVS和keepalived搭建应用负载均衡系统

  互联网应用快速发展,用户量和访问的成数量级提高对业务平台的响应能力和高可靠性提出新的要求。怎样在原来单机应用的前提下快速扩展服务节点提高平台带负载能力,本方案采用LVS(Linux vitual server)和KeepAlived两个开源项目相结合实现应用负载均衡LoadBalence解决方案,在满足可扩充性同时提高了业务的可靠性。在非故障情况下双机实现业务根据负载分担算法进行双机同时带负载,在故障情况下,根据故障监测机制在设定时间内自动剔除真实故障节点:HealthCheck,并在负载均衡器本身出现故障时候能够自动切换:Failover。

  3.1 项目介绍

  3.1.1 LVS www.linuxvitualserver.org

  LVS使用Linux操作系统通过扩展linux内核,实现基于IP层和内容请求分发的负载平衡调度,将一组服务器构成一个实现可伸缩,高可用网络服务的服务器集群。LVS由前端的负载均衡器(LoadBalancer,LB)和后端的真实服务器(RealServer,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。LVS软件的核心是运行在LB上的IPVS,它使用基于IP层的负载均衡方法。IPVS的总体结构主要由IP包处理、负载均衡算法、系统配置与管理三个模块及虚拟服务器与真实服务器链表组成。

开源项目中小云计算平台应用:应用缓存

  3.1.2 KeepAlived www.keepalived.org

  KeepAlived是一个工作在于3,4,5/7层进行数据交换的软件,也就是我们平时说的第3层、第4层和第5/7层交换。主要用作LVS 集群中RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。KeepAlived本身采用模块化设计,以下为KeepAlived结构。

开源项目中小云计算平台应用:应用缓存
▲图3-1

  1、 WatchDog 负责监控checkers 和VRRP 进程的状况。

  2、 Checkers 负责真实服务器的健康检查healthchecking,是keepalived 最主要的功能。换句话说—可以没有VRRP Stack,但健康检查healthchecking 是一定要有的。

  3、 VRRP Stack 负责负载均衡器之间的失败切换FailOver.如果只用一个负载均衡器,则

  VRRP 不是必须的。

  4、 IPVS wrapper 用来发送设定的规则到内核ipvs 代码。

  5、 Netlink Reflector 用来设定 vrrp 的vip 地址等。

  3.2 使用LVS和KeepAlived搭建应用负载均衡集群

  在搭建负载均衡集群之前,我们先来了解一下负载均衡类型,一般分直接路由模式DR 、网络地址转换模式 NAT 以及隧道模式TUN 三种。LVS真实服务器的配置是根据其所采用的负载均衡种类来做相应操作的。在本方案的应用环境里,为了获得最高的性能,采用的负载均衡种类是直接路由模式DR,整体架构参考如下:

开源项目中小云计算平台应用:应用缓存

  3.2.1 操作系统安装

  使用LVS的时候,负载均衡器和真实服务器主机尽量采用同一版本的linux操作系统,这样保证IPVS版本的一致性,避免出现由于版本或协议问题出现兼容性隐性故障。另由于IPVS和IPTABLES采用同样的ip数据封包过滤转发机制,所以两者不能同时工作,必须把负载均衡器所在linux操作系统iptables软件关闭。

  3.2.2 负载均衡器配置

  负载均衡器安装KeepAlived软件,主备负载均衡器本身使用VRRP虚拟路由协议进行通讯,实现故障切换。KeepAlived是LVS的扩展项目,通过对真实服务器的健康检查(HealthCheck),对出现故障的真实服务器节点进行管理。以下为一个典型主备负载均衡器的配置,下面摘取关键部分加以说明,详细配置请参考项目文档。

  3.2.2.1 全局配置。

  虚拟路由器ID router_id,主备两台配置要保持一致

  通知邮件地址 主要是为发生一些事件(主备切换,真实服务器节点增加或剔除),需要通知管理员配置的邮件地址。

  3.2.2.2 全局VRRP实例配置

  virtual_router_id 52 要保持主备一致

  authentication 主要配置主备机之间通讯认证的用户名密码,两台机器互相配置要正确。

  notify_master 当本机切换成为主机状态要执行的动作,这里执行一个短信通知脚本。

  notify_backup 当本机切换成为备机状态要执行的动作,这里执行一个短信通知脚本。

  notify_fault 当本机失效要执行的动作,这里执行一个短信通知脚本。

${PageNumber}

 

global_defs {
        router_id LIFECARE_LVS
        notification_email {
                wenzhitang@lifecarenetworks.com
        }
        notification_email_from              root@lvsmaster.lifekarenetworks.com
        smtp_server
127.0.0.1
        smtp_connect_timeout
5
}
vrrp_instance LIFECARE_VPINS {
    state MASTER
    interface bond0
    virtual_router_id
52
    priority
100
    advert_int
3
    smtp_alert
    authentication {
        auth_type PASS
        auth_pass
1111
    }
    virtual_ipaddress {
        
10.0.0.1
        
10.0.0.2
    }
    notify_master
"/root/keepalive/AlertKeepAlivedChangeState.sh Master"
    notify_backup
"/root/keepalive/AlertKeepAlivedChangeState.sh Backup"
    notify_fault  
"/root/keepalive/AlertKeepAlivedChangeState.sh Fault"

}

3.2.3虚拟服务器配置,

  这里以Cache服务器作为举例配置,可以配置多组虚拟服务器池,检测时间可以自定义,这里设置为4秒检测一次健康状态(失效条件为:重试3次,每次间隔2秒,大约10秒内实现失效节点剔除),负载分担算法采用lblc(基于局部性的最小连接算法,尽量让各个服务器负载平衡)。90秒内连接会分发到相同的服务器,这样在极大程度上缓和了多节点集群之间的用户session的同步压力,提高了传输效率。其他互联网应用大多采用权重wlc(加权最小连接)和rr(轮询)算法。

#cache-tokyotyrrant 11212
virtual_server
10.0.0.2 11212 {
    delay_loop
4
    lb_algo lblc
    lb_kind DR
    persistence_timeout
90
    protocol TCP
    sorry_server
10.0.0.50 11212
real_server
10.0.0.20 11212 {
        weight
1
        TCP_CHECK {
        connect_timeout
3
        nb_get_retry
3
        delay_before_retry
2
       connect_port
11212
       }
}
real_server
10.0.0.25 11212 {
        weight
1
        TCP_CHECK {
       connect_timeout
3
        nb_get_retry
3
        delay_before_retry
3
        connect_port
11212
        }
}
}

 

  3.2.4 真实服务器配置

  真实服务器需要配置一个虚拟IP地址,绑定在回环接口上,防止广播风暴。配置做成一个shell脚本,设置成开机启动自动应用虚拟IP。

#!/bin/sh
# filename:
/root/realserver.sh
# description: Config realserver lo
and apply noarp
#restartup vrrp ip
10.0.0.2
#
/root/realserver.sh start
#修改
/etc/rc.local 增加如上2行启动自动应用vip脚本

/etc/rc.d/init.d/functions
CACHE_VIP
=10.0.0.2
  
case "$1" in
  start)
#VIP被绑定在环回接口lo0:0上,其广播地址是其本身,子网掩码是255.
255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip 地址冲突。

ifconfig lo:
0 $CACHE_VIP netmask 255.255.255.255 broadcast $CACHE_VIP
#抑制arp广播风暴,Arp 抑制生效后,再也没有机器知道vip 的存在。这时只有负载均衡器才能转发给VIP数据包。
#echo
"1" >/proc/sys/net/ipv4/ip_forward
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
sysctl
-p >/dev/null 2>&1 #保存进入系统
echo
"RealServer Start OK"

;;
  stop)
ifconfig lo:
0 down
#echo
"0" >/proc/sys/net/ipv4/ip_forward
echo
"0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo
"0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo
"0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo
"0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo
"RealServer Stoped"
;;
  
*)
  echo
"Usage: $0 {start|stop}"
exit 1
esac

 

  通过以上组合我们搭建了一套具备高可用特性的多节点负载均衡集群系统,本系统在远程监护平台上与2009.4月实施,至今已经扩展到4个服务器池,8个真实服务器节点,自2009年5月-2012年4月,包括因IDC机房电源升级切换,空调系统升级切换,总停机时间不超过50分钟,按照高可用的计算公式,已经完全达到高可用所要求的99.99%可用时间比例的运行水平。

  作者介绍:

  ·Tony汤文志 目前供职于中卫莱康任系统研发部总监兼IT支持部总监10年无线互联网软件研发经验,曾供职于多家无线互联网企业包括华友世纪(Nasdq:HRAY),搜狐(Nasdq:SOHU)负责无线互联网研发工作,参与多个电信级的运营商无线增值平台的开发。2007年进入远程健康管理企业中卫莱康负责远程心电监护平台的研发和系统支持工作,在远程健康管理平台建设过程中应用各种开源项目,积极推动开源项目的推广使用,倡导中小企业优先应用开源项目搭建支撑平台。点击作者微博 博客 邮件 

  ·Frank 赵杰 目前供职于中卫莱康 任it支持经理 参与本文邮件方案和监控方案编写

 

1
相关文章