一.案例概述
haproxy是目前比较流行的一种群集调度工具,同类工具中lvs性能更好,但搭建相对复杂;nginx的upstream模块支持群集功能,但是对群集节点健康检测功能不强,高并发性能没有Haproxy好;Haproxy的官方网站是http://www.haproxy.org/。
常见的Web群集调度器分为软件和硬件。软件通常使用开源的LVS,Haproxy,Nginx;硬件一般使用国外F5;国内的梭子鱼,绿盟。
二.Haproxy负载均衡常用调度算法
Haproxy与nginx和lvs最常用的调度算法有三种:
- 轮询调度RR(Round Robin):最简单最常用的一种算法。
- 最小连接LC(least Connections):根据后端服务器节点连接数大小动态分配前段请求。
- 基于来源访问调度SH(Source Hashing):此算法用于一些有session会话记录在服务器的场景,可以基于来源的IP地址,Cookie等做全集调度
三. 实验案例
1.实验环境
使用三台服务器模拟搭建一套Web群集,如图。
2.编译安装Haproxy
在Haproxy服务器使用haproxy-1.5.19.tar.gz安装包进行编译安装。
yum -y install pcre-devel bzip2-devel gcc*
tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19
make TARGET=linux26
make install
3.Haproxy服务器配置
(1)在/etc/下建立Haproxy的配置文件
mkdir /etc/haproxy //创建配置文件目录
cp haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy //将Haproxy.cfg文件复制到配置文件目录
(2)Haproxy配置文件介绍:
Haproxy配置文件分为三个部分,即global,defaults和listen。global为全局配置,defaults为默认配置,listen为应用组件配置。
global配置项通常下面配置参数
global
log 127.0.0.1 local0 \\配置日志记录,local0为日志设备,默认是系统日志
log 127.0.0.1 local1 notice \\日志级别为notice
#log loghost local0 info
maxconn 4096 \\最大连接数
chroot /usr/share/haproxy \\也就是改变程序执行时所参考的根目录位置,如果有此代码,需要创建此目录
uid 99 \\用户uid
gid 99 \\用户gid
daemon \\以守护进程的方式运行
#debug \\调试模式,输出启动信息到标准输出
#quiet \\安静模式,启动时无输出
备注: 关于日志级别
- static Level DEBUG:DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。
- static Level INFO:INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。
- static Level WARN:WARN level表明会出现潜在错误的情形。
- static Level ERROR:ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。
- static Level FATAL:FATAL level指出每个严重的错误事件将会导致应用程序的退出。
另外,还有两个可用的特别的日志记录级别:
- static Level ALL:ALL Level是最低等级的,用于打开所有日志记录。
- static Level OFF:OFF Level是最高等级的,用于关闭所有日志记录。
defaults配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,即将按照默认配置参数设置。
defaults
log global \\使用globle中定义的日志
mode http \\模式为http
option httplog \\采用http的格式记录日志
option dontlognull \\保证HAProxy不记录上级负载均衡发送过来的用于检测状态数据的心跳包
retries 3 \\检查节点连接失败的次数,超过3次认为节点不可用
# redispatch \\当负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 \\最大连接数
contimeout 5000 \\连接超时时间ms
clitimeout 50000 客户端超时时间ms
srvtimeout 50000 服务器超时时间ms
备注: 在新版本中,超时的设置做了调整,具体如下
contimeout 被 timeout connect取代:定义haproxy将客户端请求转发至后端服务器所等待的超时时长
clitimeout 被timeout client取代:客户端非活动状态的超时时长,是 app 连接 haproxy的时间
srvtimeout 被timeout server取代:客户端与服务器端建立连接后,等待服务器端的超时时长,是haproxy 连接后端web服务器的时间.
listen配置项参数:
listen webcluster 0.0.0.0:80 \\定义群集和监听的端口号
option httpchk GET /index.html \\检查服务器的index.html文件,心跳检测URL设置
balance roundrobin \\负载均衡的调度算法为轮询
server inst1 192.168.1.61:80 check inter 2000 fall 3 \\定义在线节点
server inst2 192.168.1.62:80 check inter 2000 fall 3
备注:check inter 2000是检测心跳频率(每2000ms检测一次),fall 3是3次失败认为服务器不可用
4:创建服务
将HAProxy设置为在您的系统上作为一个服务运行。您可以使用标准的服务管理命令(如systemctl start haproxy,systemctl stop haproxy;service start haproxy,service stop haproxy等,具体命令取决于您的Linux发行版)来管理HAProxy。
[root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy
[root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@localhost haproxy-1.5.19]# chmod +x /etc/init.d/haproxy
[root@localhost ~]# chkconfig --add haproxy
[root@localhost ~]# /etc/init.d/haproxy start // 启动服务
5:测试web群集
http://192.168.1.60/test.html
刷新页面进行测试
或使用脚本测试
[root@localhost ~]# for i in $(seq 10); do curl http://192.168.1.60/test.html ;done
6.Haproxy的日志
(1)编辑/etc/haproxy/haproxy.conf
[root@localhost ~]# vi /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local3
备注:#local3是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的日志级别
(2)编写haproxy日志文件
[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/haproxy.log
&~
(3)配置rsyslog的主配置文件,开启远程日志(可以不配)
[root@localhost ~]# vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS=”-c 2 -r -m 0″
备注:
-c 2 使用兼容模式,默认是 -c 5
-r 开启远程日志
-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能
(4)重启haproxy和rsyslog服务
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# systemctl restart haproxy
(5)访问网站后查看日志
[root@localhost ~]# cat /var/log/haproxy.log
标签:haproxy,Web,root,etc,集群,日志,Haproxy,localhost
From: https://blog.csdn.net/henanxiaoman/article/details/140271987