一 HAProxy简介

 

HAProxy是一种高效、可靠、免费的高可用及负载均衡解决方案,非常适合于高负载站点的七层数据请求。客户端通过HAProxy代理服务器获得站点页面,而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器。

同一客户端访问服务器,HAProxy保持回话的三种方案:

1 HAProxy将客户端ip进行Hash计算并保存,由此确保相同IP访问时被转发到同一真实服务器上。

2 HAProxy依靠真实服务器发送给客户端的cookie信息进行回话保持。

3 HAProxy保存真实服务器的session及服务器标识,实现会话保持功能。

haproxy拓扑结构图

二 配置文件解析

 

Haproxy安装后默认没有配置文件,需要手动创建/etc/haproxy.cfg。启动haproxy时用-f指定配置文件路径。haproxy的配置文件包含全局设置段与代理段,global是全局段,defaults、listen、frontend、backend为代理段。frontend用来匹配客户端请求的域名或者URL;backend定义后端服务器集群

haproxy配置文件参数详细解析

      配置项         描述

global

chroot<jail dir> 将工作目录切换到<jail dir>并执行chroot
daemon 后台工作模式
uid 进程账户id,建议设置为haproxy专用账户
gid 进程组id,建议设置为haproxy专用组
log<address><facility> 配置全局syslog,可以设置两台日志服务器
nbproc<number> 指定后台进程数量
pidfile<file> 指定pid文件
ulimit-n<number>

设置每个进程最大文件描述符数量

maxconn<number> 每个进程支持的最大并发数
tune.bufsize<number> 设置buffer大小,默认16384B

代理

设置

mode 可选tcp、http、health
timeout check<timeout> 设置检查超时时间
contimeout<timeout> 设置连接超时时间
balance roundrobin 设置轮询负载
bind<address>:port 定义一个或者多个监听地址和端口
stats auth admin:admin 设置监控界面的用户名和密码
stats refresh<number> 统计页面刷新间隔时间
option httplog 使用http日志
cookie<name> 启用cookie的保持连接功能
option forwardfor 允许插入这种数据包头,可以让后端服务器获取客户端ip
option abortonclose 负载高时,自动关闭处理时间长的请求
option allbackups 后端服务器宕机,是否激活全部备机,默认启动第一个备机
option dontlognull 不记录空连接日志,主要用于不记录健康检查日志
option redispatch 后端某个机器宕机,强制把请求转发给健康机器
monitor-uri<URi> 检查uri文件是否存在,依次判断主机的健康状态
monitor-fail if site_dead 服务器宕机时,返回503代码
option httpchk<uri> 使用http协议检查服务器健康状态
retries<value> 服务器连接失败后的重试次数
timeout client 客户端最大超时时间,单位毫秒
timeout server 服务器最大超时时间,单位毫秒
timeout connect 最大连接超时时间,单位毫秒
default_backend 默认后端服务器组
use_backend 当条件满足时,指定后端服务器组
acl<name><criterion> 定义访问控制列表

三 Haproxy实例部署

 

本例使用listen定义一个监控端口;

使用frontend定义一个前端80端口;

通过backend定义名为inside_servers 和 external_servers的服务器组;

使用default_backend定义默认服务器组external_servers;

external_servers包括web1.test.com和web2.test.com 两台服务器

inside_servers包含web3.test.com 一台服务器

服务器名称 网络配置
haproxy.test.com eth0:10.10.10.10
eth1:192.168.1.2
web1.test.com eth0:192.168.1.3
web2.test.com eth0:192.168.1.4
web3.test.com eth0:192.168.1.5

1 首先配置web服务器

在web1 web2 web3上安装httpd并配置网卡

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.1.3

NETMASK=255.255.255.0

GATEWAY=192.168.1.2

ONBOOT=yes

TYPE=Ethernet

service network restart

yum install -y httpd

iptables -F

iptables -X

service iptables save

setenforce 0

sed -i s/enforcing/disabled/g /etc/sysconfig/selinux

echo "web1  192.168.1.3" > /var/www/html/index.html

service httpd restart

chkconfig httpd on

web2 web3机器上执行与web1相同步骤,注意修改部分参数

2 接着haproxy服务器配置

设置两块网卡

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

IPADDR=10.10.10.10

NETMASK=255.0.0.0

ONBOOT=yes

TYPE=Ethernet

vim /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=static

IPADDR=192.168.1.2

NETMASK=255.255.255.0

GATEWAY=192.168.1.1

ONBOOT=yes

TYPE=Ethernet

service network restart

service iptables stop

内核调优,修改系统文件

vim /etc/security/limits.conf

*    soft    nofile        65535

*    hard    nofile        65535

配置日志文件,添加三行

vim /etc/rsyslog.conf

$ModLoad    imudp

$UDPServerRun    514

local3.*                        /var/log/haproxy.log

yum -y install gcc

wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.11.tar.gz

tar zxf haproxy-1.6.11.tar.gz -C /usr/src/

cd /usr/src/haproxy-1.6.11/

make TARGET=linux2628

make install

mkdir /var/haproxy

3 创建配置文件

vim /etc/haproxy.cfg

global

maxconn    4096

log    127.0.0.1    local3    info

chroot    /var/haproxy

uid    99

gid    99

daemon

nbproc    1

pidfile    /var/run/haproxy.pid

ulimit-n    65535

stats    socket    /var/tmp/stats

defaults

log    global

mode    http

maxconn    20480

option    httplog

option    httpclose

option    dontlognull

option    forwardfor

option    redispatch

option    abortonclose

stats    refresh    30

retries    3

balance    roundrobin

cookie    SRV

timeout    check    2000ms

timeout    connect    5000ms

timeout    server    50000ms

timeout    client    50000ms

listen    admin_status                                        #定义haproxy的监控界面

bind    0.0.0.0:6553

mode    http

log    127.0.0.1    local3 info

stats    enable

stats    refresh    5s                                            #监控页面自动刷新时间5s

stats    realm    Haproxy\    Statistics                #登录监控页面提示符

stats    uri    /admin?stats                                  #监控页面URL路径

stats    auth    admin:123456                             #监控页面的账户密码

stats    hide-version                                           #隐藏haproxy版本

frontend    web_service                                     #定义前端服务器

bind    0.0.0.0:80

mode    http

log    global

option    httplog

option    httpclose

option    forwardfor

#acl    inside_src src 192.168.1.0/24                    #定义acl

#use_backend    inside_servers if inside_src        #判断acl的源地址,把请求转发到inside_servers组

default_backend    external_servers                        #默认服务器组

backend    external_servers

mode    http

balance    roundrobin                                            #轮询真实服务器

option    httpchk    GET    /index.html                #检查index文件,判断服务器是否健康

##定义后端真实服务器,向cookie中插入web1信息,check进行健康检查,检查时间间隔为2000ms,##连续两次健康则认为是正常开启的,连续三次检查失败则认为宕机,服务器权重1

server web1 192.168.1.3:80 cookie web1 check inter 2000 rise 2 fall 3 weight 1

server web2 192.168.1.4:80 cookie web2 check inter 2000 rise 2 fall 3 weight 1

#backend    inside_servers

#mode    http

#balance    roundrobin                                            #轮询真实服务器

#option    httpchk    GET    /index.html                #检查index文件,判断服务器是否健康

#server web3 192.168.1.5:80 cookie web3 check inter 2000 rise 2 fall 3 weight 1

4 启动haproxy服务

service rsyslog restart                #重启系统日志服务

haproxy -f /etc/haproxy.cfg        #启动haproxy服务

echo "/usr/local/sbin/haproxy -f /etc/haproxy.cfg" >> /etc/rc.local

5 测试验证

浏览器访问监控页面

在一个ip为10.10.10.100的机器上访问http://10.10.10.10:6553/admin?stats

多次刷新访问将得到web1和web2 不同页面信息

如果配置文件中开启使用inside_servers,则在192.168.1.0/24网段机器上访问http://192.168.1.2,服务器返回的会一直是web3的页面信息。

阅读原文

HAProxy负载均衡原理及企业级实例部署haproxy集群的更多相关文章

  1. Nginx进阶使用-负载均衡原理及配置实例

    介绍 跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术.可以将Nginx用作非常有效的HTTP负载平衡器,以将流量分配到多个应用程序服务器,并使用N ...

  2. 干货 | Nginx负载均衡原理及配置实例

    一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 理解正向代理与反向代理的区别 ...

  3. [转]Nginx负载均衡原理初解

    什么是负载均衡 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务,这就是所谓的集群. 负载均衡服务器,就是用来把经过它的流量,按照某种方法,分配到集群中的各台服务器 ...

  4. [记录]HAproxy负载均衡配置教程

    HAproxy负载均衡配置教程 一.简介 haproxy是一个开源的高性能负载均衡软件:支持双机热备.虚拟主机和图形化的管理界面,自带强大的对RS健康检查功能:支持TCP(四层).HTTP(七层)应用 ...

  5. LVS实现负载均衡原理

    负载均衡集群是load  balance 集群的简写.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备有F5.NetsNetscale.这里主要是学习lvs. === ...

  6. HAProxy详解(三):基于虚拟主机的HAProxy负载均衡系统配置实例【转】

    一.基于虚拟主机的HAProxy负载均衡系统配置实例 1.通过HAProxy的ACL规则配置虚拟主机: 下面将通过HAProxy的ACL功能配置一套基于虚拟主机的负载均衡系统.这里操作系统环境为:Ce ...

  7. Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  8. Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  9. Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

随机推荐

  1. Qt之设置窗口背景

    以前遇到的很多小知识,从今天开始都一点一点记录下来...     窗口背景无非两种:背景色.背景图片.Qt中窗口背景如何设置?下面介绍三种方法: 一. QPalette设置背景 二.实现paintEv ...

  2. libevent个人理解

    1.利用了前置声明来在c语言的基础上进行封装操作.即在include目录下防止event.h等头文件,在这些头文件中只暴露struct的声明却不暴露其定义,对于如event_base等结构的操作均使用 ...

  3. CSS3实现两行或三行文字,然后多出的部分省略号代替

    概述 -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中.限制在一个块元素显示的文本的行数. 为了实 ...

  4. oracle 插入表数据的4种方式

      1.往表中插入一整行数据 /*方法一*/ INSERT INTO 表名 VALUES(val1,val2,val3,...); /*方法二*/ '; 如: ,, FROM DUAL; 注意: 2. ...

  5. Loadrunner脚本编程(4)-数据类型操作和字符串操作

    http://www.360doc.com/content/10/0806/13/1698198_44078277.shtml 一,数据类型转换 没有使用过C编程的LoadRunner脚本编写者会发现 ...

  6. 微信小程序Tab选项卡切换大集合

    代码地址如下:http://www.demodashi.com/demo/14028.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  7. cxf之Caused by: java.lang.RuntimeException: Soap 1.1 endpoint already registered on address /rest

    发布rest服务 但是spring-cxf-rest.xml中配置的却是 <jaxws:server address="/weather".................. ...

  8. 【LeetCode】34. Search for a Range

    Search for a Range Given a sorted array of integers, find the starting and ending position of a give ...

  9. linux下socket编程常用头文件

    sys/types.h:数据类型定义 sys/socket.h:提供socket函数及数据结构netinet/in.h:定义数据结构sockaddr_inarpa/inet.h:提供IP地址转换函数n ...

  10. 阿里云ECS服务器Linux环境下配置php服务器(一)--基础配置篇

    开始安装软件了,我们需要安装的软件有apache,php和MySQL. ps:如果你购买的是北京的服务器,有个安全组需要设置,我全部用的默认设置,暂时还没发现会有什么影响. 首先关闭SELINUX(S ...