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

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

1、 概况2html

    1.1 应用场景2linux

    1.2 LVS/Nginx/HAProxy特色3web

2、 相关理论4算法

    2.1 Keepalived工做原理4sql

    2.2 LVS工做原理4vim

3、 架构拓扑5后端

4、 资源规划5缓存

5、 实施部署5bash

    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

6、 注意事项15

    6.1 LVS安装注意事项15

    6.2 将相关开机自启服务16

    6.3 脚本16

 

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

1、概况

1.1 应用场景

Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件。对于大型的,须要进行高并发的网站或者对网络不太严格的场景,可使用Nginx;对于大型的Web服务器的时候可使用Haproxy;对性能有严格要求的时候可使用LVS,就单纯从负载均衡的角度来讲,LVS也许会成为主流,更适合如今大型的互联网公司。本文采用LVS+keepalived方案来解决业务架构高可用。

1.2 LVS/Nginx/HAProxy特色

名称

特色

LVS

1) 抗负载能力强、是工做在网络4层之上仅做分发之用,没有流量的产生,这个特色也决定了它在负载均衡软件里的性能最强的;

2) 配置性比较低,这是一个缺点也是一个优势,由于没有可太多配置的东西,因此并不须要太多接触,大大减小了人为出错的概率;

3) 工做稳定,自身有完整的双机热备方案,如LVS+KeepalivedLVS+Heartbeat,不过咱们在项目实施中用得最多的仍是LVS/DR+Keepalived

4) 无流量,保证了均衡器IO的性能不会收到大流量的影响;

5) 应用范围比较广,能够对全部应用作负载均衡;

6) 软件自己不支持正则处理,不能作动静分离,这个就比较遗憾了;其实如今许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优点所在。

7) 若是是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,若是实施及配置还有维护过程就比较复杂了

Nginx

1) 工做在网络的7层之上,能够针对http应用作一些分流的策略,好比针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的缘由之一;

2) Nginx对网络的依赖很是小,理论上能ping通就就能进行负载功能,这个也是它的优点所在;

3) Nginx安装和配置比较简单,测试起来比较方便;

4) 也能够承担高的负载压力且稳定,通常能支撑超过几万次的并发量;

5) Nginx能够经过端口检测到服务器内部的故障,好比根据服务器处理网页返回的状态码、超时等等,而且会把返回错误的请求从新提交到另外一个节点,不过其中缺点就是不支持url来检测;

6) Nginx仅能支持httpEmail,这样就在适用范围上面小不少,这个它的弱势;

7) Nginx不只仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP如今也是很是流行的web架构,大有和之前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。

8) Nginx如今做为Web反向加速缓存愈来愈成熟了,不少朋友都已在生产环境下投入生产了,并且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友能够考虑用其做为反向代理加速器。

HAProxy

1) 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、相关理论

2.1 Keepalived工做原理

keepalived:顾名思义是保持存活,经常使用来搭建设备的高可用,防止业务核心设备出现单点故障。keepalived基于VRRP协议来实现高可用主要用做realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。若是将TCP/IP划分为5Keepalived就是一个相似于3~5层交换机制的软件,具备3~5层交换功能,其主要做用是检测web服务器的状态,若是某台web服务器故障,Keepalived将检测到并将其从系统中剔除,当该web服务器工做正常后Keepalived自动将其加入到服务器群中,这些工做所有自动完成,而不须要人工干预,只须要人工修复故障的web服务器便可。

层机理是发送ICMP数据包即PING给某台服务器,若是不,则认为其故障,并从服务器群中剔除层机理是检测TCP端口号状态来判断某台服务器是否故障,若是检测端口存在异常,则从服务器群中剔除层机理是根据用户的设定检查某个服务器应用程序是否正常运行,若是不正常,则从服务器群中剔除。

2.2 LVS工做原理

LVS工做在网络层。经过控制IP来实现负载均衡。IPVS是其具体的实现模块。IPVS的主要做用:安装在Director Server上面,在Director Server虚拟一个对外访问的IPVIP)。用户访问VIP,到达Director ServerDirector Server根据必定的规则选择一个Real Server,处理完成后而后返回给客户端数据。这些步骤产生了一些具体的问题,好比如何选择具体的Real ServerReal Server若是返回给客户端数据等等。IPVS为此有三种机制:

VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改为具体的某台Real Server,端口也改为Real Server的端口,而后把报文发给Real ServerReal Server处理完数据后,须要返回给Diretor Server,而后Diretor server将数据包中的源地址和源端口改为VIP的地址和端口,最后把数据发送出去。由此能够看出,用户的请求和返回都要通过Diretor Server,若是数据过多,Diretor Server确定会不堪重负。

VS/TUNVirtual Server via IP Tunneling,IP隧道技术实现虚拟服务器。它跟VS/NAT基本同样,可是Real server是直接返回数据给客户端,不须要通过Diretor server,这大大下降了Diretor server的压力。

VS/DRVirtual Server via Direct Routing),即用直接路由技术实现虚拟服务器。跟前面两种方式,它的报文转发方法有所不一样,VS/DR经过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,可是必需要求Director ServerReal Server都有一块网卡连在同一物理网段上

3、架构拓扑

 

wKiom1if6LqQvSq7AAFysRIbnGI158.png


4、资源规划

主机名称

内网IP

操做系统

LVS-Master

10.10.10.2

Centos 6.5 64

LVS-Backup

10.10.10.3

Centos 6.5 64

WEB01

10.10.10.11

Centos 6.5 64

WEB02

10.10.10.12

Centos 6.5 64

WEB03

10.10.10.13

Centos 6.5 64

NFS-server

10.10.10.20

Centos 6.5 64

VIP

10.10.10.100

\

5、实施部署

5.1 初始化配置

getenforce 0关闭SeLinux

修改主机名

防火墙开放22/80端口

测试网络连通性

更新YUM

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

yum makecache           #生成缓存

 

5.2 LVS配置

masterbackup上面同时配置

安装可采用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_redirects

echo "1" > /proc/sys/net/ipv4/conf/default/send_redirects

echo "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 1

ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.12:80 -g -w 1

ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.13:80 -g -w 1

#设置tcp tcpfin udp超市链接值

ipvsadm --set 30 120 300

Ipvsadm

配置完成后,查看ipvsadm状态与主机路由wKiom1if6QGxmGLvAAJAoSW8TjY908.png

wKioL1if6VPQswrgAADfbd18iPA107.png

wKiom1if6YaykMuFAAEnqxb0DZ0588.pngwKioL1if6bLwOe-kAAImyjyDCZE115.png

5.3 Keepalived部署

5.3.1 Keepalived的安装

masterbackup上面均须要配置

安装开发组环境工具

yum groupinstall "Development tools" -y

安装相应软件包

yum install openssl-devel popt-devel -y

ln -s /usr/src/kernels/2.6.32-642.1.1.el6.x86_64 /usr/src/linux   #此处要根据实际操做系统最高版本的kernel 为准

若是/usr/src/kernels/下面没文件使用yum 安装 kernel-devel

#下载keepalive

wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz

tar zxvf keepalived-1.2.24.tar.gz

cd keepalived-1.2.24

./configure --with-kernel-dir=/usr/src/kernels/2.6.32-642.1.1.el6.x86_64

 

(注意这个步骤要看到如下字样才是正常的)

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

 

make && make install

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/sbin/keepalived /usr/sbin/

chkconfig --add keepalived

chkconfig --level 2345 keepalived on

/etc/init.d/keepalived start

至此keepalive就已经安装完毕。

 

注意:主要backup服务器之上修改两点便可

1state MASTER  backup服务器须要更改成BACKUP

2priority 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 httpd

chkconfig httpd on

 wKioL1if6hOgTnaUAAA14do87X8155.pngwKiom1if6mTCmxTeAABzu9GlOA8284.png

WEB01WEB02同时配置

echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/default/arp_announce

echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

 

arp_ignore:定义对目标地址为本地IPARP询问不一样的应答模式

0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 

1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 

2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 

3 - 不回应该网络界面的arp请求,而只对设置的惟一和链接地址作出回应 

4-7 - 保留未使用 

8 -不回应全部(本地地址)的arp查询

 

arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,做出相应级别的限制肯定不一样程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 

0 - (默认在任意网络接口(eth0,eth1lo)上的任何本地地址 

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 up

route add -host 10.10.10.100 dev lo:0

 

5.5 共享存储

yum -y install nfs-utils rpcbind

service nfs start

chkconfig nfs on

vim /etc/exprots

wKiom1if6qiBJQh4AABDp2VqjGM206.png

echo “This is NFS-share test page!”>/NFSshare

后端WEB挂载共享存储

mount 10.10.10.20:/NFSshare /var/www/html/

wKioL1if6tuRnMn4AAEYNFouaD0726.png

测试访问VIP

wKiom1if6waS_9QGAAAyLVZWCU8532.png

5.6 测试

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

 wKioL1if60fAmnhmAAA2peFH7B0192.pngwKioL1if61rCmuIxAAKtIzaYWOQ697.png

5.6.1 负载均衡测试

中止WEB02 httpd

wKioL1if67KQUYykAADS39rt5hc180.png

 wKiom1if66KzbGrzAABynwQ5chI847.png

再中止WEB03 httpd

 wKioL1if6-vxpC1RAAC9ZTyh8ek008.png

wKiom1if7Aeh8qXzAACoj0W5QRw404.png

wKioL1if7AmzXbdKAAFYuq_Xt44291.png

5.6.2 高可用测试

 wKioL1if7FqiuKkZAAKvfwCB384054.png

中止LVS-Master keepalived服务

 wKioL1if7Gzz7BTbAAJjS9kzdV0853.png

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

 wKioL1if7LzThHlPAAKIj16SSis197.png

后端web已经正常对外提供服务。

启动Master之上的KeepalivedVIP成功漂移会MASTER之上

wKiom1if7OqDuBW9AAMgGtlFCSc452.png

wKioL1if7TORLscJAACuY5-iUrM257.png

恢复邮件

wKiom1if7UehEMi2AAERxay89WA080.png

6、注意事项

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 : Yes

IPVS sync daemon support : Yes

6.2 将相关开机自启服务

开机自启服务

wKioL1if7dTAbuqLAABcL-VSYHI957.png

开机自启脚本

wKiom1if7f6gzvMtAADjQfxemwM899.png

开机NFS自动挂载

wKioL1if7lbhJAykAAGEoEz5BRU670.png

6.3 脚本

为方便配置,目前已经写了两个脚本,方便运行安装。

MasterBackup之上配置

LVS-MB-ipvsadm.sh

#!/bin/bash

VIP=10.10.10.100

RIPS1=10.10.10.11

RIPS2=10.10.10.12

RIPS3=10.10.10.13

SERVICE=80

. /etc/rc.d/init.d/functions

case "$1" in

start)

echo "Start LVS of DR Mode"

echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects

echo "1" > /proc/sys/net/ipv4/conf/default/send_redirects

echo "1" > /proc/sys/net/ipv4/conf/eth0/send_redirects

route add -host $VIP dev eth0

ipvsadm -C

ipvsadm -A -t $VIP:$SERVICE -s wlc -p

ipvsadm -a -t $VIP:$SERVICE -r $RIPS1:$SERVICE -g -w 1

ipvsadm -a -t $VIP:$SERVICE -r $RIPS2:$SERVICE -g -w 1

ipvsadm -a -t $VIP:$SERVICE -r $RIPS3:$SERVICE -g -w 1

ipvsadm --set 30 120 300

ipvsadm

;;

stop)

echo "Stop LVS DR"

ifconfig eth1 down

ipvsadm -C

;;

*)

echo "Usage:$0 {start ? stop}"

exit 1

esac

 

在后端WEB01WEB02之上配置

LVS-RS-WEB.sh

#!/bin/bash

VIP=172.16.16.100

. /etc/init.d/functions

case "$1" in

start)

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:0

echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/default/arp_announce

echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

;;

stop)

/sbin/ifconfig lo:0 down

echo "Close LVS of RS"

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

sysctl -p

;;

*)

echo "Usage:$0{start|stop}"

exit 1

esac

相关文章
相关标签/搜索