haproxy与nginx对比
haproxy是跟nginx相似的一个负载均衡产品,它们有如下的特点:
二者现在都能支持http/tcp/udp的负载均衡,nginx的采用类似编程语言的配置,用文档结构表示配置关系,看起来比较清晰,
haproxy的配置有点像网络设备,定义和引用,有时候搞清一个逻辑需要上下来回翻看。
nginx是master-workers多进程,每个进程单线程,多核CPU能充分利用;
haproxy是多线程,单进程就能实现超高性能,虽然haproxy也能多进程,但是网上资料多认为开了多进程也不能提升性能,不建议多进程跑。
即使做反向代理nginx性能略低于haproxy,但实际两者性能都超高,性能问题几乎不用担心。
各自特点如下:
nginx:
使用花括号,层级化的配置文件结构
除了自带的map、if语句可以实现简单逻辑,原生支持js/perl脚本,非官方支持lua
除了做负载均衡还可以做静态web服务器,缓存服务器(Haproxy不行)
模块化,按需编译,因为模块化,所以可选很多第三方扩展模块
开源版本只有基础功能,更多的功能要折腾第三方模块,或者花钱买官方扩展版的nginx plus
haproxy:
定义和引用,命令式的配置结构
支持acl,但不支持其他脚本语言(评论里有人说现在可以支持了)
做负载均衡性能比nginx好
有一个状态统计页面
官方支持会话保持、健康检查等(nginx开源版不带)
基础功能覆盖要比nginx开源版好,但是不易扩展,缺乏第三方资源。
haproxy的安装
#首先需要安装rsyslog服务
yum install rsyslog
vi /etc/rsyslog.conf
#修改与增加如下的内容:
#开户网络服务
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
#开启日志规则与存储位置
local2.* /var/log/syslog
#启动rsyslog
systemctl start rsyslog
#测试rsyslog
logger --port 514 --priority local2.info --server 127.0.0.1 --tag test hello
#安装haproxy
yum install haproxy
haproxy的配置
#首先启动两个http服务作为测试的后端
docker run -d --name http1 -p 81:80 httpd
docker run -d --name http2 -p 82:80 httpd
#修改其中一个容器的网页内容
docker exec -it http2 bash
cd htdocs
sed -i 's/works/works2/g' index.html
#将it works 改成 it works2.
#配置haproxy /etc/haproxy/haproxy.cfg
#大部分的配置都不需要修改,把不需要的注释起来,这里需要对比增加的内容示例如下:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen stats #打开状态报告的功能
mode http
bind 0.0.0.0:1080 #打开状态报告的功能
stats enable
stats uri /haproxyadmin #打开状态报告的功能的链接路由
frontend www #配置的前端
bind *:80
mode http
log global
default_backend app
backend app
balance roundrobin
server app1 192.168.42.73:81 cookie 1 check inter 5000 rise 3 fall 3 weight 1
server app2 192.168.42.73:82 cookie 1 check inter 5000 rise 3 fall 3 weight 10
# cookie 1 代表持久连接
# check 健康检查
# inter 5000 5秒检查一次
# rise 3 fall 3 3次都失败就踢出去,3次成功就加进来
# weight 权重
启动我们的haproxy
systemctl start haproxy
curl http://127.0.0.1
#这里可以看到多次的请求会自动转发到不同的后端上
查看我们的状态报告
http://#.#.#.#:1080/haproxyadmin