Haproxy安装配置,参数示例,及acl智能负载均衡

2018-10-05  本文已影响0人  Net夜风

1. 程序环境:

2. 配置段:

3. global配置参数:

为haproxy进程级别参数,且常与其运行的OS相关
大多数不需修改;haproxy进程相关的属性定义,且多数与HAProxy所运行的OS相关;进程管理及安全相关的参数:

4. 性能调整相关的参数:

5. debug相关的参数:

简单示例:

准备2各后端主机,并配置index.html
[root@backend1 ~]# vim /var/www/html/index.html
       <h1>backend server 192.168.43.13</h1>
[root@backend2 ~]# vim /var/www/html/index.html
       <h1>backend server 192.168.43.14</h1>         
         
[root@haproxy ~]# yum -y install haproxy   #安装
[root@haproxy ~]# vim /etc/rsyslog.conf   #配置日志服务器
$ModLoad imudp
$UDPServerRun 514
local2.*                        /var/log/haproxy.log
[root@haproxy ~]# touch /var/log/haproxy.log
[root@haproxy ~]# chown haproxy.haproxy /var/log/haproxy.log  
[root@haproxy ~]# systemctl restart rsyslog.service
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg   #修改配置文件,添加如下内容

    frontend web
    bind *:80
    default_backend websrvs
    
    backend websrvs
    balance roundrobin
    server srv1 192.168.43.13:80 check
    server srv2 192.168.43.14:80 check

访问测试:
[root@localhost ~]# for i in {1..10}; do curl http://192.168.43.11; done
    <h1>backend server 192.168.43.14</h1>
    <h1>backend server 192.168.43.13</h1>
    <h1>backend server 192.168.43.14</h1>
    <h1>backend server 192.168.43.13</h1>
    <h1>backend server 192.168.43.14</h1>
    <h1>backend server 192.168.43.13</h1>
    <h1>backend server 192.168.43.14</h1>
    <h1>backend server 192.168.43.13</h1>
    <h1>backend server 192.168.43.14</h1>
    <h1>backend server 192.168.43.13</h1>

6. proxies代理配置段参数

<1>. bind :Define one or several listening addresses and/or ports in a frontend.在前端定义一个或多个监听地址和/或端口
bind [<address>]:<port_range> [, ...] [param*]
<address>:支持ipv4地址,ipv6地址,unix socket地址,abns(abstract namespace抽象名称空间)仅用于Linux系统;
<port_range>: 可以是一个端口,例如::80; 也可是一个端口范围,例如:2000-2100;
<path>:使用unix socket套接字文件;
[param*]:参数;
<2>. balance:设定调度方法,用在default,listen,backend中;
balance <algorithm> [<arguments>]
balance url_param <param> [check_post [<max_wait>]]

<3>.server:定义后端主机的各服务器及其选项;

<4>. stats:统计接口启用相关的参数

stats1.png stats2.png stats3.png

<5>. cookie:基于cookie进行会话保持;
cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]

 官方示例:
            cookie JSESSIONID prefix
            cookie SRV insert indirect nocache
            cookie SRV insert postonly indirect
            cookie SRV insert indirect nocache maxidle 30m maxlife 8h
            解释:
            1.名称为SESSIONID,在原有的这个名称之前,基于prefix方式,加上当前server的id;就是第一次调度时,调度哪个server上,把哪个server id给它插入到原有cookie数据之前;
            2.表示插入的名称为SRV,基于insert方式操作,同时定义了indirect和nocache,此种方式比较常见;  

示例:
backend websrvs
            cookie WEBSRV insert nocache indirect
            设定的WEBSRV相当于一个变量,调度到哪台服务器,就把哪台的服务器的cookie值赋给WEBSRV;
            server srv1 172.16.100.6:80 weight 2 check rise 1 fall 2 maxconn 3000 cookie srv1
            server srv2 172.16.100.7:80 weight 1 check rise 1 fall 2 maxconn 3000 cookie srv2         

<6>. option:

<7>.error:

<8>.req相关

<9>.log:日志系统

<10>. 传输压缩机制;

<11>. 对后端服务器做http协议的健康状态检测:
option httpchk option httpchk <uri> option httpchk <method> <uri> option httpchk <method> <uri> <version>
定义基于http协议的7曾健康状态检测机制;
http-check expect [!] <match> <pattern>:让HTTP健康检查考虑响应内容或特定状态码。
<12>. 连接超时时长:

<13>.其他相关参数


7. acl:Access Control Lists

The use of Access Control Lists (ACL) provides a flexible solution to perform content switching and generally to take decisions based on content extracted from the request, the response or any environmental status.他使用访问控制列表(ACL)提供了一个灵活的解决方案来执行内容切换,通常根据从请求、响应或任何环境状态中提取的内容做出决策.
acl <aclname> <criterion> [flags] [operator] [<value>] ...

criterion常见的匹配标准

8. 基于acl实现智能负载均衡

准备两个静态虚拟主机:
[root@websrvs ~]# cd /etc/httpd/conf.d/
[root@websrvs conf.d]# vim vhost1.conf
    <VirtualHost *:80>
        ServerName www.ilinux.io
        DocumentRoot "/data/web/host1"
        <Directory "/data/web/host1">
                Options None
                AllowOverride None
                require all granted
        </Directory>
    </VirtualHost>
        Listen 8080
    <VirtualHost *:8080>
        ServerName www.inux.io
        DocumentRoot "/data/web/host2"
        <Directory "/data/web/host2">
                Options None
                AllowOverride None
                 require all granted
                </Directory>
    </VirtualHost>

给两个虚拟主机准备2个主页文件index.html:
[root@websrvs conf.d]# mkdir /data/web/host{1,2}
[root@websrvs ~]# vim /data/web/host1/index.html
    <h1>www.ilinux.io</h1>
[root@websrvs ~]# vim /data/web/host2/index.html
    <h1>www.inux.io</h1>
准备两个动态虚拟主机:
[root@phpsrvs conf.d]# vim vhost1.conf
    <VirtualHost *:80>
        ServerName www.ilinux.com
        DocumentRoot "/data/web/host1"
        <Directory "/data/web/host1">
                Options None
                AllowOverride None
                require all granted
        </Directory>
    </VirtualHost>
        Listen 8080
    <VirtualHost *:8080>
        ServerName www.inux.com
        DocumentRoot "/data/web/host2"
        <Directory "/data/web/host2">
                Options None
                AllowOverride None
                 require all granted
                </Directory>
    </VirtualHost>
    [root@phpsrvs ~]# yum -y install php
    准备2各动态主页index.php
    [root@phpsrvs ~]# vim /data/web/host1/index.php 
        <h1>www.ilinux.com</h1>
        <?php
                phpinfo();
        ?>
    [root@phpsrvs ~]# vim /data/web/host2/index.php 
        <h1>www.inux.com</h1>
        <?php
                phpinfo();
        ?>
    [root@phpsrvs ~]# systemctl start httpd.service

    安装配置haproxy:
    [root@haproxy ~]# yum -y install haproxy
    [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
    frontend https
            bind *:80
     #       bind *:443 ssl crt /etc/haproxy/certs/haproxy.pem  #实现基于ssl的会话
     #       redirect scheme https if !{ ssl_fc }
            acl php_page path_end -i .php
            use_backend phpsrvs if php_page
            default_backend websrvs

    backend websrvs
            balance roundrobin
            server srv1 192.168.43.14:80 check 
            server srv2 192.168.43.14:8080 check
    backend phpsrvs
            balance roundrobin
    #       cookie php insert indirect nocache
            server srv1 192.168.43.13:80 check cookie ph1
            server srv2 192.168.43.13:8080 check cookie ph2
    listen stats
            bind *:9009
            stats enable
            stats uri /haproxyadmin?stats
            stats realm haproxy\ statistics
            stats auth admin:pass
            stats show-desc This is admin area
            stats hide-version
            stats admin if TRUE

[root@haproxy ~]# systemctl start haproxy.service
#使用curl访问静态服务器测试:
[root@haproxy ~]# for i in {1..10};do curl http://192.168.43.11; done;
<h1>www.inux.io</h1>
<h1>www.ilinux.io</h1>
<h1>www.inux.io</h1>
<h1>www.ilinux.io</h1>
<h1>www.inux.io</h1>
<h1>www.ilinux.io</h1>
<h1>www.inux.io</h1>
<h1>www.ilinux.io</h1>
<h1>www.inux.io</h1>
<h1>www.ilinux.io</h1>

使用浏览器访问测试:


haproxy1.png haproxy2.png
上一篇 下一篇

猜你喜欢

热点阅读