HAproxy的负载均衡,以及基于TCP和HTTP的应用程序代理

本文详细介绍HAProxy的安装步骤及高级配置技巧,包括负载均衡算法、会话保持、黑白名单设置、动静分离等,适合高流量Web站点的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

##首先我们要有一个安装包 haproxy-1.6.11.tar.gz
yum  install  -y  rpm-build      ##源码编译软件
cd /pub##这里面有你的安装包
rpmbuild   -tb  haproxy-1.6.11.tar.gz
yum  install prce-devel  gcc  openssl-devel  #解决依赖性


rpmbuild   -tb   haproxy-1.6.11.tar.gz #重新编译,成功之后进行下步操作


cd  ##切换到/root
cd  rpmbuild
ls
cd  RPMS
ls
cd x86_84
ls
rpm  -qpl   haproxy-1.6.11.x86_64.rpm  ##查看安装haproxy会生成的文件,没有主配置文件,需要将压缩包解压获取


rpm  -ivh  haproxy-1.6.11.x86_64.rpm    ##安装haproxy


cd  /pub
tar zxf  haproxy-1.6.11.tar.gz
ls
cd  haproxy-1.6.11
ls
cd examples/
ls
cp  content-sw-sample.cfg    /etc/haproxy/
cd /etc/haproxy
ls  #此时有 content-sw-sample.cfg 文件,我们需要给他改名字,因为在haproxy启动脚本中读取的配置文件是/etc/haproxy/haproxy.cfg
mv   content-sw-sample.cfg  haproxy.cfg
ls##此时应该改名字成功


vim  haproxy.cfg  ##我们可以看见他有用户组和用户id,所以我们要给他建立用户和用户组,
groupadd -g  200  haproxy
useradd   -g  200 -u  200 haproxy
id  haproxy


vim  /etc/security/limits.conf ##因为我们进配置文件看到他的最大连接数为10000,所以要改
haproxy -  nofile  10000


vim  haproxy.cfg
# This is a sample configuration. It illustrates how to separate static objects
# traffic from dynamic traffic, and how to dynamically regulate the server load.
#
# It listens on 192.168.1.10:80, and directs all requests for Host 'img' or
# URIs starting with /img or /css to a dedicated group of servers. URIs
# starting with /admin/stats deliver the stats page.
#

global   #全局定义
        maxconn         10000 ##最大连接数
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0  ##本机日志
        uid             200
        gid             200
        chroot          /var/empty
        daemon
defaults  ##我门把后端和前端共用的条件放在默认条件下
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s

        stats uri       /admin/stats
        option  prefer-last-server
        retries          2
        option          redispatch
        timeout  connect  30s
        timeout  server   30s
# The public 'www' address in the DMZ
frontend public
        bind            172.25.17.11:80 name clear
#        use_backend     static if { hdr_beg(host) -i img }
#        use_backend     static if { path_beg /img /css   }
        default_backend dynamic
backend dynamic
        balance         roundrobin
        server          dynsrv1  172.25.17.12:80 check inter 1000 ##后端服务器
        server          dynsrv2  172.25.17.13:80 check inter 1000


/etc/init.d/haproxy  start
/etc/initd/haproxy   reload
2和3的httpd服务均要开启   ##在浏览器输入172.25.17.11,出现论调


haproxy有8种均衡算法分别如下:
roundrobin, 简单的轮询
static-rr, 根据权重
leastconn, 最少连接者先处理
source, 根据请求源IP
uri, 根据请求的URI
url_param, 根据请求的URl参数
hdr(name), 根据HTTP请求头来锁定每一次HTTP请求
rdp-cookie(name), 很据cookie(name)来锁定并哈希每一次TCP请求
cat  /var/log/messages ##发现什么都没有,因为我们并没有设置他的服务
vim  /etc/rsyslog.conf
将$ModLoad imudp   $UDPServerRun  541 的注释打开


在local7.*下面加  local0.*       /var/log/haproxy.log


在*.info;mail.none;authpriv.none;cron.none;加local0.none


/etc/init.d/rsyslog  restart
cat /var/log/haproxy.log  ##发现什么都没有,我们需要让浏览器访问几次,再次查看就有了


vim  haproxy.cfg
在default后面加    stats  auth  admin:westos


defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri  ##看到的是ok字样,表明你haproxy是好的
        maxconn         8000
        timeout client  30s

        stats uri       /admin/stats   ##看到的是表格样式界面,这也可以更改为stats,
        option  prefer-last-server      搜索变成http://172.25.17.11/stats
        retries          2
        option          redispatch
        timeout  connect  30s
        timeout  server   30s
        stats  auth  admin:westos
/etc/init.d/haproxy   reload
在浏览器访问http://172.25.17.11/admin/stats   ##此时访问需要用户和密码admin  westos

###在黑名单里面的不能访问
在前端frontend  public  加
   acl  blacklist  src  172.25.17.250
   http-request  deny  if  blacklist     #如果在黑名单里,访问拒绝


frontend public
        bind            172.25.17.11:80 name clear
         acl    blacklist  src 172.25.17.250
         http-request  deny  if  blacklist
/etc/init.d/haproxy   reload
在浏览器访问http://172.25.17.11  ##403被拒

##我们可以让拒绝链接到server1的httpd上
在前端frontend  public  加
acl    blacklist  src 172.25.17.250
http-request  deny  if  blacklist
errorloc  403   http://172.25.17.11:8080
或者直接链接到server1上  redirect  location  http://172.25.17.11:8080
/etc/init.d/haproxy   reload
此时server1要开启httpd服务,并改8080端口,重启httpd服务
在浏览器访问http://172.25.17.11  ##出现server1里面的内容

##更改循环算法
在后端注释论叫增加   balance   source  ##根据ip进行访问,同一个ip访问的是同一种东西
/etc/init.d/haproxy   reload
在浏览器访问http://172.25.17.11  ##不会改变访问的内容

动静页面分离(在没有分离之前,两个ip一直在一起)
backend dynamic
        balance         roundrobin
       # balance           source
        server          dynsrv1  172.25.17.12:80 check inter 1000
backend static
        balance         roundrobin
        server          dynsrv2  172.25.17.13:80 check inter 1000
将前端访问默认的后端改为static静态
use_backend    dynamic    if { path_end -i  *.php   }
default_backend static


/etc/init.d/haproxy  reload
在动态ip上下载php
yum  install  php
vim /var/www/html/index.php
<?php
phpinfo()
?>


/etc/init.d/httpd  restart
在浏览器访问http://172.25.17.11 可以看见动静轮询

##给浏览器上传某东西
在前端加
  acl  write  method  POST
  acl   write  method  PUT
  use_backend   dynamic if  write
  default_backend static


/etc/init.d/haproxy   reload
给动态ip里面下载安装包同时删除/var/www/html里面所有的东西
cd  /var/www/html/
rm  -fr  *
把upload包放在html里面
cd   upload
ls
mv  *  .. ##把upload里面的东西放在html里面
ls#此时什么都没有了
cd  ..
ls
ll
chmod 777  upload
ll
vim   upload_file.php
将你上传的东西的尺寸改大一般在后面加2个0,使上传的东西为2兆


scp  -r  *   root@172.25.17.13:/var/www/html
在server3里面
cd /var/www/html
ls##此时应该有传过来的东西
yum install  -y php
/etc/init.d/httpd restart
ll#看upload的权限是否为777

在浏览器访问http://172.25.17.11
上传照片,照片的格式一定要改为人家要求的格式,否则上传失败


然后去动态ip里面也就是server2里面
cd   /var/www/html/upload
ls  ##可以看见你上传的照片的名字

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值