HAProxy 是一个提供高可用、负载均衡,以及基于TCP和HTTP的代理程序。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接
环境
centos 7.0 3.10.0-514.el7.x86_64
haproxy 1.7.9
haproxy 编译依赖:gcc、make、autoconf、openssl
编译安装
编译依赖安装
yum install gcc pcre pcre-devel openssl openssl-devel -y
编译安装
# PREFIX参数指定安装的目录
make TARGET=linux2628 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
安装完成后检查版本
/usr/local/haproxy/sbin/haproxy -v
配置
创建软连接,因为haproxy.init 脚本默认会到/usr/sbin目录下找haproxy
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
进入编译的目录下的example目录,将haproxy.init文件复制到/etc/init.d/
cp haproxy.init /etc/init.d/haproxy
在赋予/etc/init.d/haproxy 755权限
chmod 755 haproxy
创建配置文件
在/etc/下创建haproxy目录
mkdir /etc/harpoxy
在配置目录下创建文件,haproxy.cfg
配置内容:
#全局配置
global
#设置日志
log 127.0.0.1 local3 info
chroot /usr/local/haproxy
#用户与用户组
user haproxy
group haproxy
#守护进程启动
daemon
#最大连接数
maxconn 4000
#默认配置
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#前端配置,http_front名称可自定义
frontend http_front
# 发起http请求道80端口,会被转发到设置的ip及端口
bind *:80
#haproxy的状态管理页面,通过/haproxy?stats来访问
stats uri /haproxy?stats
default_backend http_back
#后端配置,http_back名称可自定义
backend http_back
#负载均衡方式
#source 根据请求源IP
#static-rr 根据权重
#leastconn 最少连接者先处理
#uri 根据请求的uri
#url_param 根据请求的url参数
#rdp-cookie 据据cookie(name)来锁定并哈希每一次请求
#hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
#roundrobin 轮询方式
balance roundrobin
#设置健康检查页面
option httpchk GET /index.html
#传递客户端真实IP
option forwardfor header X-Forwarded-For
# inter 2000 健康检查时间间隔2秒
# rise 3 检测多少次才认为是正常的
# fall 3 失败多少次才认为是不可用的
# weight 30 权重
# 需要转发的ip及端口
server node1 192.168.179.131:8081 check inter 2000 rise 3 fall 3 weight 30
server node2 192.168.179.131:8082 check inter 2000 rise 3 fall 3 weight 30
配置haproxy日志,haproxy默认是不记录日志,需要借助rsyslog来记录
方法一:直接在/etc/rsyslog.conf中配置
vim /etc/rsyslog.conf
取消注释#
$ModLoad imudp
$UDPServerRun 514
添加
local3.* /var/log/haproxy.log
重启rsyslog
systemctl restart rsyslog
这样配置会haproxy的日志还会记录到/var/log/messages中
因此需要在*.info;mail.none;authpriv.none;cron.none后面追加local3.none
重启rsyslog
方法二:在/etc/rsyslog.d/下创建日志配置
从/etc/rsyslog.conf中的如下配置,可以看出rsyslog会读取/etc/rsyslog.d/目录下的所有以.conf结尾的配置文件
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
因此在/etc/rsyslog.d/下创建
haproxy.conf配置
#配置haproxy的rsyslog日志
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/haproxy.log
为了不需要将日志写入到/var/log/messages中,还需要和方法一种配置一样在/etc/rsyslog.conf中
*.info;mail.none;authpriv.none;cron.none后面追加local3.none
重启rsyslog即可
启动服务
注意如果系统开启了防火墙需要打开对应的端口
第一次启动haproxy先使用
service命令,以后就可以使用systemctl命令来操作
service haproxy start
systemctl start haproxy