HAProxy是一款反向代理服务器工具,通过它,可以实现负载均衡。它支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。新的1.3引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.
实验拓扑:
172.16.0.198
172.16.0.200 / Web Nginx \ 172.16.0.250
client<-->Haproxy(负载均衡)<--> <---->mysql(集群)
\ Web Nginx /
172.16.0.218
利用HAPorxy实现负载均衡:
一、服务器端安装配置:
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.15.10.tar.gz
tar zxvf haproxy-1.3.15.10.tar.gz
mv haproxy-1.3.15.10 /usr/local/haproxy
mkdir /etc/haproxy
cd /usr/local/haproxy/
make TARGET=linux26
(说明:make TARGET=linux26 CPU=x86-64,我这里是64bit的redhat,如果你是32bit,使用make TARGET=linux26 CPU=i686在当前目录下生成了haproxy)
make install
cp /usr/local/haproxy/examples/haproxy.cfg /etc/haproxy/
修改配置文件如下:
global
maxconn 4096 #最大连接数
user nobody #用户
group nobody #组
daemon #使HAProxy进程进入后台运行
nbproc 4 #通过nbproc多设置几个haproxy并发进程,这样每个进程的task_queue相对就会短很多,性能自然就能提高不少
log 127.0.0.1 local0 err #[err warning info debug]
pidfile /usr/local/haproxy/haproxy.pid #所有进程的pid文件
defaults
log global #采用全局配置日志格式
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
option httplog #采用http日志格式
option dontlognull #
retries 3 #三次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #三次连接失败就认为是服务器不可用,也可以通过后面设置
maxconn 20000 #默认的最大连接数
contimeout 5000 #5秒连接超时(单位毫秒)
clitimeout 50000 #连接超时
srvtimeout 50000 #服务器超时
timeout check 2000 #心跳检测超时
listen Nginx_Web 172.16.0.200:80(若配置虚拟主机,讲Nginx_Web修改为域名)
mode http
balance roundrobin #负载均衡算法(简单的轮询,balance roundrobin;根据请求的源IP,balance source;根据请求的uri,balance uri;根据请求RUL中的参数,balance url_param)
option httpclose #
option forwardfor #
option httpchk GET /test.html #健康检测
server nginx_198 172.16.0.198:80 weight 3 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3
server nginx_218 172.16.0.218:80 weight 3 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3
#rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
listen my_stats 172.16.0.200:8089
mode http #http的7层模式
balance roundrobin
stats refresh 5s #统计页面自动刷新时间
stats hide-version #隐藏统计页面上HAProxy的版本信息
stats uri / haproxy-stats #统计页面url
stats realm Haproxy \ statistic
stats auth admin:admins #统计页面用户名和密码设置
二、日志设置:
HAProxy可以收集本机及其他后端服务器日志,但是需要在HAProxy和操作系统上作一些配置。
使用root账户首先修改/etc/sysconfig/syslog文件,将SYSLOGD_OPTIONS="-m 0” 修改为SYSLOGD_OPTIONS="-m 0 -r -x",支持收集远程服务器日志。
# vim /etc/syslog.conf
在最下边增加
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
重启核心日志服务使配置起效
# service syslog restart
三、启动和监控
haproxy -f /etc/haproxy/haproxy.cfg 启动haproxy
查看监控:
http://172.16.0.200:8089/haproxy-stats
四、开机启动脚本:
haproxy -f <配置文件> [-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]
-d 前台,debug模式
-D daemon模式启动
-q 安静模式,不输出信息
-V 详细模式
-c 对配置文件进行语法检查
-s 显示统计数据
-l 显示详细统计数据
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用后台模式,程序跑在前台
-sf <pidlist>程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后
-st <pidlist>程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后
chkconfig --add haproxy
chkconfig --level 35 haproxy on
vim /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy
脚本内容如下:
#!/bin/bash
# chkconfig: - 85 15
# description: haproxy is a World Wide Reverse agent,load balancers. It is used to server
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
DIR=/usr/local/haproxy
HA=haproxy
DAEMON=/usr/local/sbin/$HA
CONFIG=/etc/haproxy/haproxy.cfg
PIDFILE=$DIR/$HA.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$HA
# Gracefully exit if the package HAs been removed.
test -x $DAEMON || exit 0
start()
{
echo -n "Starting $DESC: $HA"
$DAEMON -f $CONFIG
echo "."
}
stop()
{
echo -n "Stopping $DESC: $HA"
HAproxy_pid=`cat $PIDFILE`
kill $HAproxy_pid
echo "."
}
restart()
{
echo -n "Restarting $DESC: $HA"
$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
四、客户端设置:
安装nginx,添加test.html检查用的文件(内容可随意)
转载于:https://blog.51cto.com/5iqiong/639742