热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

八章——使用Haproxy搭建web群集(应用——linux防护与群集)

三期总目录链接目录一、Haproxy介绍1、HTTP请求2、调度算法二、使用HaproxyNginx搭建一套Web群集案例1、安装Nginx1服务器2、安装Nginx2服务

三期总目录链接

目录

 一、Haproxy介绍

 1、HTTP请求

 2、调度算法

二、使用Haproxy+Nginx搭建一套Web群集案例

1、安装Nginx1服务器

2、安装Nginx2服务器

3、Haproxy代理服务器

4、测试

5、Haproxy的日志

复习题



 一、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.5

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 "

$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 #直接启动

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.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、测试


4.1测试高性能:访问 192.168.1.1 

 访问成功说明群集的负载均衡调度已经生效,已满足高可用需求

 4.2测试高可用

 把nginx1服务器关闭nginx服务在次访问

[root@C7--04 ~]# /usr/local/nginx/sbin/nginx -s stop

当一台节点故障,不会影响群集的使用,满足群集的高可用性或者关闭nginx服务器2

 

5、Haproxy的日志


方法一: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-requesthttp请求超时时间建议设置时间为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次

推荐阅读
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Elasticsearch1Elasticsearch入门1.1Elasticsearch术语1.1.16.0以前的Elasticsearch术语1.1.26.0以后的Elasti ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
author-avatar
爱在逃离
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有