【Linux34-1】HAProxy(日志、算法、访问指定后端或本机、黑名单、重定向、访问控制、读写分离)

1. HAProxy简介


HAProxy官网:https://www.haproxy.org/

1.1 HAProxy


HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的 web 服务器不被暴露到网络上

  • 安装:yum install -y haproxy

1.2 配置文件参数


  • global设置全局配置参数,属于进程的配置,通常是和操作系统相关
  • defaults配置默认参数,这些参数可以被用到frontend,backend,Listen组件
  • frontend接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend
  • backend后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器
  • Listenfrontend和backend的组合体

1.3 配置文件说明


global:全局参数的设置

log 127.0.0.1 local2#指定日志设备
chroot      /var/lib/haproxy#jail 目录
pidfile     /var/run/haproxy.pid#定义haproxy的pid 
maxconn 4000#定义每个haproxy进程的最大连接数
#由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍。
user haproxy# 设置运行haproxy的用户,也可用uid 
group haproxy# 设置运行haproxy的组,也可用gid 
daemon# 以守护进程的方式运行
#nbproc 16# 设置haproxy启动时的进程数
stats socket /var/lib/haproxy/stats#

defaults:默认部分的定义

mode        http#mode {http|tcp|health}
#http是七层模式,tcp是四层模式,health是健康检测,返回OK
log         global#应用全局的日志配置
option      httplog#http 日志格式
option      dontlognull  #禁用空链接日志
option http-server-close#每次请求完毕后主动关闭http通道
option forwardfor       except 127.0.0.0/8
option      redispatch  #当 client 连接到挂掉的机器时,重新分配到健康的主机
retries 3#连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
timeout http-request    10s#http请求超时时间
timeout queue           1m#一个请求在队列里的超时时间
timeout connect         10s#连接超时
timeout client          1m#客户端超时
timeout server          1m#服务器端超时
timeout http-keep-alive 10s#设置http-keep-alive的超时时间
timeout check           10s#检测超时
maxconn 3000#定义每个haproxy进程的最大连接数
stats uri /status#haproxy 监控页面
stats auth admin:westos#设置统计页面认证的用户和密码

frontend:前端

frontend  main *:80#前端,监听的实例名称main、地址、端口
#定义一个名叫url_static的acl,匹配路径以下面几个开头的
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#定义一个名叫url_static的acl,当请求的url末尾是以.jpg.gif等结尾的,将会被匹配到
    acl url_static       path_end       -i .jpg .gif .png .css .js 
# 如果满足策略url_static时,就将请求交予backend static
    use_backend static          if url_static
#默认后端,名称为app
    default_backend             app

backend:后端

backend app#定义一个名为app的后端
    balance     roundrobin# 设置haproxy的调度算法
#使用server关键字来设置后端服务器
#后端服务内部名称为app1,app2
#后端服务器的IP和端口
#check接受健康监测
    server  app1 192.168.17.2:80 check
    server  app2 192.168.17.3:80 check

其他配置参数及其语句写法详解



2. HAProxy日志配置


  1. vim /etc/rsyslog.conf:编辑日志配置文件

$ModLoad imudp
$UDPServerRun 514#开启日志端口
*.info;mail.none;authpriv.none;cron.none;local.none     /var/log/messages
local2.*                                                /var/log/haproxy.log

在这里插入图片描述
在这里插入图片描述

  1. systemctl restart rsyslog.service:重启日志服务
  2. systemctl start haproxy.service:开启haproxy服务
  3. cat /var/log/haproxy.log

在这里插入图片描述



3. 配置haproxy并设置加密访问


  1. vim /etc/haproxy/haproxy.cfg

    stats uri /status#设置统计页面的uri为/status
    stats auth admin:westos#设置统计页面认证的用户和密码
frontend  main *:80#前端名称为main,端口号为80
#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js
#
#    use_backend static          if url_static
    default_backend             app#默认后端,名称为app
backend app#后端
    balance     roundrobin#调度算法
    server  app1 192.168.17.2:80 check
    server  app2 192.168.17.3:80 check

在这里插入图片描述

  1. 重启服务:systemctl restart haproxy.service
  2. netstat -antlupe:可以查看到haproxy端口号为80

在这里插入图片描述

  • 访问测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



4. 调度source算法


将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器.这可以使得同一个客户端IP的请求始终被派发至某特定的服务器.不过,当服务器权重总数发生变化时,如某服务器宕机或添加了的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器.常用于负载均衡无cookie功能的基于TCP的协议.其默认为静态,不过也可以使用hash-type修改此特性


  1. vim /etc/haproxy/haproxy.cfg

在这里插入图片描述

  1. 重启服务:systemctl restart haproxy.service
  2. 测试

在这里插入图片描述
在这里插入图片描述

  1. 实验完改回rr算法,轮询调度,并重启服务


5. 默认后端与备用后端


  1. vim /etc/haproxy/haproxy.cfg

在这里插入图片描述

  1. 重启服务:systemctl restart haproxy.service
  2. 在static的后端server2主机的发布目录下建立目录images,并传入一张图片

在这里插入图片描述

  • 测试1:访问 http://192.168.17.1/status

在这里插入图片描述
在这里插入图片描述

  • 测试2:访问http://192.168.17.1/images

在这里插入图片描述



6. 备用服务器backup


  1. vim /etc/haproxy/haproxy.cfg

在这里插入图片描述

  1. vim /etc/httpd/conf/httpd.conf:修改Apache端口号为8080,开启httpd

在这里插入图片描述
在这里插入图片描述

  1. 重启服务:systemctl restart haproxy.service

  • 测试:当默认后端服务器server3宕机后,自动访问本机成功

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



7. 黑名单与白名单


1 黑名单

  1. vim /etc/haproxy/haproxy.cfg

在这里插入图片描述

  1. 重启服务:systemctl restart haproxy.service

  • 测试:用黑名单中的主机访问192.168.17.1访问失败!但是其他主机却可以正常访问!

在这里插入图片描述
在这里插入图片描述

2 白名单:设置仅黑名单主机可访问即为白名单

在这里插入图片描述
在这里插入图片描述

3 设置黑名单为整个网段

#一个网段不能访问
acl blacklist src 192.168.17.0/24
block if blacklist


8. 重定向


8.1 发生错误后重定向


  1. vim /etc/haproxy/haproxy.cfg

acl blacklist src 192.168.17.250
block if blacklist
errorloc 403 http://www.baidu.com

在这里插入图片描述

  1. 重启服务:systemctl restart haproxy.service

  • 测试

在这里插入图片描述

8.2 直接重定向


  1. vim /etc/haproxy/haproxy.cfg

#全局重定向
redirect location http://www.westos.org
#仅黑名单重定向
redirect location http://www.westos.org if blacklist

在这里插入图片描述


  1. 重启服务:systemctl restart haproxy.service

  • 测试

在这里插入图片描述



9. 访问控制


  1. vim /etc/haproxy/haproxy.cfg

acl list src 192.168.17.250
acl denyjpg path /images/wsx.png
http-request deny if denyjpg list

在这里插入图片描述

  1. 重启服务:systemctl restart haproxy.service

  • 测试

在这里插入图片描述



10. 读写分离


10.1 HAProxy主机配置

  1. vim /etc/haproxy/haproxy.cfg

acl write method PUT
acl write method POST#(HEAD为读)
use_backend static          if write

在这里插入图片描述

  1. 重启服务:systemctl restart haproxy.service

10.2 读 调用的后端主机配置


server3

  1. yum install -y php
  2. systemctl restart httpd.service
  3. 在server3的默认发布目录下有一个目录upload,两个php文件
  4. chmod 777 /var/www/html/upload/
  5. scp upload_file.php [email protected]:/var/www/html/:向读的后端传入php文件

在这里插入图片描述

  • 测试:访问http://192.168.17.1/index.php,但是不能上传.ipg图片

在这里插入图片描述
在这里插入图片描述

10.3 写 调用的后端主机配置


  1. yum install -y php
  2. systemctl restart httpd.service

在这里插入图片描述

  • 测试:访问http://192.168.17.1/index.php,上传.jpg图片成功!

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46069582/article/details/112645230