haproxy负载均衡配置

负载均衡集群:

四层:
lvs, nginx(stream),haproxy(mode tcp)
七层:
http: nginx(http, ngx_http_upstream_module), haproxy(mode http), httpd, ats, perlbal, pound...

haproxy:

HAProxy 是一款高性能TCP/HTTP 反向代理负载均衡服务器,具有如下功能:

  • 根据静态分配的cookies完成HTTP请求转发
  • 在多个服务器间实现负载均衡,并且根据HTTP cookies 实现会话粘性
  • 主备服务器切换
  • 接受访问特定端口实现服务监控
  • 实现平滑关闭服务,不中断已建立连接的请求响应,拒绝新的请求
  • 在请求或响应HTTP报文中添加,修改,或删除首部信息
  • 根据正则规则阻断请求
  • 提供带有用户认证机制的服务状态报告页面

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

HAproxy组成:

程序环境

主程序:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg
Unit file:/usr/lib/systemd/system/haproxy.service

配置文件

haproxy.cfg主要有两部分组成:global,和proxies配置段

global:全局配置段

进程及安全配置相关的参数
性能调整相关参数
Debug参数

proxies:代理配置段

defaults:为frontend, backend, listen提供默认配置
fronted:前端,相当于nginx, server {}
backend:后端,相当于nginx, upstream {}
listen:同时拥有前端和后端,适用于一对一环境

haproxy安装

1、下载、解压haproxy-1.6.11.tar.gz

2、安装 rpm-build

[root@server4 ~]# yum install rpm-build -y

3、rpmbuild制作rpm安装包

[root@server4 ~]# yum install pcre-devel  gcc -y

[root@server4 ~]# rpmbuild -tb haproxy-1.7.3.tar.gz

4、安装haproxy

[root@server1 examples]# cd

[root@server1 ~]# cd rpmbuild/RPMS/x86_64/

[root@server1 x86_64]# rpm -ivh haproxy-1.7.3-1.x86_64.rpm

安装之后启动脚本直接存在且有执行权限

haproxy负载均衡

实验环境:

一台客户端:172.25.33.250

一台haproxy调度器:172.25.33.4

两台RS:172.25.33.2 172.25.33.3

1、修改配置文件

[root@server4 x86_64]# cd
[root@server4 ~]# cd haproxy-1.7.3/examples/
[root@server4 examples]# cp content-sw-sample.cfg /etc/haproxy

[root@server4 examples]# cd /etc/haproxy/

[root@server4 haproxy]# mv content-sw-sample.cfg haproxy.cfg

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
        option prefer-last-server
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s

        stats uri       /admin/stats

        stats auth      admin:redhat                    ##登录身份认证

        stats refresh   5s                                    ##设置页面刷新时间

# The public 'www' address in the DMZ
frontend public
        bind            *:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }

        default_backend dynamic


# the application servers go here
backend dynamic
        balance         roundrobin
        server          dynsrv1 172.25.33.2:80 check inter 1000
        server          dynsrv2 172.25.33.3:80 check inter 1000

2、添加haproxy用户和组

[root@server4 haproxy]# groupadd -g 200 haproxy
[root@server4 haproxy]# useradd -u 200 -g 200 -M -s /sbin/nologin haproxy

3、调度器开启haproxy服务

4.后端真实服务器部署并开启http服务

[root@server2 ~]# /etc/init.d/httpd start

[root@server3 ~]# /etc/init.d/httpd start

客户端测试:

haproxy日志设置(更改日志路径)

[root@server4 haproxy]# vim /etc/rsyslog.conf

 12 # Provides UDP syslog reception
 13 $ModLoad imudp
 14 $UDPServerRun 514

 61 local7.*                                                /var/log/boot.log
 62 local0.*                                                /var/log/haproxy.log

[root@server4 log]# /etc/init.d/rsyslog restart   ##注意此处使用reload不会生效

更改配置文件,重新加载haproxy服务

[root@server4 haproxy]# /etc/init.d/haproxy reload

查看日志:

ACL访问限制

<1>设置黑名单

[root@server4 haproxy]# vim /etc/haproxy/haproxy.cfg

frontend public
        bind            *:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        acl blacklist src 172.25.33.250        ##黑名单里的ip
        http-request deny if blacklist             ##拒绝黑名单里的ip用户进行访问
        default_backend dynamic

[root@server4 haproxy]# /etc/init.d/haproxy reload

测试:

172.25.33.250测试:

其他主机测试:

<2>黑名单访问重定向

[root@server4 haproxy]# vim /etc/haproxy/haproxy.cfg

frontend public
        bind            *:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        acl blacklist src 172.25.33.250
        http-request deny if blacklist
        errorloc 403 http://172.25.33.4:8080               ##如碰到403报错,将访问重定向

        default_backend dynamic

[root@server4 haproxy]# /etc/init.d/haproxy reload

 黑名单用户浏览器访问haproxy服务器(172.25.33.4):

2、所有用户访问重定向

[root@server4 haproxy]# vim /etc/haproxy/haproxy.cfg

frontend public
        bind            *:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        #acl blacklist src 172.25.33.250
        #http-request deny if blacklist
        #errorloc 403 http://172.25.33.4:8080
        redirect location http://172.25.33.4:8080
        default_backend dynamic

[root@server4 haproxy]# /etc/init.d/haproxy reload

此时所有主机访问haproxy服务器(172.25.33.4)时都会重定向到http://172.25.33.4:8080

测试:

haproxy实现动静分离

实验环境:

一台客户端:172.25.33.250

一台haproxy服务器:172.25.33.4

两台RS:172.25.33.2     充当被调度的静态页面

                 172.25.33.3      充当被调度的动态页面

实验步骤:

haproxy服务器配置:

修改配置文件:

[root@server4 haproxy]# vim /etc/haproxy/haproxy.cfg

frontend public
        bind            *:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        use_backend      dynamic if { path_end .php }
        default_backend static                           ##默认访问静态页面

# the application servers go here
backend static
        balance         roundrobin
        server          dynsrv1 172.25.33.2:80 check inter 1000
backend dynamic
        balance         roundrobin
        server          dynsrv2 172.25.33.3:80 check inter 1000

[root@server4 haproxy]# /etc/init.d/haproxy reload

 172.25.33.3配置:被调度的动态页面

[root@server3 ~]# yum install -y php

[root@server3 ~]# cd /var/www/html/

[root@server3 html]# cat index.php
<?php
phpinfo()
?>

测试:

在浏览器输入172.25.33.4,访问到控制静态页面的server2

在浏览器输入172.25.33.4/index.php,访问到控制动态页面的server3

 haproxy实现读写分离

将写的请求交给server2处理,将读的请求交给server3处理

haproxy服务器配置:

修改配置文件:

[root@server4 haproxy]# vim /etc/haproxy/haproxy.cfg

frontend public
        bind            *:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }

        acl write method POST
        acl write method PUT
        acl read  method GET
        acl read  method HEAD

        use_backend      static if write
        use_backend      dynamic if read
        default_backend  dynamic

[root@server4 haproxy]# /etc/init.d/haproxy reload

 后段读写服务器设置:

两台机器必须都安装php

在server2和server3中的httpd默认发布目录,放进去index.php(选择图片的静态页面)和upload_file.php(上传图片的动态页面),在默认发布目录创建存放上传图片upload目录,修改权限为777。

为了防止文件过大造成的上传受限,可以修改upload_file.php文件中的上传文件大小限制

测试:

进入server2的upload目录可以看到上传的文件

猜你喜欢

转载自blog.csdn.net/weixin_40172997/article/details/87642140