haproxy的负载均衡,网页重定向,健康检查,动静分离,上传下载分离

一 haproxy介绍

1) HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
2)HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
3) HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。

二 环境搭建

1 )安装haproxy
方法1:yum 安装
yum install haproxy.x86_64 -y
方法2:rpm包安装
1 yum rpm-build-4.8.0-37.el6.x86_64 install -y
2 rpmbuild -tb haproxy-1.6.14.tar.gz
3 cd rpmbuild/RPMS/x86_64/
4 rpm -ivh haproxy-1.6.14-1.x86_64.rpm
5 tar zxf haproxy-1.6.14.tar.gz
6 cd haproxy-1.6.14/examples/
7 cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg
方法3 源码安装
get haproxy-1.6.11.tar.gz
tar zxf haproxy-1.6.11.tar.gz
less README #查看文档来安装
make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy #编译
make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy install #安装#找到配置文件模板
cp /root/haproxy-1.6.11/examples/content-sw-sample.cfg /etc/haproxy/
cd /etc/haproxy
mv content-sw-sample.cfg haproxy.cfg

2)配置文件修改
1 vim /etc/haproxy/haproxy.cfg


global          #全局参数设置
        maxconn         10000         #设置最大连接数
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0   #全局日志设置
        uid             200            # 用户ID 如果没有,需要手动添加用户
        gid             200           # 用户UID 如果没有,需要手动添加组
        chroot          /var/empty   # 监牢,保护机制,让访问的用户在此目录内,无法对其他目录进行操作
        daemon                              #以守护进程的方式运行haproxy
defaults                                  # 定义默认配置
        mode            http                  #默认的模式(tcp/http/health),tcp是四层,http是7层,health只会返回ok
        log             global            #应用全局的日志配置 
        option          httplog        #应用日志记录http请求,默认haproxy不会记录http请求日志
        option          dontlognull          #启用该项,日志将不会记录空连接
        monitor-uri     /monitoruri         # 本机状态的健康检查
        maxconn         8000             #最大连机数,会覆盖gloab 中的设定
        timeout client  30s
        timeout server  5s
        option prefer-last-server 
        retries         2
        option redispatch
        timeout connect 5s
        stats uri       /admin/stats           # uri 状态,全局状态,包含本机与后端服务
        #stats auth    admin:james

# The public 'www' address in the DMZ
frontend public                                    # 前端配置
        bind            *:80 name clear            # 监听本机所有IP
        #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 static backend backend for 'Host: img', /img and /css.
backend dynamic                   # 后端
        balance         roundrobin            # 默认算法轮询
        #option httpchk  HEAD /favicon.ico
        server          statsrv1 172.25.1.3:80 check inter 1000   访问后端的服务器
        server          statsrv2 172.25.1.4:80 check inter 1000

# the application servers go here


3)根据负载设置haproxy最大并发连接数

从三个方面来进行设置
1 查看内核
[root@server1 haproxy]# sysctl -a | grep file
fs.file-nr = 1024	0	186008
fs.file-max = 186008
2 查看应用层面的需求
global          #全局参数设置
maxconn         10000         #设置最大连接数
3 更改系统层面
vim /etc/security/limits.conf  #最后一行增加
haproxy        -     nofile    10000

4 )负载均衡测试(上面配置文件已经设置)
在这里插入图片描述
在这里插入图片描述
5)健康检查
在这里插入图片描述
假如其中一个后端serverv1done掉
在这里插入图片描述
如果不想让别人看到后端服务器的情况,可以增加密码
在配置文件中加入 vim /etc/haproxy/haproxy.cfg
stats auth admin:james
/etc/init.d/haproxy reload
/etc/init.d/haproxy restart
在这里插入图片描述
6 ) 本机健康检查
在这里插入图片描述
7 )日志配置
vim /etc/rsyslog.conf

13 $ModLoad imudp
14 $UDPServerRun 514
.....
 42 *.info;mail.none;authpriv.none;cron.none;local0.none                /var/log/messages
 62 local0.*                                                /var/log/haproxy.log

/etc/init.d/rsyslog restart
在客户端访问http://172.25.1.2/admin/stats 查看日志
tail -f /var/log/haproxy.log
在这里插入图片描述
8)访问控制
配置文件增加 vim /etc/haproxy/haproxy.cfg
acl blacklist src 172.25.1.2
http-request deny if blacklist
errorloc 403 http://172.25.1.2:8080 #本机充当后端服务器
/etc/init.d/haproxy restart
vim /etc/httpd/conf/httpd.conf
修改Listen 8080
/etc/init.d/httpd restart
如果后端两个web服务器都done掉了,让haproxy调度自己主机上web服务,告诉用户系统维护,减少访问压力
客户端:
在这里插入图片描述
维护人员:
在这里插入图片描述
还有可以直接重定向
修改配置文件 vim /etc/haproxy/haproxy.cfg
redirect location http://172.25.1.2:8080 if blacklist
9 )动静分离
修改配置文件 vim /etc/haproxy/haproxy.cfg
在这里插入图片描述
srver3服务器 安装php服务
在这里插入图片描述
客户端测试
在这里插入图片描述
在这里插入图片描述
10)上传下载分离
修改配置文件 vim /etc/haproxy/haproxy.cfg
增加
acl write method POST
acl write method PUT
use_backend dynamic if write
在这里插入图片描述
server2 和 server3安装php服务
1 mkdir -m 777 upload
2 编写上传和下载文件
在这里插入图片描述
scp index.php upload_file.php [email protected]:/var/www/html/ (server4 一样的配置)
3 /etc/init.d/httpd restart
4 客户端上传文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6)查看后端服务器
在这里插入图片描述
在这里插入图片描述
从这可以看出通过用户通过访问server2上传文件,后端服务器servre3下载文件。

猜你喜欢

转载自blog.csdn.net/yangkaiorange/article/details/82840895