haproxy详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了haproxy详解相关的知识,希望对你有一定的参考价值。
本次使用haproxy仅测试web端的高可用以及负载均衡,存在的问题是haproxy是单点,所以还需要借助keepalived对haproxy高可用,下次说明。
服务器:
10.0.0.152:haproxy
10.0.0.154 10.0.0.155 http
需要掌握的是:
1.高可用和负载均衡;
2.系统日志rsyslog;
3.动静分离
一:haproxy简介:
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy的优点:
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);
2、能够补充nginx的一些缺点比如Session的保持,Cookie的引导等工作;
3、支持url检测后端的服务器;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5、HAProxy可以对mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;
6、HAProxy的算法较多,达到8种;
安装:
#wget http://fossies.org/linux/misc/haproxy-1.6.9.tar.gz
#解压
#tar -zxvf haproxy-1.6.9.tar.gz
#cd haproxy-1.6.9
#安装
#make TARGET=linux3100 ARCH=x86_64 PREFIX=/usr/local/haproxy
#make install PREFIX=/usr/local/haproxy
#groupadd haproxy
#useradd -g haproxy haproxy
#参数说明
TARGET=linux3100 #内核版本,
ARCH=x86_64 #系统位数
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径
#touch /usr/local/haproxy/conf/haproxy.cfg(此配置文件需要自己手动创建)
补充:
在Unix类操作系统上,rsyslog广泛应用于系统日志。rsyslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。
开启UDP的端口,并指定日志记录路径。(/etc/rsyslog.conf)
/etc/sysconfig/rsyslog修改:
然后重启service rsyslog restart
修改haproxy配置文件,原本那是没有的,现在要手动创建。
[[email protected] conf]# pwd
/usr/local/haproxy/conf
[[email protected] conf]# cat haproxy.cfg
global
log 127.0.0.1 local2
maxconn 65536
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
daemon
defaults
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
log global
option dontlognull #不记录健康检查日志信息
option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
retries 3 #三次连接失败就认为是服务器不可用,也可以通过后面设置
maxconn 65536
timeout connect 70000
timeout client 70000
timeout server 70000
listen stats 监控
bind 0.0.0.0:1080 端口
stats uri /admin-status 监控的uri
stats auth admin:admin 用户用:密码
mode http
option httplog
frontend main
bind :8088
acl web hdr(host) -i www.abc.com:8088 #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,如果访问www.abc.com这个域名,就触发web规则,。
acl img hdr(host) -i img.abc.com:8088
use_backend webserver if web #如果上面定义的web规则被触发,即访问www.abc.com,就将请求分发到webserver这个作用域
use_backend imgserver if img
# defaultbackend dynamic #不满足则响应backend的默认页面**
backend webserver
mode http
balance roundrobin
server web1 10.0.0.154:80 check inter 2000 fall 3
server web2 10.0.0.155:80 check inter 2000 fall 3
#check inter 2000 是检测心跳频率
fall 3是3次失败认为服务器不可用,weight代表权重
backend imgserver
mode http
#option httpchk /index.php
balance roundrobin
server img01 10.0.0.152:80 check inter 2000 fall 3
server img02 10.0.0.152:80 check inter 2000 fall 3
#backend dynamic
# balance roundrobin
# server test1 10.0.0.152:80 check maxconn 2000
# server test2 10.0.0.155:80 check maxconn 2000
需要在haproxy本机上添加
#echo “10.0.0.152 www.abc.com img.abc.com” >> /etc/hosts
启动命令:
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
查看监控:(监控可以反应各个节点的状态)
测试:
为了测试,我在154,155两台主机上安装httpd服务,并在测试页面分别填写:Two 10.0.0.154和10.0.0.155;并重启两台。
然后在haproxy上测试:(我前面使用的轮询的算法)
所以就是这种样子
使用权重:
这样就起到负载均衡的作用的;
下来测试一下web的高可用;
手动的把154上面的httpd服务停掉;
service httpd stop
在测试:
并不会在去访问154;达到高可用性;
接下来要结合keepalived使用。
以上是关于haproxy详解的主要内容,如果未能解决你的问题,请参考以下文章