#
# This is a sample configuration. It illustrates how to separate static objects
# traffic from dynamic traffic, and how to dynamically regulate the server load.
#
# It listens on 192.168.1.10:80, and directs all requests for Host 'img' or
# URIs starting with /img or /css to a dedicated group of servers. URIs
# starting with /admin/stats deliver the stats page.
#
global
maxconn 10000
//最大连接数
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
nbproc 1
//进程数量(可以设置多个进程提高性能)
pidfile /var/run/haproxy.pid
//haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
uid 503
gid 510
//进程的属主
chroot /usr/local/haproxy
//运行的路径
daemon
//后台形式运行haproxy
defaults
log global
mode http
//所处理的类别 (7层 http;4层tcp )
option httplog #日志类别http日志格式
option dontlognull #不记录健康检查的日志信息
retries 3 #3次连接失败就认为服务不可用,也可以通过后面设置
log 127.0.0.1 local3
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option httpclose #每次请求完毕后主动关闭http通道
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
balance roundrobin #默认的负载均衡的方式,轮询方式
listen admin_status
bind 0.0.0.0:9000
mode http
stats refresh 5s
stats enable
stats uri /admin?stats
stats realm haproxy\Statistics
stats auth admin:admin
stats hide-version
stats admin if TRUE
errorfile 400 /usr/local/haproxy/errorfiles/400.http
errorfile 403 /usr/local/haproxy/errorfiles/403.http
errorfile 408 /usr/local/haproxy/errorfiles/408.http
errorfile 500 /usr/local/haproxy/errorfiles/500.http
errorfile 502 /usr/local/haproxy/errorfiles/502.http
errorfile 503 /usr/local/haproxy/errorfiles/503.http
errorfile 504 /usr/local/haproxy/errorfiles/504.http
capture request header Host len 40
capture request header Content-Length len 10
capture request header Referer len 200
capture response header Server len 40
capture response header Content-Length len 10
capture response header Cache-Control len 8
bind-process 1
# The public 'www' address in the DMZ
frontend http_80_in
bind 0.0.0.0:8080
mode http
log global
option httplog
option dontlognull
monitor-uri /monitoruri
maxconn 8000
timeout client 30s
stats uri /admin/stats
default_backend yhtest
# The static backend backend for 'Host: img', /img and /css.
backend yhtest
mode http
balance roundrobin
option prefer-last-server
retries 2
option redispatch
timeout connect 5s
timeout server 5s
option httpchk HEAD /favicon.ico
server statsrv1 20.26.25.231:8080/test check inter 1000
server statsrv2 20.26.25.233:8080/test check inter 1000
修改rsyslog配置
[root@csv-ora12c-rac1 haproxy]#vi /etc/rsyslog.conf
增加以下三行:
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
local1.* /var/log/haproxy.log
去掉以下两行的#号
$ModLoad imudp //删除前面的#
$UDPServerRun 514 //删除前面的#
修改rsyslog启动参数
vi /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-r -m 0"
service rsyslog restart
5、启动Haproxy
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
6、登录web查看Haproxy信息
http://20.26.25.236:8080/admin/stats
8、第一个折腾难免会遇到很多坑,在此列举下我本次实验遇到的问题
1)启动haproxy告警
[WARNING] 075/085900 (22322) : stats socket will not work as expected in multi-process mode (nbproc > 1), you should force process binding globally using 'stats bind-process' or per socket using the 'process' attribute.
[WARNING] 075/085900 (22322) : Proxy 'admin_status': in multi-process mode, stats will be limited to process assigned to the current request.
[WARNING] 075/085900 (22322) : Proxy 'admin_status': stats admin will not work correctly in multi-process mode.
[WARNING] 075/085900 (22322) : Proxy 'http_80_in': in multi-process mode, stats will be limited to process assigned to the current request.
刚开始/etc/haproxy/haproxy.cfg中nbproc 这个我配置的是2,就像上面告警信息的说我的nbproc 大于1,就要设 置stats bind-process,测试环境我涂省事就直接修改成了nbproc=1,上述告警全部消失了,有空再去深究下。
2)/var/log/haproxy无日志信息
这里参考了网上的博客http://blog.csdn.net/huithe/article/details/13984767,说以下三行信息中间不能用空格。然后我 尝试着用tab替换掉空格,但同时刚开始的时候我忘了取消以下两行的#号,当时我用lsof -i :514是看不到端口信息。 我想问题就是应该出在这里,而不是tab替换空格的问题。后面我把tab改回成空格后,日志照样能打印 到/var/log/haproxy.log文件中。当时我还怀疑过haproxy.log这个文件的权限属性,当时为600,修改rsyslog.conf的同 时我也把haproxy.log文件属性改成777,结果就能看到了。但是我改回600后,日志也照样输出,所以我得出的结果 就是下面这两行没有去掉#。
$ModLoad imudp //删除前面的#
$UDPServerRun 514 //删除前面的#
vi /etc/rsyslog.conf
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
local1.* /var/log/haproxy.log
9.本章到此结束,第一次写博客,很多不足之处还请原谅,欢迎留言交流,下次空闲时用keepalived做Haproxy集群