Haproxy概念
Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会保持或七层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
安装配置
- 下载
wget http://www.haproxy.org/download/1.9/src/haproxy-1.9.0.tar.gz
- 解压
tar -zxvf haproxy-1.9.0.tar.gz
mv haproxy-1.9.0.tar.gz haproxy
cd haproxy
- 安装
[root@localhost haproxy]# uname -a
Linux localhost 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
#TARGET:系统内核版本, ARCH:系统架构,PREFIX:安装目录
make TARGET=linux3100 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
- 配置:
vim /usr/local/haproxy/haproxy.cfg
global
maxconn 4096 #默认最大连接数
daemon #以后台形式运行harpoxy
#chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid #haproxy 进程PID文件
#debug
#quiet
nbproc 2 #设置进程数量
defaults
log global
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
option httplog #日志类别,采用httplog
option dontlognull #不记录健康检查日志信息
log 127.0.0.1 local0 #[日志输出配置,所有日志都记录在本机,通过local0输出]
retries 3 #3次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器,以后将不支持
maxconn 2000
#contimeout 5000
#clitimeout 50000
#srvtimeout 50000
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
listen admin_stats bind 0.0.0.0:8888 #管理页面端口
mode http
stats uri /dbs
stats realm Global\ statistics
stats auth admin:admin #登录帐号密码
listen proxy-mysql bind 0.0.0.0:23306
mode tcp
#roundrobin #轮询方式
#source #类似于nginx的ip_hash
#leastconn #最小连接数
#static-rr,表示根据权重
#balance leastconn #轮训机制
option tcplog
option mysql-check user haproxy #在mysql中创建无任何权限用户haproxy,且无密码
server MySQL1 47.52.231.211:3306 check weight 1 maxconn 2000
server MySQL2 47.52.160.124:3306 check weight 1 maxconn 2000 backup #备用机,主机不档不启用
option tcpka # 是否允许向server和client发送keepalive
#cookie 1表示serverid为1,check inter 1500 是检测心跳频率
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
运行
[root@localhost haproxy]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
至此haproxy便安装启动完成了可以通过访问http://localhost:23306/ 来查看haproxy自带统计页面数据信息。
负载均衡算法
- roundrobin,表示简单的轮询,每个服务器根据权重轮流使用,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法。该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。
- static-rr,表示根据权重,建议关注;每个服务器根据权重轮流使用,类似roundrobin,但它是静态的,意味着运行时修改权限是无效的。另外,它对服务器的数量没有限制。
- leastconn,表示最少连接者先处理,建议关注;leastconn建议用于长会话服务,例如LDAP、SQL、TSE等,而不适合短会话协议。如HTTP.该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。
- source,表示根据请求源IP,建议关注;对请求源IP地址进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。
通过脚本来启动与关闭haproxy
- 编写haproxy脚本
vim /etc/rc.d/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 10 90
#description:haproxy
BASE_DIR="/usr/local/haproxy"
ARGV="$@"
start()
{
echo "START HAPoxy SERVERS"
$BASE_DIR/sbin/haproxy -f $BASE_DIR/haproxy.cfg
}
stop()
{
echo "STOP HAPoxy Listen"
kill -TTOU $(cat $BASE_DIR/logs/haproxy.pid)
echo "STOP HAPoxy process"
kill -USR1 $(cat $BASE_DIR/logs/haproxy.pid)
}
case $ARGV in
start)
start
ERROR=$?
;;
stop)
stop
ERROR=$?
;;
restart)
stop
start
ERROR=$?
;;
*)
echo "hactl.sh [start|restart|stop]"
esac
exit $ERROR
- 启动与停止haproxy
[root@localhost haproxy]# service haproxy stop
STOP HAPoxy Listen
STOP HAPoxy process
[root@localhost haproxy]# ps -ef |grep haproxy |grep -v grep
[root@localhost haproxy]# service haproxy start
START HAPoxy SERVERS
参考
http://www.cnblogs.com/tae44/p/4717334.html
https://blog.csdn.net/nimasike/article/details/48048341
https://www.cnblogs.com/dkblog/archive/2012/03/13/2393321.html
https://www.cnblogs.com/Richardzhu/p/3344676.html