三期总目录链接
目录
一、Haproxy介绍
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能
Haproxy是目前比较流行的一种群集调度工具,Haproxy 与LVS、Nginx的比较:LVS性能最好,但搭建相对复杂;Nginx的upstream模块支持群集功能,但对群集节点健康检查功能不强,性能没有Haproxy好
1、HTTP请求
通过URL访问网站使用的协议是HTTP协议,此类请求一般称为HTTP请求。HTTP请求的方式分为GET方式和POST方式。当使用浏览器访问某一个URL,会根据请求URL返回状态码
正常状态码2××、3××
异常会返回4××、5××
2、调度算法
LVS、Haproxy、Nginx常用的算法 | |
RR(Round Robin)轮询调度 | 是最常用最简单的一种算法,进行轮回访问,以实现负载均衡 |
LC(Least Connections)最小连接数 | 根据后端的节点连接数大小动态分配前端请求,哪个服务器连接数小就分配给那个服务器 |
SH(Source Hashing)基于来源访问调度 | 此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做群集调度;顾名思义就是第一次访问哪个服务器第二次访问的还是访问的那个服务器除非重启负载均衡调度器 |
二、使用Haproxy+Nginx搭建一套Web群集案例
Haproxy:192.168.1.1
Nginx1:192.168.1.4
Nginx2:192.168.1.4
1、安装Nginx1服务器
进行脚本安装:直接复制粘贴注意要有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 "<h1>$index</h1>" >/usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx
netstat -anput |grep nginx &> /dev/null
if [ $? -eq 0 ] ;then
echo "nginx服务成功启动"
else
echo "nginx服务未成功启动,请检查安装过程"
fi
' > nginx.sh
赋予权限 :
chmod +x nginx.sh
./nginx.sh #直接启动
2、安装Nginx2服务器
除web内容不一样其他步骤与nginx1一样
安装完后的默认信息 | |
默认安装目录 | /usr/local/nginx |
默认日志 | /usr/local/nginx/logs |
默认监听 | 80 |
默认web目录 | /usr/local/nginx/html |
3、Haproxy代理服务器
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.1
global #全局配置
log 127.0.0.1 local0 #配置日志记录,local0为日志设备,默认存放在系统日志
log 127.0.0.1 local1 notice #notice为日志级别,通常有24个级别
#log loghost local0 info #把info和notice日志分别存放,以便查看在/dev/log
maxconn 4096 #最大连接数
chroot /usr/share/haproxy
uid 99 #用户UID
gid 99 #用户组gid
daemon #后台运行
#debug
#quiet
defaults #默认配置参数,一般会被应用组件继承
log global #定义日志为global配置中的日志定义
mode http #模式为http
option httplog #采用http日志格式记录日志
option dontlognull
retries 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 #负载均衡调度算*询 roundrobin
server 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.cfg
global
log /dev/log local0 info
log /dev/log local1 notice
maxconn 4096
uid 99
gid 99
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server inst1 192.168.1.4:80 check inter 2000 fall 3
server 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 ago
Docs: man:systemd-sysv-generator(8)
Process: 40635 ExecStart=/etc/rc.d/init.d/haproxy start (code=exited, status=0/SUCCESS)
4、测试
4.1测试高性能:访问 192.168.1.1
访问成功说明群集的负载均衡调度已经生效,已满足高可用需求
4.2测试高可用
把nginx1服务器关闭nginx服务在次访问
[root@C7--04 ~]# /usr/local/nginx/sbin/nginx -s stop
当一台节点故障,不会影响群集的使用,满足群集的高可用性或者关闭nginx服务器2
复习题
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次 |