天天看点

负载均衡之LVS,HAProxy和Nginx对比分析及HAProxy安装配置

作者:猿之生活
负载均衡之LVS,HAProxy和Nginx对比分析及HAProxy安装配置

创作不易,关注、点赞,分享了解互联网前沿知识。

负载均衡概述

负载均衡(Load Balance)是应用于互联网后台系统架构设计中的各层,它将请求均匀分摊到多个操作单元上执行。

在实际的APP应用程序中,我们知道Web服务群集前总是有负载平衡服务,典型的负载平衡软件使用会根据网站规模的增加而使用不同的技术。 例如,中小型web APP应用程序Nginx就足够了,但对于大型站点和关键服务,可以使用LVS。

主流负载均衡软件

Nginx、LVS、HAProxy是目前使用最广泛的三种负载平衡软件。

负载均衡之LVS,HAProxy和Nginx对比分析及HAProxy安装配置

最常用的负载均衡软件有LVS、HAProxy和Nginx,结合高可用软件有Heartbeat、Keepalived,可以搭建出承载海量请求的成熟架构如LVS+Keepalived、HAProxy+keepalived等。

Nginx的好处:

1、简单: Nginx安装和配置都非常简单,非常好用

2、重量轻:能承受高负荷压力

3、稳定:用于反向代理,停机概率非常低

4、节约: Nginx对网络稳定性的依赖非常小,理论上只要能ping就可以进行负载功能

5、强大:内置体检; 有很多功能

6、内存消耗少:成本低廉,可以跨平台

Nginx的缺点:

  1. Nginx不支持url来检测;
  2. Nginx仅能支持http和Email,这个它的弱势;
负载均衡之LVS,HAProxy和Nginx对比分析及HAProxy安装配置

LVS的好处:

1、抗负载能力强: LVS内存和cpu资源消耗较低,无流量产生,因此LVS是负载均衡软件中性能最强

2、配置性较低:配置性低,简化操作成本,降低操作失误概率

3、 工作比较稳定:自身有完整的双机热备方案,自身抗负载能力强

4,应用范围广: LVS几乎适用于所有APP应用

LVS的缺点:

  1. 动作分不开2、大网站LVS Keepalived实施复杂,配置成本高
负载均衡之LVS,HAProxy和Nginx对比分析及HAProxy安装配置

HA代理的优点:

1、HAProxy支持虚拟主机,由前端命令实现

2.支持会话保留、cookie引导等。

3. 检测支持URL 检测后端的服务器的问题非常有用。

4.和LVS一样,这只是一个负载均衡软件,单纯从效率上来说,HAProxy的负载均衡速度比Nginx好,并发性也比Nginx好。

5、HAProxy可以负载均衡Mysql读取、发现和负载均衡后端的MySQL节点

6. 可以将请求的URL与header中的信息进行匹配,比lvs有更好的7层实现。

HAProxy 的缺点:

1、不支持POP/SMTP协议和SPDY协议。

2.不支持HTTP缓存功能。即它不能是网络服务器

3、重载配置的能力需要进程重启,这也是软重启,但是不使用Nginx重载更流畅,更易用。

4.对多进程模式的支持不够好

三者对比总结:

性能上LVS>HA>Nginx,功能性和便利性上Nginx>HA>LVS。

以下介绍安装说明

HAProxy安装配置说明

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

以主机pmonapp01、pmonapp02为例,两台主机均需要安装HAPorxy。HAProxy接收外部HTTP请求然后,分发给pmonapp01和pmonapp02上面的Tomcat服务,使pmonapp01和pmonapp02两台服务器上面的Tomcat服务统一对外提供服务端口为8080。

HAProxy安装以pmonapp01为例。

  • 安装前准备

在/tmp目录创建plugin目录,用于临时存放HAProxy安装介质。

使用命令

执行顺序 命令 说明
1 mkdir -p /tmp/plugin 在/tmp/下创建plugin目录

执行示意

[root@pmondbs01 ~] # mkdir /tmp/plugin

然后以通过FTP方式上传haproxy-1.7.1.tar.gz。

  • 安装HAProxy

HAProxy在不同的操作系统平台上,在安装时需要根据操作系统内核版本来指定不同的编译参数。

确定操作系统内核版本

使用uname -r命令查看操作系统内核信息。

[root@pmonapp01~] # uname -r

3.10.0-957.el7.x86_64

操作系统内核版本为3.10.0

HAProxy编译参数对照表:

参数 操作系统内核版本
linux22 Linux 2.2
linux24 Linux 2.4及以上
linux24e 带支持Working epoll的Linux 2.4
linux26 Linux 2.6及以上
linux2628 Linux2.6.28、3.x及以上
solaris Solaris 8或10
freebsd FreeBSD 5到10
netbsd NetBSD
osx Mac OS/X
openbsd OpenBSD 5.7及以上
aix51 AIX 5.1
aix52 AIX 5.2
cygwin Cygwin
haiku Haiku
generic 其他任何操作或者版本
custom 人工调整每项参数

安装HAProxy

根据HAPorxy编译参数对照表得知HAProxy在pmonsapp01上的编译参数为linux2628。

使用命令

执行顺序 命令 说明
1 cd /tmp/plugin/ 进入/tmp/plugin目录
2 tar -zxf haproxy-1.7.1.tar.gz 解压haproxy-1.7.1.tar.gz
3 cd haproxy-1.7.1/ 进入haproxy-1.7.1
4 make TARGET=linux2628 编译haproxy
5 make install 安装haproxy

执行示意

[root@pmonapp01~] # cd /tmp/plugin/

[root@pmonapp01 plugin] # tar -zxf haproxy-1.7.1.tar.gz

[root@pmonapp01 plugin] # cd haproxy-1.7.1/

[root@pmonapp01 haproxy-1.7.1] # make TARGET=linux2628

[root@pmonapp01 haproxy-1.7.1] # make install

  • 配置HAProxy

HAProxy配置包括创建启动脚本、创建配置文件、设置启动方式等,需要依次完成。

创建启动脚本

在解压之后的HAProxy安装介质中的examples/haproxy.init下提供有HAProxy的启动脚本,把该脚本复制到/etc/init.d下,然后赋予755权限,即完成HAProxy启动脚本创建。

使用命令

执行顺序 命令 说明
1 cp /usr/local/sbin/haproxy /usr/sbin/ 复制haproxy启动程序到/usr/sbin目录下
2 cp /tmp/plugin/haproxy-1.7.1/examples/haproxy.init /etc/init.d/haproxy 复制haproxy启动脚本到/etc/init.d目录下
3 chmod 755 /etc/init.d/haproxy 赋予启动脚本755权限

执行示意

[root@pmonapp01 ~] # cp /usr/local/sbin/haproxy /usr/sbin/

[root@pmonapp01 ~] # cp /tmp/plugin/haproxy-1.7.1/examples/haproxy.init /etc/init.d/haproxy

[root@pmonapp01 ~] # chmod 755 /etc/init.d/haproxy

创建配置文件

首先在/etc目录下创建haproxy文件夹,然后将安装介质中conf文件夹下haproxy.cfg通过FTP方式上传至/etc/haproxy下,然后修改以下参数配置。

参数设置详情为:

参数 说明
bind 0.0.0.0:8080 HAProxy对外端口
server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5 HAProxy转发目标Server
server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5 HAProxy转发目标Server

使用命令

执行顺序 命令 说明
1 mkdir /etc/haproxy 在/etc/创建haproxy目录
2 vi /etc/haproxy/haproxy.cfg 编辑HAProxy配置文件
3

bind 0.0.0.0:8080

server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5

server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5

参数及参数值

执行示意

[root@pmonapp01 ~] # mkdir /etc/haproxy

[root@pmonapp01 ~] # vi /etc/haproxy/haproxy.cfg

global

maxconn 20000

ulimit-n 65535

log 127.0.0.1 local0

chroot /var/empty

nbproc 4

daemon

defaults

mode tcp

timeout queue 1m

timeout connect 1m

timeout client 1m

timeout server 1m

timeout check 10s

mode http

timeout queue 1m

timeout connect 1m

timeout client 1m

timeout server 1m

timeout check 10s

listen tomcat-proxy

bind 0.0.0.0:8080

mode http

log global

log 127.0.0.1 local0 err

option forwardfor

balance roundrobin

server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5

server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5

设置HAProxy启动方式

设置HAProxy随操作系统启动。

使用命令

执行顺序 命令 说明
1 chkconfig --add haproxy 添加haproxy启动随系统启动
2 chkconfig --level 12345 haproxy on 修改haproxy启动级别

执行示意

[root@pmonapp01 ~] # chkconfig --add haproxy

[root@pmonapp01 ~] # chkconfig --level 345 haproxy on

启动HAProxy

修改完配置之后务必重启HAProxy,重启命令service haproxy restart。

[root@pmonapp01 ~] # service haproxy restart
  • HAProxy负载均衡配置

两台转发服务器做负载均衡配置,假设情况如下:

主机名 IP地址 权重
pmonapp01 ip.81.47 50%
pmonapp02 ip.81.48 50%
  • 修改pmonapp01的HAProxy配置文件

修改haproxy.cfg为如下结果。

[root@pmonapp01 ~] # vi /etc/haproxy/haproxy.cfg

global

maxconn 20000

ulimit-n 65535

log 127.0.0.1 local0

chroot /var/empty

nbproc 4

daemon

defaults

mode tcp

timeout queue 1m

timeout connect 1m

timeout client 1m

timeout server 1m

timeout check 10s

mode http

timeout queue 1m

timeout connect 1m

timeout client 1m

timeout server 1m

timeout check 10s

listen tomcat-proxy

bind 0.0.0.0:8080

mode http

log global

log 127.0.0.1 local0 err

option forwardfor

balance roundrobin

server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5

server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5

  • 修改pmonapp02的HAProxy配置文件

修改haproxy.cfg为如下结果。

[root@pmonapp02 ~] # vi /etc/haproxy/haproxy.cfg

global

maxconn 20000

ulimit-n 65535

log 127.0.0.1 local0

chroot /var/empty

nbproc 4

daemon

defaults

mode tcp

timeout queue 1m

timeout connect 1m

timeout client 1m

timeout server 1m

timeout check 10s

mode http

timeout queue 1m

timeout connect 1m

timeout client 1m

timeout server 1m

timeout check 10s

listen tomcat-proxy

bind 0.0.0.0:8080

mode http

log global

log 127.0.0.1 local0 err

option forwardfor

balance roundrobin

server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5

server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5

  • 重启HAProxy

HAProxy修改配置之后务必重启HAProxy配置才能生效,重启操作参考1.3.4启动HAProxy。

负载均衡之LVS,HAProxy和Nginx对比分析及HAProxy安装配置

继续阅读