haproxy常用配置

haproxy 理论

它可以反向代理http/tcp协议,七层和四层的负载均衡解决方案

七层的负载解决方案是因为他们支持高级特性,工作在用户空间,请求从用户空间转换到内核空间是非常浪费硬件资源的。

haproxy有一个monitor接口 可以查看连接状况。 

haproxy是一个单一进进程响应众多请求的负载均衡,他可以开启多进程,但是官方不建议开启多进程。haproxy1.4 还可以根据url进行调度,这样可以提高缓存命中率。这也是使用haproxy的重要原因之一。

还可以根据acl进行持久连接

 

环境

 

角色                     主机                     IP        

haproxy             centos6.5            192.168.1.105(桥接)   

                                         192.168.3.50(vmnet8)           web1          centos6.5            192.168.3.100(vmnet8)

web2                cnntos6.5            192.168.3.101(vmnet8)    

 

web1和web2的网关指向192.168.3.50

 

.配置haproxy

[root@localhost ~]# yum -y install haproxy

 

配置文件

haproxy配置文件有两部分

(1)全局配置:

    global  设置进程属性的设定

    proxies  代理的配置

       defaults

       frontend(前端)

       backend(后端)

       listen(整合前端和后端的)

 

2)首先我们通过frontend+backend的方法实现haproxy的负载均衡

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

 

#在文件最后定义后端资源组

backend web

    balance     roundrobin

    server web1 192.168.3.100:80 check

    server web2 192.168.3.101:80 check

解释:web为定义的资源组的名称

      roundrobin轮询调度算法

      web1web2都为节点的名称,可以自定义,这里的名字用于记录日志使用。

      check为健康状态检查

 

#定义前端(相当于nginx中的server)

frontend  webserver *:80

   default_backend web

 

解释:

webserver为前端的名称,可以定定义

default_backend将监听在80端口的请求转发给名称为web的资源组

 

启动haproxy

[root@localhost ~]# service haproxy start

正在启动 haproxy:                                         [确定]

 

在两个节点中添加index.html,访问http://192.168.3.50,看到轮询效果。

 

健康状态检查。

停止掉其中的任意一个web服务,会发现,故障的节点将不会被调度。

 

3)启动日志记录

[root@localhost ~]# vim /etc/rsyslog.conf

13 $ModLoad imudp

14 $UDPServerRun 514

17 $ModLoad imtcp

18 $InputTCPServerRun 514

启用13,14,17,18行

 

在62添加一行日志位置

62    local2.*                    /var/log/haproxy.log

这是全局日志,

 

我们可以在每个frontend中定义单独的日志文件

格式:

log 127.0.0.1 local3

然后在rsyslog中定义local3及其位置

然后在访问,就会出现日志

 

 

4.通过source(ip_hash)算法,将同一客户端的请求到同一台server上去。

基于上边的配置,修改一下算法

backend web

    balance     source

    server web1 192.168.3.100:80 check

    server web1 192.168.3.101:80 check

 

再次访问页面时候,会发现只停留在一个server上面

 

5.还有一种就是基于url路径转发。

backend web

    balance     uri

    server web1 192.168.3.100:80 check

    server web1 192.168.3.101:80 check

只要访问的是同一个路径,会被转发到同一个server

 

二、指定haproxy的工作模式

模式有两种

    http模式

       定义应用层数据深入分析,因此支持7层的过滤。处理,转换等机制

    tcp模式

       haproxy在客户端和应用服务器之间建立一个全双工的连接,不会对应用层协议      做任何检查。ssl mysql 等都应该使用此模式。

 

指定模式使用mode参数

 

三、启用状态监控

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

backend web

    balance     uri

    stats       enable

    server web1 192.168.3.100:80 check

    server web1 192.168.3.101:80 check

 

访问以下地址

http://192.168.3.50/haproxy?stats

 

(2)启用认证才能访问状态监控界面

backend web

    balance     uri

    stats       enable

    stats       auth admin:admin

    server web1 192.168.3.100:80 check

    server web1 192.168.3.101:80 check

 

(3)启用管理功能

backend web

    balance     uri

    stats       enable

    stats       auth admin:admin

    stats       admin if TRUE

    server web1 192.168.3.100:80 check

    server web1 192.168.3.101:80 check

    server backup 127.0.0.1:8010 check backup

就是说你通过认证才能使用管理功能

 

 

 

四、设置备用服务器(错误页面服务器)

当所有server宕机,请求会转发至错误错误页面

准备一台单独的web服务器,或者是haproxy本身,但是端口不能使用80

[root@localhost haproxy]# vim /etc/httpd/conf/httpd.conf

Listen 8010

 

[root@localhost html]# vim /var/www/html/index.html

<h1>error</h1>

 

vim haproxy.cfg

backend web

    balance     uri

    stats       enable

    stats       auth admin:admin

    server web1 192.168.3.100:80 check

    server web1 192.168.3.101:80 check

    server backup 127.0.0.1:8010 check backup

 

然后我们宕掉两台web,在访问3.50 会发现页面会跳转至error页面

原文地址:https://www.cnblogs.com/pangbing/p/7688520.html