三期总目录链接
目录
一、Haproxy介绍
1、HTTP请求
2、调度算法
二、使用Haproxy+Nginx搭建一套Web群集案例
1、安装Nginx1服务器
2、安装Nginx2服务器
3、Haproxy代理服务器
4、测试
5、Haproxy的日志
复习题
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能
Haproxy是目前比较流行的一种群集调度工具,Haproxy 与LVS、Nginx的比较:LVS性能最好,但搭建相对复杂;Nginx的upstream模块支持群集功能,但对群集节点健康检查功能不强,性能没有Haproxy好
通过URL访问网站使用的协议是HTTP协议,此类请求一般称为HTTP请求。HTTP请求的方式分为GET方式和POST方式。当使用浏览器访问某一个URL,会根据请求URL返回状态码
正常状态码2××、3××
异常会返回4××、5××
LVS、Haproxy、Nginx常用的算法 | |
RR(Round Robin)轮询调度 | 是最常用最简单的一种算法,进行轮回访问,以实现负载均衡 |
LC(Least Connections)最小连接数 | 根据后端的节点连接数大小动态分配前端请求,哪个服务器连接数小就分配给那个服务器 |
SH(Source Hashing)基于来源访问调度 | 此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、COOKIE等做群集调度;顾名思义就是第一次访问哪个服务器第二次访问的还是访问的那个服务器除非重启负载均衡调度器 |
Haproxy:192.168.1.1
Nginx1:192.168.1.4
Nginx2:192.168.1.5
进行脚本安装:直接复制粘贴注意要有nginx安装包
echo '
#!/bin/bash
read -p "请输入首页内容:" index
yum -y install pcre-devel zlib-devel
tar zxvf nginx-1.12.0.tar.gz -C /usr/src/
cd /usr/src/nginx-1.12.0
useradd -M -s /sbin/nologin nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
echo "$index
" >/usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx
netstat -anput |grep nginx &> /dev/nullif [ $? -eq 0 ] ;thenecho "nginx服务成功启动"
elseecho "nginx服务未成功启动,请检查安装过程"
fi' > nginx.sh
赋予权限 :
chmod +x nginx.sh
./nginx.sh #直接启动
除web内容不一样其他步骤与nginx1一样
安装完后的默认信息 | |
默认安装目录 | /usr/local/nginx |
默认日志 | /usr/local/nginx/logs |
默认监听 | 80 |
默认web目录 | /usr/local/nginx/html |
3.1编译安装haproxy
[root@C7--01 ~]# yum -y install pxre-devel bzip2-devel
[root@C7--01 ~]# tar xf haproxy-1.5.19.tar.gz -C /usr/src
[root@C7--01 ~]# cd /usr/src/haproxy-1.5.19/
[root@C7--01 haproxy-1.5.19]# make TARGET=linux2 #64位系统
.......
....[root@C7--01 haproxy-1.5.19]# make install
......
...
排查错误:
1、检查gcc、gcc-c++是否安装rpm -qa gcc、rpm -qa gcc-c++(已安装)
2、检查glibc-devel、cpp、binutils、mpfr、jemalloc是否安装(未安装)
解决: 发现gcc的相关依赖包未安装,安装完后,可执行make编译
3.2Haproxy的(模板配置文件介绍)
Haproxy配置文件分三个部分:global为全局配置;defaults为默认配置;listen为应用组件配置;配置文件测试说明如下
[root@C7--01 haproxy-1.5.19]# cat /usr/src/haproxy-1.5.19/examples/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1global #全局配置log 127.0.0.1 local0 #配置日志记录,local0为日志设备,默认存放在系统日志log 127.0.0.1 local1 notice #notice为日志级别,通常有24个级别#log loghost local0 info #把info和notice日志分别存放,以便查看在/dev/logmaxconn 4096 #最大连接数chroot /usr/share/haproxyuid 99 #用户UIDgid 99 #用户组giddaemon #后台运行#debug#quietdefaults #默认配置参数,一般会被应用组件继承log global #定义日志为global配置中的日志定义mode http #模式为httpoption httplog #采用http日志格式记录日志option dontlognullretries 3 #检查节点的失败次数,连续达到3次认为节点不可用redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接maxconn 2000 #最大连接数contimeout 5000 #连接超时时间clitimeout 50000 #客户端超时时间srvtimeout 50000 #服务器超时时间# option httpclose #关闭客户端请求............
.....listen appli4-backup 0.0.0.0:10004 #定义一个appli4-backup的应用option httpchk /index.html #检查服务器的index.html文件option persist #强制将请求发送到已经down掉的服务器balance roundrobin #负载均衡调度算法 轮询 roundrobinserver inst1 192.168.114.56:80 check inter 2000 fall 3 #定义在线节点server inst2 192.168.114.56:81 check inter 2000 fall 3 backup #定义备份节点
.......
...
3.3配置Haproxy配置文件
[root@C7--01 ~]# mkdir /etc/haproxy
[root@C7--01 ~]# vim /etc/haproxy/haproxy.cfggloballog /dev/log local0 info #info及notice日志分别记录到不同的日志文件中log /dev/log local1 noticemaxconn 4096uid 99gid 99daemondefaultslog globalmode httpoption httplogoption dontlognullretries 3maxconn 2000contimeout 5000clitimeout 50000srvtimeout 50000listen webcluster 0.0.0.0:80option httpchk GET /index.htmlbalance roundrobinserver inst1 192.168.1.4:80 check inter 2000 fall 3server inst2 192.168.1.5:80 check inter 2000 fall 3保存退出
创建自启脚本
[root@C7--01 ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@C7--01 ~]# chmod +x /etc/init.d/haproxy #赋予执行权限
[root@C7--01 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #软连接
[root@C7--01 ~]# chkconfig --add /etc/init.d/haproxy #添加到系统服务器
[root@C7--01 ~]# systemctl start haproxy #启动haproxy
[root@C7--01 ~]# systemctl status haproxy #查看是否启动
● haproxy.service - SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments.Loaded: loaded (/etc/rc.d/init.d/haproxy; bad; vendor preset: disabled)Active: active (running) since 一 2021-09-06 20:00:46 CST; 8s agoDocs: man:systemd-sysv-generator(8)Process: 40635 ExecStart=/etc/rc.d/init.d/haproxy start (code=exited, status=0/SUCCESS)
4.1测试高性能:访问 192.168.1.1
访问成功说明群集的负载均衡调度已经生效,已满足高可用需求
4.2测试高可用
把nginx1服务器关闭nginx服务在次访问
[root@C7--04 ~]# /usr/local/nginx/sbin/nginx -s stop
当一台节点故障,不会影响群集的使用,满足群集的高可用性或者关闭nginx服务器2
方法一:Haproxy的日志默认是输出到系统的syslog中,查看起来不是很方便,为了方便管理haproxy的日志,在生产环境中单独定义(本次实验使用方法一)
[root@C7--01 ~]# cd /etc/rsyslog.d/
[root@C7--01 rsyslog.d]# vim haproxy.conflocal0.* /var/log/haproxy/ha-info.log
local1.* /var/log/haproxy/ha-notice.log
如果不加下面的的配置则除了在/var/log/haproxy.log中写入日志外,也会写入message文件
[root@C7--01 rsyslog.d]# vim /etc/sysconfig/rsyslog......
...
SYSLOGD_OPTIONS="-r -m 0 -c 2" #-r 开启远程日志;-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能;-c 2 使用兼容模式,默认是 -c 5[root@C7--01 rsyslog.d]# systemctl restart rsyslog #重启服务
检查haproxy.cfg是否已配置
[root@C7--01 rsyslog.d]# vim /etc/haproxy/haproxy.cfggloballog /dev/log local0 infolog /dev/log local1 notice
......
...
验证测试 :查看是否有日志产生
[root@C7--01 rsyslog.d]# tail /var/log/haproxy/ha-info.log
tail: 无法打开"/var/log/haproxy/ha-info.log" 读取数据: 没有那个文件或目录
访问http后查看
[root@C7--01 rsyslog.d]# tail /var/log/haproxy/ha-info.log
Sep 6 20:46:45 C7--01 haproxy[40645]: 192.168.1.254:50351 [06/Sep/2021:20:46:45.302] webcluster webcluster/inst1 2/0/1/1/4 304 179 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"
方法二:使用rainerscript语言编写,适用于复杂环境
[root@C7--01 rsyslog.d]# vim /etc/rsyslog.d/haproxy.conf #编辑if ($programname == 'haproxy' and $syslogserverity-text == 'info') then -/var/log/haproxy/haproxy-info.log& ~if ($programname == 'haproxy' and $syslogserverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log& ~
Haproxy参数优化 | ||
参数 | 说明 | 建议 |
maxconn | 最大的连接数 | 推荐使用10240 |
daemon | 守护进程模式 | 可以使用非守护进程模式,在生产环境在建议使用守护进程模式 |
nbproc | 负载均衡的并发进程数 | 建议与当前服务器cpu核相等或2倍 |
retries | 重试次数 | 对集群节点的检查,节点多并发量大,设置为2到3次 |
option http-server-close | 主动关闭http请求选项 | 生产环境中使用此选项,避免由于timeout时间设置过长导致http连接堆积 |
timeout http-keep-alive | 长连接超时时间 | 设置长连接超时时间,可以设置为10s |
timeout http-request | http请求超时时间 | 建议设置时间为5~10s,增加http连接释放的速度 |
timeout client | 客户端超时时间 | 访问量过大,节点响应慢,可以设置短一点,设置为1min |
1. 对比集群调度工具Haproxy、LVS和Nginx的区别
区别:LVS性能最好,但搭建相对复杂;Nginx的upstream模块支持群集功能,但对群集节点健康检查功能不强,性能没有Haproxy好
2. HTTP请求的方式分为哪两种?其区别是什么?
方式:GET、POST方式
区别:GET把参数包含在URL中,POST通过request body传递参数
GET:产生一个TCP数据包;POST:产生两个TCP数据包
3. 简述负载均衡常用的几种调度算法
RR 轮询调度 | 是最常用最简单的一种算法,进行轮回访问,以实现负载均衡 |
LC 最小连接数 | 根据后端的节点连接数大小动态分配前端请求,哪个服务器连接数小就分配给那个服务器 |
SH 基于来源访问调度 | 此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、COOKIE等做群集调度;顾名思义就是第一次访问哪个服务器第二次访问的还是访问的那个服务器除非重启负载均衡调度器 |
4. Linux系统中编译安装haproxy-1.5.19.tar.gz,依次需要执行什么命令?
先执行 TARGET=linux26 命令 在执行 make install 命令
5. Haproxy配置文件通常分为哪几个部分?其作用分别是什么?
全局配置:global 作用:用于设定义全局参数, 属于进程级的配置, 通常与操作系统配置有关
默认配置:defaults 作用:配置默认参数,一般会被应用组件继承
应用组件配置:listen 作用:一般配置应用模块参数
6. Haproxy配置文件中的log 127.0.0.1 local0配置项的作用是什么?
log 127.0.0.1 local0配置项的作用:定义全局日志, 配置在本地, 通过local0 输出, 默认是info级别,可配置两条
7. Haproxy配置文件中server inst1 192.168.114.56:80 check inter 2000 fall 3的作用是什么?
作用:服务器节点的地址、名称、端口 、检查间隔时间、健康检查次数3次认为失败
8. Haproxy配置文件中的 retries 3配置项的作用是什么?
配置文件中的 retries 3 的作用:检查节点的失败次数,连续达到3次认为节点不可用
9. Haproxy配置文件中通过什么配置项指定负载均衡调度算法使用轮询算法?
使用 balance roundrobin 配置项指定
10. 写出三个以上Haproxy优化常用到的参数,分别代表什么含义?
maxconn | 最大的连接数 推荐使用10240 |
daemon | 守护进程模式 可以使用非守护默认 |
nbproc | 负载均衡的并发进程数 建议与当前服务器cpu核相等或2倍 |
retries | 重试次数 对集群节点的检查,节点多并发量大,设置为2到3次 |