一、HAProxy简介

HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。HAProxy还可以将后端的服务器与网络隔离,起到保护后端服务器的作用。HAProxy的负载均衡能力虽不如LVS,但也是相当不错,而且由于其工作在7层,可以对http请求报文做深入分析,按照自己的需要将报文转发至后端不同的服务器(例如动静分离),这一点工作在4层的LVS无法完成。

二、配置简介

主机结构:

HAProxy 负载算法 haproxy负载均衡配置_服务器

系统环境: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 

HAProxy 负载算法 haproxy负载均衡配置_haproxy_02

HAProxy 负载算法 haproxy负载均衡配置_服务器_03

查看页面统计

浏览器访问http://192.168.10.130:8080/stats

统计内容包括后端主机情况,访问流量,次数,权重等等。

HAProxy 负载算法 haproxy负载均衡配置_nginx_04

查看日志输出

HAProxy 负载算法 haproxy负载均衡配置_HAProxy 负载算法_05