今天也许是最后一次探讨关于HAProxy Nginx LVS Apache的文章,之后将不再赘述,博主之后将要把重心放在Java和Python上,大家如果有什么疑问可以通过博客首页QQ联系、或者留言。

一、今天花点时间总结分享一下HAProxy、Nginx、LVS、Apache:

比较

HAProxy

Nginx

LVS

Apache

 

 

简介

高可用、负载均衡且基于TCP和HTTP应用的代理,支持高并发,多集群反代。

高性能http和反向代理服务器、邮件代理服务器,支持高并发,轻量级Web,低系统资源消耗。

Linux虚拟服务器,常用VS/NAT、VS/TUN和VS/DR,三种模式负载均衡。

高性能Web服务器,支持代理,市场份额很高。

 

 


优点缺点

1、抗负载能力强,负载均衡速度高。

2、支持session保持,Cookie引导,可通过url检测后端服务器健康状态。

3、也可做MySQL、Email等负载均衡。

4、一般不做Web服务器的Cache。


1、抗负载能力强。

2、http、https、Emai协议功能较好,处理相应请求快。

3、Web能力强,配置简单,支持缓存功能、适用动静分离,低内存消耗。

4、不支持session直接保持,但可通过ip_hash解决,通过端口对后端服务器健康检查。

1、抗负载能力强。

2、通过vrrp转发(仅分发)效率高,流量通过内核处理,没有流量产生。(理论)

3、相当稳定可靠。

4、不支持正则,不能做动静分离,配置略复杂,需要IP略多。

1、Web处理能力强,市场份额很高。(不过后期Nginx在Web方面越来越好,份额也在增长)

2、Rewrite强大,并支持很多模块,扩展很方便。

3、Bug少,历史久,比较稳定。

4、处理动态请求比Nginx好。

 

 

支持算法

1、轮循

Round-robin

2、带权轮循

Weight-round-robin

3、原地址保持)

Source

4、RI请求URL

rdp-cookie(根据cookie)

1、轮循

Round-robin

2、带权轮循

Weight-round-robn

3、Ip哈希

Ip-hash

1、rr(轮循)

2、wrr(带权轮循)

3、lc(最小连接)、

4、wlc(权重最小连接)

 

通过相关模块实现代理

官网

www.haproxy.com

nginx.org

www.linuxvirtualserver.org

 

http://www.apache.org/

是否免费

免费

免费

免费

免费

虚拟主机

支持

支持

不支持 

支持

七层(常用)

七层(常用)

四层(常用)

不常用

七层重量级,四层轻量级

七层重量级,四层轻量级

四层重量级

功能略差

热备

Keepalived+其它

Keepalived+其它

Keepalived+其它

Keepalived+其它

负载均衡参考标准

1、效率,并发处理能力、处理数据能力。

2、成本、需求、平台。

 

 二、Nginx、HAProxy,Apache虚拟主机、负载均衡管理方式。

1、Nginx虚拟主机:

1.1)nginx.conf配置文件定义Server(不推荐)

1.2)单nginx.conf加载配置其它config文件

eg:include vhost/*.conf;

1.3)Nginx负载均衡:

#upstream www.qutouwang.org {   
#zone myapp1 64k; 
#server x.x.x.x:80 weight=1 max_fails=2 fail_timeout=30s slow_start=30s; 
#server x.x.x.x:80 weight=1 max_fails=2 fail_timeout=30s;   
#}  
#proxy_pass http://127.0.0.1:8080;

2、HAProxy虚拟主机、配置文件、负载均衡:

2.1)eg:

frontend main :80
acl url_cms  hdr_beg(host) -i cms
acl url_bbs hdr_beg(host) -i bbs
acl url_blog hdr_beg(host) -i blog
use_backend cms if url_cms
use_backend bbs if url_bbs
use_backend blog if url_blog
default_backend cms
backend cms
balance source
server web1 x.x.x.x check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
server web2 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
backend bbs
balance source
server web1 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
server web2 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
backend blog
balance source
server web1 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
server web2 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3

解释说明:

frontend中关于ACL配置部分的内容这个是实现虚拟主机的核心配置部分,另外这个配置文件定义了server_www,servr_bbs,server_blogbackend。

2.2)配置文件以及案例:

 haproxy的配置文件分为四个部分:

     全局配置:

        global:  全局配置段

     代理配置:

        default: 默认配置----->所有在backend、frontend、linsten中相同内容可以在此定义;

        frontend:前段配置----->定义前端套接字,接受客户端请求;

        backend: 后端配置----->定义后端分配规则,与后端服务器交互;

        listen:  绑定配置----->直接将指定的客户端与后端特定服务器绑定到一起;

eg:

global
    log    127.0.0.1 local2  #通过syslog服务的local2输出日志信息
chroot      /var/lib/haproxy  #指定工作目录
#性能相关
    maxconn 4096  #单个进程的最大连接数
#maxpipes      #haproxy使用pipe完成基于内核的tcp报文重组,默认为maxconn/4
#noepoll:在Linux系统上禁用epoll机制;
    #nokqueue:在BSD系统上禁用kqueue机制;
    #nopoll:禁用poll机制;
    #nosepoll:在Linux禁用启发式epoll机制;
    #nosplice:禁止在Linux套接字上使用内核tcp重组
#...
    uid 99        #所属运行的用户uid,默认nobod
    gid 99        #所属运行的用户组,默认nobody
    daemon        #后台运行
    nbproc 2      #工作进程数量
#user        haproxy   #同uid
    #group       haproxy   #同gid 
    pidfile /var/run/haproxy.pid
#description     #当前实例描述信息
defaults
    log global
    log 127.0.0.1 local2 err #使用本机上的syslog服务的local2 设备记录错误信息[err warning info debug]
    mode http          #工作模式在7层,tcp是4层
    option httplog     #使用http日志类别,默认是不记录http请求的
    option httpclose   #每次请求完毕后主动关闭http通道式
    option forwardfor  #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP
    option redispatch  #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    retries 3          #设置尝试次数,3次连接失败则认为服务器不可用
    maxconn 2048       #最大连接数
    contimeout 500    #连接超时
    clitimeout 5000   #客户端超时
    srvtimeout 5000   #服务器超时
    timeout check 2000         #心跳检测超时
listen status 0.0.0.0:8080     #定义状态名字和监听端口
    stats uri /haproxy-status  #查看haproxy服务器状态地址
    stats auth admin:renzhiyuan#查看状态页面的用户名和密码
    stats hide-version         #隐藏haproxy版本信息
    stats refresh 30s          #每5秒刷新一次状态页面
listen web_server 0.0.0.0:80   #定义后端名字和监听端口
    mode http                  #采用7层模式
    balance roundrobin         #负载均衡算法,这里是轮叫
    cookie SERVERID  #允许插入serverid到cookie中,serverid后面可以定义
    option httpchk GET /index.html #健康检测
    server web1 x.x.x.x:80 weight 3 check inter 500 fall 3  
    server web2 x.x.x.x:80 weight 2 check inter 500 fall 3
server web3 x.x.x.x:80 weight 2 check inter 500 fall 3
#server:    #server来设置后端服务器
#webx:      #HAProxy名称,将在日志中显示
#x.x.x.x:80 #后端IP和端口
#weight     #权重值,权重值越大,分配的任务几率越高
#check      #健康检测,inter 500健康检测间隔是500毫秒
#fall       #检测多少次,认为服务器是不可用.

3、Apache虚拟主机和代理案例:

vim /usr/local/apache2/conf/httpd.conf 
#加载模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
#反代
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerName www.xxx.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://x.x.x.x
ProxyPa***everse / http://x.x.x.x/  #反代服务器
#负载均衡
</VirtualHost>
ProxyPass / balancer://proxy/       

<Proxy balancer://proxy>

        BalancerMember http://x.x.x.x:80/  loadfactor=3

        BalancerMember http://x.x.x.x:80/  loadfactor=2

</Proxy>