Haproxy负载均衡器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dream_ya/article/details/81543619

一、Haproxy介绍


  • Haproxy(由C语言编写而成的)提供高可用性及负载均衡,基于TCP(四层)和HTTP(七层)的应用程序代理软件。

  • HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

  • Haproxy可以屏蔽内部真实服务器,防止内部服务器遭受攻击。

  • 我们可以通过官网查看配置。

二、实验环境


注意:selinux iptables off
操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago)
百度网盘链接: https://pan.baidu.com/s/15i6LvJ1H6A1JrNvvr9mSRw 密码: vp73

主机名 IP 安装服务 功能说明
server1 10.10.10.1 Haproxy 实现负载均衡
server2 10.10.10.2 Apache 显示WEB页面
server3 10.10.10.3 Apache 显示WEB页面
dream(真机) 10.10.10.250 用于测试

三、Haproxy安装


1、解决依赖(使用rpmbuild安装)

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

2、使用rpmbuild建立rpm包

[root@server1 ~]# yum install -y rpm-build
[root@server1 ~]# rpmbuild -tb haproxy-1.6.11.tar.gz
[root@server1 ~]# cd rpmbuild/RPMS/x86_64/
[root@server1 x86_64]# ls
haproxy-1.6.11-1.x86_64.rpm
[root@server1 x86_64]# rpm -ivh haproxy-1.6.11-1.x86_64.rpm

四、安装Apache(server2、3)


1、安装Apache

[root@server2 ~]# yum install -y httpd

2、建立发布文件和启动

[root@server2 ~]# echo "server2" >/var/www/html/index.html
[root@server2 ~]# /etc/init.d/httpd restart

五、配置Haproxy


1、复制配置文件

[root@server1 ~]# tar xf tar xf haproxy-1.6.11.tar.gz  
[root@server1 ~]# cp /root/haproxy-1.6.11/examples/content-sw-sample.cfg /etc/haproxy/haproxy.cfg

2、配置haproxy.cfg

[root@server1 ~]# groupadd -g 200 haproxy
[root@server1 ~]# useradd -u 200 -g 200 haproxy

[root@server1 ~]# 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
        gid             200
        chroot          /var/empty
        daemon

# The public 'www' address in the DMZ
frontend public
        bind            10.10.10.1:80       ###监听IP和端口
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        mode            http                ###运行模式,可以为tcp(4层)和http(7层)
        log             global
        option          httplog             ###日志类别http日志格式 
        option          dontlognull
        monitor-uri     /monitoruri         ###查看haproxy是否健康的URL
        maxconn         8000
        timeout client  30s

        stats uri       /admin/stats       ###haproxy访问页面
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        default_backend static             ###默认使用static模块

# The static backend backend for 'Host: img', /img and /css.
backend static
        mode            http
        balance         roundrobin          ###轮询(RR)
        option prefer-last-server
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s
        ###负载均衡地址
        server          web1 10.10.10.2:80 check inter 1000
        server          web2 10.10.10.3:80 check inter 1000

[root@server1 ~]# /etc/init.d/haproxy restart

3、测试

(1)查看URL
http://10.10.10.1/monitoruri
http://10.10.10.1/admin/stats

这里写图片描述

这里写图片描述

(2)查询轮询效果

提示:Hapoxy也是自带健康检查当server2或者server3挂掉后,不会访问,恢复后自动加入集群!!!

[root@server1 ~]# curl 10.10.10.1

这里写图片描述

4、加密haproxy访问页面

(1)修改haproxy.cfg 配置
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 

这里写图片描述

[root@server1 ~]# /etc/init.d/haproxy restart
(2)测试
http://10.10.10.1/admin/stats

刚设置的帐号密码User Name:admin Password:dream

这里写图片描述

5、配置Backup

生产使用场景:当后端服务器down了,可以使用本机来提示的作用,给用户一个好的印象。也让用户不再接着访问!!!

(1)修改配置文件haproxy.cfg
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

这里写图片描述

(2)安装httpd
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# sed -i 's#^Listen 80#Listen 8080#g' /etc/httpd/conf/httpd.conf      ###由于端口被占用了,改变端口为8080
[root@server1 ~]# echo "系统维护中....." >/var/www/html/index.html
[root@server1 ~]# /etc/init.d/httpd restart
(3)测试
[root@server2 ~]# /etc/init.d/httpd stop
[root@server3 ~]# /etc/init.d/httpd stop

这里写图片描述

6、开启日志记录功能

(1)配置文件位置
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

这里写图片描述

(2)配置日志
[root@server1 ~]# vim /etc/rsyslog.conf

这里写图片描述

这里写图片描述

加入local0.none表示不再/var/log/messages中生成日志!!!

[root@server1 ~]# /etc/init.d/rsyslog restart
(3)查看生成日志

这里写图片描述

六、配置ACL规则


1、ACL语法介绍

acl <aclname> <criterion> [flags] [operator] [<value>] ...
  • aclname:制定acl的名称,区分大小写,可以多个acl制定同一个aclname,表示“或“的逻辑。
  • criterion:获取样本方法,检查方法;例如:src、src_port、dst、dst_port。
  • flags:可选项,表示标识位。常用“-i“,不区分大小。
  • operator:可选项,操作符:“eq“、“ge“、“gt“、“le“、“lt“。
  • value:根据criterion不同,值的类型不同。

2、SRC规则实现访问控制

(1)拒绝访问配置
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

这里写图片描述

(2)查看结果
[root@server1 ~]# /etc/init.d/haproxy restart
[root@dream ~]# curl 10.10.10.1

可以发现真机访问被拒绝,而其它访问正常!!!

这里写图片描述

这里写图片描述

(3)配置重定向(二种)

1. 通过errorloc配置

<1> 修改haproxy.cfg

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

这里写图片描述

<2> 查看结果

自动跳转访问10.10.10.1的8080端口!!!

[root@server1 ~]# /etc/init.d/haproxy restart
[root@dream ~]# curl -I 10.10.10.1

这里写图片描述

这里写图片描述

2. 通过redirect配置

<1> 配置haproxy.cfg

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

这里写图片描述

<2> 查看结果

[root@server1 ~]# /etc/init.d/haproxy restart
[root@dream ~]# curl -I 10.10.10.1

这里写图片描述

这里写图片描述

3、动静分离

(1)通过use_backend进行配置
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg

这里写图片描述
这里写图片描述

[root@server1 ~]# /etc/init.d/haproxy restart
(2)配置backend默认发布目录
[root@server2 ~]# mkdir -p /var/www/html/backend 
[root@server2 ~]# echo backend >/var/www/html/backend/index.html
(3)安装php(server3)
[root@server3 ~]# yum install -y php
[root@server3 ~]# vim /var/www/html/index.php
<?php
phpinfo()
?>

[root@server3 ~]# /etc/init.d/httpd restart
(4)查看结果

默认访问到php动态网页,加上backend访问到server2的backend目录!!!

http://10.10.10.1/
http://10.10.10.1/backend/

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/Dream_ya/article/details/81543619