一、HAProxy简介
HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。HAProxy还可以将后端的服务器与网络隔离,起到保护后端服务器的作用。HAProxy的负载均衡能力虽不如LVS,但也是相当不错,而且由于其工作在7层,可以对http请求报文做深入分析,按照自己的需要将报文转发至后端不同的服务器(例如动静分离),这一点工作在4层的LVS无法完成。
二、配置简介
主机结构:
系统环境:CentOS6.8
前端HAProxy主机IP:192.168.10.130 #客户端访问都先走本机,本机代理转发后端的内容
后端两台nginx主机IP:192.168.10.145/192.168.10.146 #配置只允许192.168.10.130的请求,客户端无法直接请求
实验步骤:
1.通过yum安装haproxy
2.配置负载均衡
3.配置访问记录日志
4.配置网页访问统计
5.配置防火墙功能
三、安装配置haproxy
配置之前关闭selinux
# setenforce 0
# yum -y install epel-release #安装epel拓展源
# yum -y install haproxy #安装haproxy
配置文件路径为/etc/haproxy/haproxy.cfg
# vim /etc/haproxy/haproxy.cfg
保留global和defaults的配置,其余的都可以注释掉了
这里讲解一下global和defaults配置
global
log 127.0.0.1 local2 ###[err warning info debug] # 全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志 ###软件工作目录
pidfile /var/run/haproxy.pid ###haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
maxconn 4000 ###最大连接数,默认4000
user haproxy #所属用户
group haproxy #所属组
daemon ###以守护进程方式运行haproxy # turn on stats unix socket
stats socket /var/lib/haproxy/stats ###socket路径defaults
mode http ###默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
log global ###采用全局定义的日志
option httplog ### 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求日志
option dontlognull ###不记录健康检查的日志信息
option http-server-close ##每次请求完毕后主动关闭http通道
option forwardfor except 127.0.0.0/8 ###如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch ###serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries 3 ###3次连接失败就认为服务不可用,也可以通过后面设置
timeout http-request 10s ###http请求超时时间
timeout queue 1m #一个请求在队列里的超时时间
timeout connect 10s #连接超时
timeout client 1m ###客户端连接超时
timeout server 1m ###服务器连接超时
timeout http-keep-alive 10s #设置http-keep-alive的超时时间
timeout check 10s #检测超时
maxconn 3000 ###最大连接数
添加以下内容
############WEB服务配置##################
listen webha80 #监听名称自定义
bind 0.0.0.0:80 #监听80端口
mode http #模式为http
option httplog #记录访问日志
log global #日志记录为全局的设置
maxconn 3000 #最大的连接数为3000
balance roundrobin #负载均衡模式为轮询
server nginx1 192.168.10.145:80 weight 2 rise 2 fall 3 #nginx1权重为2, 连续2次请求正常加入负载,失败3次即判定服务器宕机
server nginx2 192.168.10.146:80 weight 1 rise 2 fall 3 #nginx2权重为1, 连续2次请求正常加入负载,失败3次即判定服务器宕机########统计页面配置########
listen admin_stats
# 监听端口
bind 0.0.0.0:8080
# 启用状态监控
stats enable
mode http
log global
# 统计页面URL
stats uri /stats
# 统计页面密码框上提示文本
stats realm Haproxy\ Statistics
# 统计页面用户名和密码设置
stats auth admin:admin
# 隐藏统计页面上HAProxy的版本信息
#stats hide-version
#当通过认证才可管理
stats admin if TRUE
#统计页面自动刷新时间
stats refresh 30s
配置完成启动服务
# service haproxy start
查看服务端口开放情况
80端口和8080端口应该都处于监听状态
[root@centos6 haproxy]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1778/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1778/haproxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1203/sshd
tcp 0 0 :::22 :::* LISTEN 1203/sshd
两台nginx服务器安装nginx
我这里直接用epel源装nginx
# yum -y install epel-release
# yum -y install nginx
# service nginx start
nginx1上
# echo "this is nginx111111111111111" > /usr/share/nginx/html/index.html #修改index.html以便验证轮询效果
# iptables -I INPUT -s 192.168.10.130 -p tcp --dport 80 -j ACCEPT #允许haproxy对80端口的访问
nginx2上
# echo "this is nginx22222222222222" > /usr/share/nginx/html/index.html
# iptables -I INPUT -s 192.168.10.130 -p tcp --dport 80 -j ACCEPT
haproxy服务器上
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT #开放80端口访问
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT #开放8080端口访问
四、日志记录
修改rsyslog.conf文件
# vim /etc/rsyslog.conf
#由于haproxy的日志是用udp传输的,所以要启用rsyslog的udp监听
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514 #启用级别为local2的设备,并将该设备的所有级别的日志全部输出到/var/log/haproxy.log下
# Save haproxy log
local2.* /var/log/haproxy.log
重启rsyslog服务
# service rsyslog restart
五、访问测试
浏览器中输入http://192.168.10.130
刷新过程三次中两次出现nginx1 一次出现nginx2
查看页面统计
浏览器访问http://192.168.10.130:8080/stats
统计内容包括后端主机情况,访问流量,次数,权重等等。
查看日志输出