Haproxy

来源:互联网 发布:便携网络图形图像 编辑:程序博客网 时间:2024/06/03 13:05

Haproxy

Haproxy工作过程:6次TCP握手、4次NAT转换 

server1端进行配置--172.25.90.1

<1>rpmbuild  -tb tar  zxf  haproxy-1.6.11.tar.gz

  yum  installl  pcre-devel -y                     ##软件依赖性

<2>cd /root/haproxy-1.6.11example

  cp  content-sw-sample.cfg  /etc/haproxy/haproxy.cfg  ##主配置文件,注意以.cfg结尾

(1)简单配置

  vim  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                        ##定义管理haproxy的用户id       

chroot         /var/lib/haproxy              ##

       daemon

defaults                                                           ##定义默认函数块

       mode            http                      ##采用httpd服务

       log             global                   

       option          httplog

       option          dontlognull

       monitor-uri     /monitoruri

       maxconn         8000              ##定义最大连接数,一般会覆盖其它定义的数值

       timeout client  30s

       timeout connect 5s

retries         2                              ##两次检查,来确定后端负载是否有故障

       stats uri       /admin/stats                ##监控页面目录

frontend public                                                ##定义前端函数

       bind            *:80                       ##监听本机所有80端口

       default_backend  dynamic                  ##默认调度dynamic后端

backend dynamic

       balance         roundrobin                     ##轮询算法

       server          web1172.25.90.2:80 check inter 1000           ##后端负载

       server          web2 172.25.90.4:80 check inter 1000

stats  auth admin:westos                            ##设置管理员及密码

stats  refresh      5s                         ##每隔5s刷新页面

:wq

<3>mkdir  /var/lib/haproxy                       ##创建日志存放目录

<4>开启后端负载(172.25.90.2、172.25.90.4)的httpd服务

<5>/etc/init.d/haproxy  start                      ##启动服务

   访问172.25.90.1:                              ##后端负载是否轮询

   访问172.25.90.1/admin/stats                ##访问管理页面

宕掉某个后端负载服务,haproxy管理页面会自动刷新后端负载状态,如宕掉server2端httpd服务,其显示如下,注意颜色变化:


(2)设置管理员及登录密码

1.vim /etc/rsyslog.conf

 14$ModLoad imudp

 15$UDPServerRun 514

 42*.info;mail.none;authpriv.none;cron.none;local0.none                /var/log/messages

 63local0.*                                               /var/log/boot.log

:wq

2.vim  /etc/haproxy/haproxy.cfg                    

在简单配置的基础上,仅在defualts模块进行定义,添加内容如下:

             stats  auth     admin:westos                  ##管理员admin,密码westos

      :wq

3./etc/init.d/haproxy  reload                                    ##重新加载模块

3.测试,访问172.25.90.1/admin/stats,输入刚才定义的管理用户及密码即可登录管理页面

(3)动态与静态后端负载                     

1.配置haproxy

 vim  /etc/haproxy/haproxy.cfg        ##配置动态与静态负载

在简单配置基础上将backend模块整体更改如下,添加静态后端模块:

backend static

       balance         roundrobin

       server          web1172.25.90.4:80 check inter 1000    ##可定义多个后端

backend dynamic

       balance         roundrobin

       server          web2172.25.90.2:80 check inter 1000

#注意forntend模块已定义:默认调度dynamic模块,所以访问结果应该只加载dynamic模块

2.为实现动态页面效果,选择在某个后端负载安装php软件(如选择server2端)

 yum  install  php  -y

 vim /var/www/html/index.php                ##httpd服务会先读以.php结尾的文件

<?php

phpinfo()

?>                                                     ##php函数

:wq

3./etc/init.d/haproxy  reload                      ##重载

4.测试:访问172.25.90.1                         ##不断刷新,其页面内容不变:php首页

(4)重定向后端负载??

1.vim   /etc/haproxy/haproxy.cfg

 在(3)的基础上仅对forntend内容修改:

frontend public

       bind            *:80

       use_backend     dynamic  if  {path_beg  /image   }

       default_backend  static               ##默认调度static后端(即172.25.90.3---server3)

##表示当访问根目录时是以image开头的,则调度dynamic后端,即调度172.25.90.2;若不是,则默认调度static后端,即172.25.90.3

:wq

2./etc/init.d/haproxy  reload                      ##重载

3.server2端

 mkdir   /var/www/html/image               ##创建发布目录

4.测试:多次访问172.25.90.1;再多次访问172.25.90.1/image,对比显示内容

 

(5)acl控制访问

 四种控制源:src:对来访地址控制(ip地址或者网段);

              src_port:对端口控制;

              dst:目标地址;

 dst_port:目标端口

1. vim  /etc/haproxy/haproxy.cfg

  添加内容至“前端模块”:

 frontend public

       bind            *:80

       acl badhost     src     172.25.90.250    

##对172.25.90.254客户主机进行控制,定义为badhots

       http-request deny  if  badhost                         

##如果访问httpd服务的是badhost,则拒绝

       use_backend     dynamic  if { path_beg /image   }

       default_backend   static

:wq

  /etc/init.d/haproxy  reload

  测试:在172.25.90.254主机访问172.25.90.1 结果如下

2.另外一中控制方式,不直接显示403页面,进行错误重定向

 vim  /etc/haproxy/haproxy.cfg

前端模块内容显示如下:

frontend public

       bind            *:80

       acl badhost     src     172.25.90.250

http-request deny  if  badhost

       errorloc  403  http://172.25.90.3

##badhost主机访问时,先拒绝,将http错误状态(403报错)重定向至http://172.25.90.3

       use_backend     dynamic if {path_beg  /image   }

       default_backend static

:wq

/etc/init.d/haproxy  reload

上述过程在server2端已下载php软件,该软件可进行上传文件,支持动态页面。如下操作可实现(server2端):

 3.  vim   /etc/haproxy/haproxy.cfg

前端模块内容显示如下:

frontend public

       bind            *:80

       acl badhost     src     172.25.90.250

redirect location http://172.25.0.3

 ##当badhost访问时,不再拒绝,而是直接进行重定向

       use_backend     dynamic if {path_beg  /image   }

       default_backend static

:wq

/etc/init.d/haproxy  reload