Haproxy可以做代理服务相对于nginx而言有很多相同之处,统一可以基于mode tcp进行四层代理也可以基于mode http进行七层代理,但不同的是其无法使用location和if等进行匹配判断。突出优势在于有web管理界面,状态统计非常详细。官方推荐只启用一个进程,相对于nginx多核架构工作并不理想。
程序环境:
主程序:/usr/sbin/haproxy
主配置文件:/etc/haproxy/haproxy.cfg
Unit file:/usr/lib/systemd/system/haproxy.service
配置段:
global:全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug参数
proxies:代理配置段
defaults:为frontend, listen, backend提供默认配置;
frontend:前端,相当于nginx, server {}
backend:后端,相当于nginx, upstream {}
listen:同时拥前端和后端
查看配置文件
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
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
重要的几个参数,及性能调优,多数无需修改
log:定义全局的syslog服务器;最多可以定义两个;
log <address> [len <length>] <facility> [max level [min level]]
nbproc <number>:要启动的haproxy的进程数量;
ulimit-n <number>:每个haproxy进程可打开的最大文件数;
maxconn <number>:设定每个haproxy进程所能接受的最大并发连接数;
最大的并发连接数=nbproc * maxconn
maxconnrate <number>:每个进程每秒种所能创建的最大连接数量;
maxcomprate :压缩创建的速率
maxsessrate <number>:进程每秒能创建的会话数量
maxsslconn <number>:每个进程所能接受的ssl连接数
spread-checks <0..50, in percent>:散开监控状态检测
发现日志发送给本机rsyslog的local2的facility,而本机的rsyslog里并没有定义,需要我们自己去配置
所以vim /etc/rsyslog.conf添加一段将local2的所有信息记录在对应日志文件中
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
local2.* /var/log/haproxy.log
接下来我们在haproxy的配置文件中添加我们自定义的frontend和backend
frontend myweb #haproxy内部标识
bind *:80 #监听80端口
default_backend webservs #转发给后端webservs
backend webservs
balance roundrobin
server serv1 192.168.31.201:80 check #检测健康状态
server serv1 192.168.31.203:80 check
然后我们访问haproxy服务器的地址,就可以轮询负载均衡了
root@lvqing:~# for i in {1..10};do curl http://192.168.31.200;done
<h1> backend serv1 </h1>
<h1>backend serv2</h1>
<h1> backend serv1 </h1>
<h1>backend serv2</h1>
<h1> backend serv1 </h1>
<h1>backend serv2</h1>
<h1> backend serv1 </h1>
<h1>backend serv2</h1>
<h1> backend serv1 </h1>
<h1>backend serv2</h1>
网友评论