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

高性能业务架构解决方案(LVS+Keepalived)

2017-02-20 10:36 330 查看
高性能业务架构解决方案(LVS+Keepalived)

高性能业务架构解决方案(LVS+Keepalived)

一、 概况2 1.1 应用场景2 1.2 LVS/Nginx/HAProxy特点3二、 相关理论4 2.1 Keepalived工作原理4 2.2 LVS工作原理4三、 架构拓扑5四、 资源规划5五、 实施部署5 5.1初始化配置6 5.2 LVS配置6 5.3 Keepalived部署7 5.3.1 Keepalived的安装8 5.3.2 配置keepalived8 5.4 后端WEB服务器10 5.5 共享存储11 5.6 测试11 5.6.1 负载均衡测试12 5.6.2 高可用测试13六、 注意事项15 6.1 LVS安装注意事项15 6.2 将相关开机自启服务16 6.3 脚本16 高性能业务架构解决方案(LVS+Keepalived)一、概况1.1 应用场景Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件。对于大型的,需要进行高并发的网站或者对网络不太严格的场景,可以使用Nginx;对于大型的Web服务器的时候可以使用Haproxy;对性能有严格要求的时候可以使用LVS,就单纯从负载均衡的角度来说,LVS也许会成为主流,更适合现在大型的互联网公司。本文采用LVS+keepalived方案来解决业务架构高可用。1.2 LVS/Nginx/HAProxy特点
名称特点
LVS1) 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;2) 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;3) 工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;4) 无流量,保证了均衡器IO的性能不会收到大流量的影响;5) 应用范围比较广,可以对所有应用做负载均衡;6) 软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。7) 如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了。
Nginx1) 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一;2) Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;3) Nginx安装和配置比较简单,测试起来比较方便;4) 也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;5) Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;6) Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;7) Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。8) Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。
HAProxy1) HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。2) 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作3) 支持url检测后端的服务器出问题的检测会有很好的帮助。4) 它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。5) HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。6) HAProxy的算法现在也越来越多了,算法特别灵活
二、相关理论2.1 Keepalived工作原理keepalived:顾名思义是保持存活,常用来搭建设备的高可用,防止业务核心设备出现单点故障。keepalived基于VRRP协议来实现高可用,主要用作realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态,如果某台web服务器故障,Keepalived将检测到并将其从系统中剔除,当该web服务器工作正常后Keepalived自动将其加入到服务器群中,这些工作全部自动完成,而不需要人工干预,只需要人工修复故障的web服务器即可。三层机理是发送ICMP数据包即PING给某台服务器,如果不通,则认为其故障,并从服务器群中剔除;四层机理是检测TCP端口号状态来判断某台服务器是否故障,如果检测端口存在异常,则从服务器群中剔除;五层机理是根据用户的设定检查某个服务器应用程序是否正常运行,如果不正常,则从服务器群中剔除。2.2 LVS工作原理LVS工作在网络层。通过控制IP来实现负载均衡。IPVS是其具体的实现模块。IPVS的主要作用:安装在Director Server上面,在Director Server虚拟一个对外访问的IP(VIP)。用户访问VIP,到达Director Server,Director Server根据一定的规则选择一个Real Server,处理完成后然后返回给客户端数据。这些步骤产生了一些具体的问题,比如如何选择具体的Real Server,Real Server如果返回给客户端数据等等。IPVS为此有三种机制:n VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。n VS/TUN(Virtual Server via IP Tunneling),即IP隧道技术实现虚拟服务器。它跟VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。n VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器。跟前面两种方式,它的报文转发方法有所不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。三、架构拓扑


四、资源规划
主机名称内网IP操作系统
LVS-Master10.10.10.2Centos 6.5 64位
LVS-Backup10.10.10.3Centos 6.5 64位
WEB0110.10.10.11Centos 6.5 64位
WEB0210.10.10.12Centos 6.5 64位
WEB0310.10.10.13Centos 6.5 64位
NFS-server10.10.10.20Centos 6.5 64位
VIP10.10.10.100\
五、实施部署5.1 初始化配置l getenforce 0关闭SeLinuxl 修改主机名l 防火墙开放22/80端口l 测试网络连通性l 更新YUM源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backupwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repoyum makecache #生成缓存 5.2 LVS配置在master与backup上面同时配置安装可采用yum直接安装,或下载tar包编译安装。yum install ipvsadm/etc/init.d/ipvsadm save/etc/init.d/ipvsadm start查看ipvsadm状态/etc/init.d/ipvsadm -ln# 开启icmp包重定向echo "1" > /proc/sys/net/ipv4/conf/all/send_redirectsecho "1" > /proc/sys/net/ipv4/conf/default/send_redirectsecho "1" > /proc/sys/net/ipv4/conf/eth0/send_redirects#添加路由route add -host 10.10.10.100 dev eth1#清除LVS规则ipvsadm -C# 添加一条虚拟服务器记录# -p指定一定的时间内将相同的客户端分配到同一台后端服务器解决session问题ipvsadm -A -t 10.10.10.100:80 -s wlc -p# 添加真实服务器记录ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.11:80 -g -w 1ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.12:80 -g -w 1ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.13:80 -g -w 1#设置tcp tcpfin udp超市连接值ipvsadm --set 30 120 300Ipvsadm配置完成后,查看ipvsadm状态与主机路由









5.3 Keepalived部署5.3.1 Keepalived的安装在master与backup上面均需要配置安装开发组环境工具yum groupinstall "Development tools" -y安装相应软件包yum install openssl-devel popt-devel -yln -s /usr/src/kernels/2.6.32-642.1.1.el6.x86_64 /usr/src/linux #此处要根据实际操作系统最高版本的kernel 为准如果/usr/src/kernels/下面没文件使用yum 安装 kernel-devel#下载keepalivewget http://www.keepalived.org/software/keepalived-1.2.24.tar.gztar zxvf keepalived-1.2.24.tar.gzcd keepalived-1.2.24./configure --with-kernel-dir=/usr/src/kernels/2.6.32-642.1.1.el6.x86_64 (注意这个步骤要看到以下字样才是正常的)Use IPVS Framework : YesIPVS sync daemon support : Yes make && make installcp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalivedcp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/cp /usr/local/sbin/keepalived /usr/sbin/chkconfig --add keepalivedchkconfig --level 2345 keepalived on/etc/init.d/keepalived start至此keepalive就已经安装完毕。 注意:主要backup服务器之上修改两点即可1、state MASTER backup服务器需要更改为BACKUP2、priority 100小于master的优先级 5.3.2 配置keepalived编辑keepalived.conf! Configuration File for keepalived global_defs { notification_email {xuel@51idc.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL} vrrp_instance VI_1 { state MASTER #backup主机配置为BACKUP interface eth0 #实例绑定的网卡 virtual_router_id 51 # VRID 标记( 0...255 ) priority 100#backup主机配置优先级小于100,如配置90 advert_int 1#检查间隔,默认 1s authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.10.10.100#VIP地址,如果有多个 VIP ,继续换行填写 }} virtual_server 10.10.10.100 80 { #设置 VIP及监听后端服务端口 delay_loop 6 lb_algo wrr#LVS调度算法 rr|wrr|lc|wlc|sh|dh|lblc lb_kind DR#LVS实现负载均衡的机制 NAT|DR|TUN nat_mask 255.255.255.0 persistence_timeout 50# 会话保持时间 protocol TCP real_server 10.10.10.11 80 {weight 3 TCP_CHECK {#tcp健康检查 connect_timeout 10#连接超时时间 nb_get_retry 3#重连次数 delay_before_retry 3#重连间隔时间 connect_port 80#健康检查端口 } } real_server 10.10.10.12 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.10.10.13 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }}5.4 后端WEB服务器安装httpd,并写测试页yum install httpdchkconfig httpd on



WEB01与WEB02同时配置echo "1">/proc/sys/net/ipv4/conf/default/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/default/arp_announceecho "1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/all/arp_announce arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0 0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 4-7 - 保留未使用 8 -不回应所有(本地地址)的arp查询 arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.关于对arp_announce 理解的一点补充 sysctl -p添加VIP地址与路由ifconfig lo:0 10.10.10.100 broadcast 10.10.10.100 netmask 255.255.255.255 uproute add -host 10.10.10.100 dev lo:0 5.5 共享存储yum -y install nfs-utils rpcbindservice nfs startchkconfig nfs onvim /etc/exprots

echo “This is NFS-share test page!”>/NFSshare后端WEB挂载共享存储mount 10.10.10.20:/NFSshare /var/www/html/

测试访问VIP

5.6 测试为测试方便,在后端WEB服务器上,写入对用文件



5.6.1 负载均衡测试停止WEB02 httpd



再停止WEB03 httpd







5.6.2 高可用测试

停止LVS-Master 的keepalived服务

此时VIP已经漂移到LVS-Backup上面

后端web已经正常对外提供服务。启动Master之上的Keepalived,VIP成功漂移会MASTER之上



恢复邮件

六、注意事项6.1 LVS安装注意事项ln -s /usr/src/kernels/2.6.32-642.1.1.el6.x86_64 /usr/src/linux #此处要根据实际操作系统最高版本的kernel 为准./configure --with-kernel-dir=/usr/src/kernels/2.6.32-642.1.1.el6.x86_64(注意这个步骤要看到以下字样才是正常的)Use IPVS Framework : YesIPVS sync daemon support : Yes6.2 将相关开机自启服务开机自启服务

开机自启脚本

开机NFS自动挂载

6.3 脚本为方便配置,目前已经写了两个脚本,方便运行安装。在Master与Backup之上配置LVS-MB-ipvsadm.sh#!/bin/bashVIP=10.10.10.100RIPS1=10.10.10.11RIPS2=10.10.10.12RIPS3=10.10.10.13SERVICE=80. /etc/rc.d/init.d/functionscase "$1" instart)echo "Start LVS of DR Mode"echo "1" > /proc/sys/net/ipv4/conf/all/send_redirectsecho "1" > /proc/sys/net/ipv4/conf/default/send_redirectsecho "1" > /proc/sys/net/ipv4/conf/eth0/send_redirectsroute add -host $VIP dev eth0ipvsadm -Cipvsadm -A -t $VIP:$SERVICE -s wlc -pipvsadm -a -t $VIP:$SERVICE -r $RIPS1:$SERVICE -g -w 1ipvsadm -a -t $VIP:$SERVICE -r $RIPS2:$SERVICE -g -w 1ipvsadm -a -t $VIP:$SERVICE -r $RIPS3:$SERVICE -g -w 1ipvsadm --set 30 120 300ipvsadm;;stop)echo "Stop LVS DR"ifconfig eth1 downipvsadm -C;;*)echo "Usage:$0 {start ? stop}"exit 1esac 在后端WEB01、WEB02之上配置LVS-RS-WEB.sh #!/bin/bashVIP=172.16.16.100. /etc/init.d/functionscase "$1" instart)echo "Start LVS of RS"/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev lo:0echo "1">/proc/sys/net/ipv4/conf/default/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/default/arp_announceecho "1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p;;stop)/sbin/ifconfig lo:0 downecho "Close LVS of RS"echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0">/proc/sys/net/ipv4/conf/lo/arp_announceecho "0">/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0">/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p;;*)echo "Usage:$0{start|stop}"exit 1esac

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