Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140712
  • 博文数量: 68
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 20:01
文章分类

全部博文(68)

文章存档

2015年(68)

我的朋友

分类: 系统运维

2015-08-31 18:54:48

简介

    HAProxy是一款开源的软件,支持4-7层交换,可作为高可用性、负载均衡以及基于TCP和HTTP应用的代理。支持高并发,特别适用于那些负载特大、需要会话保持或七层处理的web站点。

   架构图如下:


想了解更详细可到官网上看, style="font-size:14px;"> 


安装:

//下载

[root@localhost]cd /opt

[root@localhost]wget 

//安装

[root@localhost opt]# tar zxf haproxy-1.4.21.tar.gz 

[root@localhost opt]# cd haproxy-1.4.21

[root@localhost haproxy-1.4.21]# uname -a

Linux localhost.localdomain 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux


[root@localhost haproxy-1.4.21]# make TARGET=linux26 PREFIX=/usr/local/haproxy

[root@localhost haproxy-1.4.21]# make install PREFIX=/usr/local/haproxy

[root@localhost haproxy-1.4.21]# ls /usr/local/haproxy

doc   sbin  share

//创建目录用于放置pid、配置文件等,以方便管理

[root@localhost haproxy-1.4.21]#  mkdir -p   /usr/local/haproxy/etc //放配置文件

[root@localhost haproxy-1.4.21]#  mkdir -p   /usr/local/haproxy/run  //放pid文件

[root@localhost haproxy-1.4.21]#  mkdir -p   /usr/local/haproxy/log  //放日志文件


配置:

HAProxy的配置主要可分为三个部份

  • globlal:参数是进程级的,通常和操作系统(OS)相关

  • defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件

  • (frontent/backend)或是listen:listen是frontent与backend的组合体,frontend-接收请求的前端虚拟节点,可以根据规则直接指定具体使用后端的 backend;backend-后端服务集群的配置,对应一个或多个服务器

// 使用listen还是(frontent/backend)

     这个我觉得见仁见智了,listen是frontent与backend的组合体,配置会比(frontent/backend)精简很多,但是(frontent/backend)相比于listen,结构会更清晰有条理,而且易于理解,在刚开始配置使用haproxy,我个人更倾向于(frontent/backend)。


//示例结构

                                                          server1:80(192.168.22.238)

                                                       /

--->|haproxy (192.168.22.240)| 

                                                      \ 

                                                         server2:81(192.168.22.239)

//示例配置

#---------- ------------------------------- global -----------------------------------------------------

global

    log 127.0.0.1:514 local0 info     #日志配置

    maxconn 4096                              #最大连接数   

    user nobody                                  #运行haproxy的用户

    group nobody                              #运行haproxy的组

    daemon                                          #以后台模式运行

    nbproc 1                                         #fork的进程数,为便于调试,默认为1

    pidfile /opt/haproxy/logs/haproxy.pid  #pid文件


 #---------- ------------------------------- defaults -----------------------------------------------------

defaults

    mode http                                   #模式 { tcp(4层)|http(7层)|health(只返回OK) }

    option httplog                            #采用http日志格式

    retries 3                                        #连接失败重试次数,三次连接失败就认为是服务器不可用

    option redispatch                      #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器

    maxconn 4096                            #默认的最大连接,负载过高时,自动结束掉当前队列处理比较久的链接

    contimeout 5000                       #连接超时时间

    clitimeout 30000                        #客户端超时时间   

    srvtimeout 30000                       #服务器超时

    timeout check 2000                   #=心跳检测超时

#(注:参数值为时间为的参数,默认单位为毫秒(ms),可以加后缀来使用其他的单位如us(微秒)、s(秒)、m(分)、h(小时)、d(天))

 

 #---------- ----------------------------统计页面配置 -------------------------------------------------

listen admin_stats

    bind 0.0.0.0:1080                        #监听端口

    mode http                                    #http的7层模式

    log 127.0.0.1 local0 err              #日志设置

    stats refresh 30s                          #统计页面自动刷新时间

    stats uri /admin?stats                 #统计页面url

    stats realm Gemini\ Haproxy    #统计页面密码框上提示文本

    stats auth admin:admin~!@      #统计页面用户名和密码设置

    stats hide-version                        #隐藏统计页面上HAProxy的版本信息

 

 #---------- ----------------------------网站检测listen定义-------------------------------------------------

listen site_status

    bind 0.0.0.0:1081

    mode http

    log 127.0.0.1 local0 err #[err warning info debug]

    monitor-uri /site_status  #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回500

#定义网站down时的策略,当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true

    acl site_dead nbsrv(www_server) lt 1

#当满足策略的时候返回500

   monitor fail if site_dead

#如果192.168.0.101或者192.168.0.102这两台机器挂了,认为网站挂了,这时候返回500,判断标准是如果mode是http,返回200认为是正常的,如果mode是tcp认为端口畅通是好的

    monitor-net 192.168.0.101/31

 

 #---------- ----------------------------frontend配置-------------------------------------------------

frontend http_80_in

    bind 0.0.0.0:80            #监听端口

    mode http                    #http的7层模式

    log global                     #应用全局的日志配置

    option httplog             #启用http的log

    option httpclose          #每次请求完毕后主动关闭http通道,即不使用keep-alive模式

    option forwardfor        #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP

 

 #---------- -------------------------日志记录内容配置-------------------------------------------------

    capture request header Host len 40

    capture request header Content-Length len 10

    capture request header Referer len 200

    capture response header Server len 40

    capture response header Content-Length len 10

    capture response header Cache-Control len 8

 

##########backend的设置##############

backend www_server

    mode http                            #http的7层模式

    balance roundrobin            #负载均衡的方式,roundrobin平均方式

    cookie SERVERID                 #允许插入serverid到cookie中,serverid后面可以定义

#心跳检测的URL,HTTP/1.1¥r¥nHost:XXXX,指定了心跳检测HTTP的版本,XXX为检测时请求

#服务器的request中的域名是什么,这个在应用的检测URL对应的功能有对域名依赖的话需要设置

    option httpchk GET /index.php HTTP/1.1\r\nHost:192.168.22.240

#服务器定义,cookie 1表示serverid为1,check inter 1500 是检测心跳频率

#rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重

    server app1 192.168.22.238:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1

    server app2 192.168.22.239:80 cookie 2 check inter 1500 rise 3 fall 3 weight 2


日志支持:

测试系统为 rehl 6

[root@localhost]#vi/etc/rsyslog.conf  

 

添加:  

local3.*        /var/log/haproxy.log  

local0.*        /var/log/haproxy.log  

起用:

$Modload imudp.so

$UDPServerRUN 514            

[root@localhost]# service rsyslog restart  //重启rsyslog服务


启动、测试:

//检测配置是否有错

[root@localhost]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg -c

//启动

[root@localhost]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg

//登录到haproxy的状态页面


阅读(572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~