haproxy负载均衡器及反向代理(一)

haproxy原理简述

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

haproxy的优点

  • 免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的F5相媲美。
  • 根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。
  • haproxy支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
  • haproxy支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux 2.4/2.6内核打了tcp proxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
  • haproxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。
  • 自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。
  • HAProxy支持虚拟主机,许多朋友说它不支持虚拟主机是错误的,通过测试我们知道,HAProxy是支持虚拟主机的。

操作系统环境架构

操作系统均为centos6.4 64位
[[email protected] ~]# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m
 
[[email protected] ~]# uname -m
x86_64
 
haproxy-01:192.168.33.131
haproxy-02:192.168.33.132
node1:192.168.33.129
node2:192.168.33.128

haproxy安装

在haproxy-01/02机器上安装haproxy软件。这里使用yum安装即可,使用源码也可根据自己情况而定

[[email protected] ~]# yum list all |grep haproxy
haproxy.x86_64                              1.5.4-3.el6                  base
[[email protected] ~]# yum install haproxy -y
[[email protected] ~]# yum install haproxy -y

haproxy-01机器上操作

1.haproxy服务命令使用

[[email protected] ~]# /etc/init.d/haproxy --help
Usage: /etc/init.d/haproxy {start|stop|status|restart|try-restart|reload|force-reload}

2.haproxy主配置文件

[[email protected] ~]# ll /etc/haproxy/haproxy.cfg
-rw-r--r-- 1 root root 3142 Jan 20 23:56 /etc/haproxy/haproxy.cfg

3.haproxy相关配置文件路径以及文档等等

[[email protected] ~]# rpm -ql haproxy
/etc/haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/rc.d/init.d/haproxy
/etc/sysconfig/haproxy
/usr/bin/halog
/usr/bin/iprange
/usr/sbin/haproxy
/usr/share/doc/haproxy-1.5.4
........................
........................

4.haproxy版本

[[email protected] haproxy]# haproxy -version
HA-Proxy version 1.5.4 2014/09/02
Copyright 2000-2014 Willy Tarreau <[email protected]>

2台web节点实例

web节点内容

[[email protected] ~]# cat /var/www/html/index.html
<h1>node1 129</h1>
 
[[email protected] ~]# cat /var/www/html/index.html
<h1>node2 128</h1>

 
后端web节点访问情况

haproxy配置文件内容如下

[[email protected] haproxy]# tail -n 15 haproxy.cfg
frontend web
    bind *:80
    default_backend    webservers
backend webservers
    balance roundrobin
    option httpclose
    option forwardfor
    server node1 192.168.33.129:80 check
    server node2 192.168.33.128:80 check
 
listen status
    bind *:81
        stats enable
    stats uri /admin?stats
    stats auth admin:123456
    stats refresh 5s
    stats hide-version
    stats admin if TRUE

haproxy配置文件中除了defaults段职位其他都给注释了,上面是新添加的内容,stats refresh 5s

上面内容解释如下 
frontend 前端,相当于nginx server段,web *:80监听任意地址的80端口,default_backend默认找那个后端的名称 
backend 后端,相当于nginx的upstream段,balance roundrobin算法默认是rr模式

haproxy服务启动

[[email protected] haproxy]# service haproxy restart
Stopping haproxy:                                          [  OK  ]
Starting haproxy:                                          [  OK  ]

客户端浏览器访问

  
就这么简单,haproxy已经起到负载的作用了

haproxy web界面访问

访问地址

http://192.168.33.131:81/admin?stats

 

记录haproxy日志

修改rsyslog配置文件,内容如下

[[email protected] haproxy]# sed -n ‘13p;14p;17p;18p;62p‘ /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
local2.*                        /var/log/haproxy.log

重启rsyslog服务

[[email protected] haproxy]# /etc/init.d/rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

刷新客户端访问然后查看日志

以上其实是基于tcp端口4层轮询负载

其他参数解释记录一下

check port 80 表示对80端口进行检查
inter 3000 fall 3 表示每三秒检查一次,一共检查三次,有问题的机器就会剔除
 
默认不加inter 3000 fall 3,则默认情况每两秒检查一次,一共检查3三次,有问题的机器就会剔除
rise <count>:设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数;
 
maxconn 10240 最大连接数
weight 5 权重

haproxy配置文件其实写法不止下面一种方式还有其方式

frontend web
    bind *:80
    default_backend    webservers
backend webservers
    balance roundrobin
    option forwardfor
    option httpclose
    server node1 192.168.33.129:80 check
    server node2 192.168.33.128:80 check

吧上面的内容改写后示例

listen web
    bind *:80
    balance roundrobin
    option forwardfor
    option httpclose
    server node1 192.168.33.129:80 check
    server node2 192.168.33.128:80 check
    server node3 192.168.33.127:80 check backup

backup其实就是热备的,当节点node1和node2挂了之后就会启用node3节点服务

关于haproxy后端节点如果无法记录客户端真实ip地址的话

apache修改相应的内容如下

LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b" common

nginx后端节点

server段标签中的proxy_set_header X-Forwarded-For $remote_addr;与proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;功能都是一样获取来自真实的客户端访问的ip地址

但是我的客户端请求是haproxy负载本身也能记录客户端的IP地址,后端节点服务都能记录来自真实的ip

时间: 2024-08-09 13:11:11

haproxy负载均衡器及反向代理(一)的相关文章

HAproxy作为httpd反向代理的应用

实验前提: 1.本次实验是在RHEL 6.4(64bit)系统上完成的. 2.实验前确保每台服务器同步 3.本次实验有3台主机,其中haproxy作为反向代理地址为192.168.108.232,后面2台的httpd服务器为192.168.108.230和192.168.108.231.(我这里在虚拟机上使用的是桥接的方式,也可以使用仅主机方式,不过使用仅主机方式haproxy上需要2快网卡) 4.测试时请关闭防火墙和selinux 实验拓扑结构: 安装步骤: 1.配置web1 首先需要安装ht

Linux 反向代理之HAproxy

大纲 一.什么是HAproxy 二.HAproxy版本1.3与1.4特性介绍 三.HAproxy支持的平台及OS 四.HAproxy如何实现性能的最大化 五.HAproxy配置文件相关 六.配置文件中的关键字参考 七.HAproxy配置示例 一.什么是HAproxy HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在

高性能反向代理软件HAProxy(一)之基本概念

说明:本篇文章大部分参考http://sohudrgon.blog.51cto.com/3088108/1602198 一.HAProxy简介 1.什么是HAProxy HAProxy是免费.极速且可靠的用于为TCP和基于HTTP应用程序提供高可用.负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.并且它的

在Linux系统下使用Docker以及Weave搭建Nginx反向代理

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现.它可以让我们更加专注于应用的开发,而不是基础架构.Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置.容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里.在这个教程里我们将会使用 weave 快速并且简单

如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现.它可以让我们更加专注于应用的开发,而不是基础架构.Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置.容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里.在这个教程里我们将会使用 weave 快速并且简单

6、nginx的反向代理及缓存功能

nginx模块的应用 ngx_http_proxy_modulenginx 反向代理模块: http://nginx.org/en/docs/http/ngx_http_proxy_module.html server { listen server_name location / { proxy_pass http://192.168.184.141:80/;  //指明把用户所有对路径"/"的请求都转发到后端所指定的服务器:192.168.184.141:80 } } 格式: lo

haproxy实现的web反向代理,动静分离,以及基于keepalived实现的haproxy的高可用

   haproxy于Nginx一样都是做反向代理,但是与其相比,haproxy更专注于web代理.HAProxy是单进程多请求,也支持多进程,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.       haproxy功能的实现全部基于配置文件,所以我们需要了解很多的配置指令,玩转指令,再结合实际情况,我们就玩转了haproxy,其实haproxy的配置也很简单,下面我们一起简单认识和了解一些haproxy的基本功能和相关知识.         CentOS6.5自带的rpm

haproxy实现反向代理和负载均衡

反向代理服务器功能:web缓存(加速).反向代理.内容路由(根据流量及内容类型等将请求转发至特定服务器).转码器 缓存:减少冗余内容传输:节省带宽.缓解网络瓶颈:降低了对原始服务器的请求压力:降低了传输延迟,公共缓存每个人都可以使用,带有敏感数据的私有缓存则只对限定某类或某个人使用 nginx可实现缓存功能,haproxy不能实现缓存功能,这里只说明其反向代理功能和负载均衡功能 yum install haproxy 主配置文件haproxy.cfg 开启日志功能: 编辑/etc/rsyslog

haproxy 作为反向代理被攻击

在工作中.遇到过一个情况就是我们的额网站被某一个网站攻击 页面结果来自于https://i.umeng.com/? (友盟+) 我这里用的是haproxy作为反向代理. 所以这里我就从haproxy这里给他拒了.或者这里可以使用WAF防火墙(我这里没有购买) 所以我这里添加的配置是 acl ddos_referer1 hdr_reg(referer) -i http://vip.renweiba.com acl ddos_referer2 hdr_reg(referer) -i http://h