高性能业务架构解决方案(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特点

名称

特点

LVS

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

2) 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;

3) 工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+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仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;

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.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-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.1 初始化配置

l getenforce 0关闭SeLinux

l 修改主机名

l 防火墙开放22/80端口

l 测试网络连通性

l 更新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配置

在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_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状态与主机路由

5.3 Keepalived部署

5.3.1 Keepalived的安装

在master与backup上面均需要配置

安装开发组环境工具

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服务器之上修改两点即可

1、state MASTER  backup服务器需要更改为BACKUP

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

chkconfig httpd on

WEB01与WEB02同时配置

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:定义对目标地址为本地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 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

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

IPVS sync daemon support : Yes

6.2 将相关开机自启服务

开机自启服务

开机自启脚本

开机NFS自动挂载

6.3 脚本

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

在Master与Backup之上配置

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

在后端WEB01、WEB02之上配置

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

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

  1. cli3解决 ie11语法错误 vue_从零到一教你基于vue开发一个组件库高性能前端架构解决方案...

    Vue是一套用于构建用户界面的渐进式框架,目前有越来越多的开发者在学习和使用.虽然笔者有近2年没有从事vue的开发了,但平时一直在关注vue的更新和发展,笔者一直认为技术团队的组件化之路重点在于基础架 ...

  2. keepalived双机热备原理及实例部署LVS+keepalived

    keepalived简介 它是由C语言编写的路由热备软件,主要提供简单高效的负载均衡及高可用解决方案.keepalived通过VRRP协议实现高可用架构.lvs实现集群分发,keepalived实现调 ...

  3. 软件架构万字漫谈:业务架构、应用架构与云基础架构

    软件架构万字漫谈:业务架构.应用架构与云基础架构 本部分节选自<软件架构设计> 软件开发就是把一个复杂的问题分解为一系列简单的问题,再把一系列简单的解决方案组合成一个复杂的解决方案.而软件 ...

  4. 架构漫谈:业务架构、应用架构与基础架构

    软件开发就是把一个复杂的问题分解为一系列简单的问题,再把一系列简单的解决方案组合成一个复杂的解决方案.而软件开发中最大的挑战,就是即能够快速高效地针对需求.环境的变化做出改变,也能够持续提供稳定.高可 ...

  5. 企业业务架构的需求管理与软件开发的供求曲线

    世事唯有变化不变,架构亦如此.企业架构因其庞大的体量,必然蕴含众多引致其变化的因素,即便是一个被仔细切分过的服务也很难保证自己不会变化,何况包罗万象的架构.架构设计并不是为了一味的追求稳定,甚至不是为 ...

  6. 基于企业级业务架构的需求管理与软件开发的供求曲线

    世事唯有变化不变,架构亦如此.企业架构因其庞大的体量,必然蕴含众多引致其变化的因素,即便是一个被仔细切分过的服务也很难保证自己不会变化,何况包罗万象的架构.架构设计并不是为了一味的追求稳定,甚至不是为 ...

  7. 利用LVS+Keepalived 实现高性能高可用负载均衡服务器

    作者:NetSeek [url]http://www.linuxtone.org[/url](IT运维专家网|集群架构|性能调优) 欢迎转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 ...

  8. keepalive+nginx实现负载均衡高可用_超详细的LVS+keepalived+nginx实现高性能高可用负载均衡集群教程...

    概述 前面已经介绍了前两部分内容,下面主要介绍在nginx服务器方面的配置和测试整个集群是否可用. 在realserver端配置VIP 1.两台nginx服务器都要执行下面脚本: #vi /etc/r ...

  9. centos6.9负载均衡方案完整配置(lvs+keepalived+pxc+nfs+业务系统)

    前期准备: NFS服务器:计算机名nfsserver,IP地址192.168.1.103,用于存放业务系统的数据. node1:计算机名PXC01,IP地址192.168.1.105,安装pxc系统和 ...

最新文章

  1. Linux 环境下如何安装部署 RocketMQ 教程
  2. 我又被学弟学妹倒挂了
  3. Spring 3整合Quartz 2实现定时任务--转
  4. jQuery表单对象属性过滤选择器
  5. 格雷码问题:输出当输入为n时的格雷码
  6. php 类静态变量 和 常量消耗内存及时间对比
  7. SQL中group by的用法
  8. assert和if的使用
  9. 查看pod网络范围_K8S Pod 内抓包快速定位网络问题
  10. 计算机网络中的语法 语义 时序的概念,网络iso协议及语义语法时序详解
  11. 如何让putty像secureCRT一样支持多标签 - 趁我还年轻 - 博客频道 - CSDN.NET - Opera
  12. 查看oracle数据库的连接情况
  13. 深度学习基础(二)—— 从多层感知机(MLP)到卷积神经网络(CNN)
  14. 论Spring开发框架
  15. c语言串口控制单片机,利用USART实现单片机与串口通信[C语言]
  16. 测试低频噪音软件,低频噪音检测
  17. java 归一化_归一化方法实现(数据类型转换)
  18. 内存映射技术(共享内存)
  19. 计算机方向键不能使用,电脑键盘中的数字按键不能用是什么原因?
  20. 迈克菲实验室:2018五大网络安全威胁

热门文章

  1. Python string生成随机数
  2. Python subprocess.Popen 实时输出 stdout(正确管道写法)
  3. 转发-[原创]ASR1K 在Rommon导入IOS-XE启动
  4. Spring----JmsTemplate
  5. PAT 1017 Queueing at Bank[一般]
  6. SQL Server使用 LEFT JOIN ON LIKE进行数据关联查询
  7. windows证书地址
  8. 表达式计算器类的设计4(面向对象的表达式计算器7)
  9. Sharepoint 2010 根据用户权限隐藏Ribbon菜单
  10. CP-ABE公式推导笔记