Haproxy服务器:192.168.1.112 Apache服务器:192.168.1.12:80(此为自己配置的一个简单apache网页服务器) 百度服务器: 115.239.210.26:80(此为百度网页ip地址) 由于访问百度网页的网友很多,会造成拥堵延时访问。现假设百度有2个网页服务器(一样),服务器ip地址分别为:192.168.1.12:80,115.239.210.26:80。当请求www.baidu.com 的时候,haproxy代理服务会平均分配请求次数到两个服务器中,达到了负载均衡的效果。若把192.168.1.12:80中的apache暂停(偶然破坏),则此服务不再被访问,所有访问都将请求115.239.210.26:80。 Haproxy服务器安装在虚拟机centos5.6中,apache网页服务在虚拟机window2003中,虚拟机都以桥接方式与主机连接,都设置成静态IP地址。因此两台虚拟机和主机形成了简单局域网。 Window2003域名和IP绑定: 在文件C:\WINDOWS\system32\drivers\etc\hosts 添加192.168.1.12 www.baidu.com CentOS域名和IP绑定: 编辑文件vi /etc/hosts 添加 192.168.1.112 www.baidu.com 如果想在主机访问测试: 在文件C:\WINDOWS\system32\drivers\etc\hosts 添加192.168.1.112 www.baidu.com
cd /usr/local/ wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz tar zxvf haproxy-1.3.20.tar.gz cd haproxy-1.3.20 make TARGET=linux26 PREFIX=/usr/local/haproxy #将haproxy安装到/usr/local/haproxy make install PREFIX=/usr/local/haproxy
cd /usr/local/haproxy-1.3.20/examples/ cp haproxy.cfg/usr/local/haproxy/ cd usr/local/haproxy vi haproxy.cfg
#修改前(默认配置): # this config needs haproxy-1.1.28 or haproxy-1.2.1 global log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 chroot /usr/share/haproxy uid 99 gid 99 daemon #debug #quiet defaults log global mode http option httplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen appli1-rewrite 0.0.0.0:10001 cookie SERVERID rewrite balance roundrobin server app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5 server app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5 server app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5 server app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 5 listen appli2-insert 0.0.0.0:10002 option httpchk balance roundrobin cookie SERVERID insert indirect nocache server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3 server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3 capture cookie vgnvisitor= len 32 option httpclose # disable keep-alive rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address listen appli3-relais 0.0.0.0:10003 dispatch 192.168.135.17:80 listen appli4-backup 0.0.0.0:10004 option httpchk /index.html option persist balance roundrobin server inst1 192.168.114.56:80 check inter 2000 fall 3 server inst2 192.168.114.56:81 check inter 2000 fall 3 backup listen ssl-relay 0.0.0.0:8443 option ssl-hello-chk balance source server inst1 192.168.110.56:443 check inter 2000 fall 3 server inst2 192.168.110.57:443 check inter 2000 fall 3 server back1 192.168.120.58:443 backup listen appli5-backup 0.0.0.0:10005 option httpchk * balance roundrobin cookie SERVERID insert indirect nocache server inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3 server inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3 server inst3 192.168.114.57:80 backup check inter 2000 fall 3 capture cookie ASPSESSION len 32 srvtimeout 20000 option httpclose # disable keep-alive option checkcache # block response if set-cookie & cacheable rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP address errorloc 502 http://192.168.114.58/error502.html errorfile 503 /etc/haproxy/errors/503.http
#修改后: # this config needs haproxy-1.1.28 or haproxy-1.2.1 global log 127.0.0.1 local0 #log loghost local0 info maxconn 4096 chroot /usr/local/haproxy nbproc 2 uid 99 gid 99 daemon #debug #quiet defaults log global log 127.0.0.1 local0 mode http option httplog option dontlognull option redispatch retries 3 maxconn 2000 contimeout 5000 clitimeout 10000 srvtimeout 10000 listen stats mode http bind 0.0.0.0:1080 stats enable stats hide-version stats uri /haproxy-stats stats auth admin:admin frontend http-in bind *:80 mode http log global option httpclose option logasap option dontlognull option forwardfor default_backend servers backend servers balance roundrobin server s1 192.168.1.12:80 weight 3 check server s2 115.239.210.26:80 weight 3 check
3.添加日志
在最下边增加日志: vi /etc/syslog.conf local0.* /var/log/haproxy.log 修改日记参数: vi /etc/sysconfig/syslog SYSLOGD_OPTIONS="-r -m 0" 重启日志服务: service syslog restart
4.设置开机启动,为了方便系统在开机时加载,还可以创建启动脚本:
vi /etc/rc.d/init.d/haproxy #!/bin/sh set -e PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin PROGDIR=/usr/local/haproxy PROGNAME=haproxy DAEMON=$PROGDIR/sbin/$PROGNAME CONFIG=$PROGDIR/$PROGNAME.conf PIDFILE=$PROGDIR/$PROGNAME.pid DESC="HAProxy daemon" SCRIPTNAME=/etc/init.d/$PROGNAME # Gracefully exit if the package has been removed. test -x $DAEMON || exit 0 start() { echo -n "Starting $DESC: $PROGNAME" $DAEMON -f $CONFIG echo "." } stop() { echo -n "Stopping $DESC: $PROGNAME" haproxy_pid=cat $PIDFILE kill $haproxy_pid echo "." } restart() { echo -n "Restarting $DESC: $PROGNAME" $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE) echo "." } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2 exit 1 ;; esac exit 0
5.执行检查:
保存后赐予可执行权限: chmod +x /etc/rc.d/init.d/haproxy chmod +x /usr/local/haproxy/haproxy.cfg 启动 haproxy:(ntsysv) cd /usr/local/haproxy/sbin ./haproxy -f /usr/local/haproxy/haproxy.cfg
6.常见问题:
[ALERT]109/203959 (6743) : Starting proxy stats: cannot bind socket
查看端口:
netstat –ntpl
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 5659/haproxy
1080或80端口被占用,删除:
kill 5659
再启动;
./haproxy -f /usr/local/haproxy/haproxy.cfg
7.测试:
打开网页(成功):http://localhost/haproxy-stats
现在Haproxy服务器中打开百度网页 www.baidu.com,不停的用F5刷新,会看到网页时而
打开apache页面,时而打开百度页面(apache页面假设为百度的另一个服务页面)。
模拟一台服务器宕机,停止apache服务,此网页不可访问,因此打开的百度网页都请求到另一个服务中。
相关的haproxy代理统计信息可浏览http://localhost:1080/haproxy-stats查看
资料参考:
http反向代理之haproxy详解