giku 发表于 2016-8-22 09:38:12

haproxy原理与部署

1. Haproxy介绍
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后Haproxy还会自动将RS服务器假如。Haproxy特别使用与那些访问量很大。但又需要会话保持或七层应用的业务。Haproxy运行在普通的服务器硬件上,仅仅进行简单的优化就可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合到各种网站的架构中,同时使得应用服务器不会暴露到网络中。Haproxy软件引入了frontend,backend的功能,frontend(acl规则匹配)可以运维管理人员根据任意HTTP请求头做规则匹配,然后把请求定向到相关的backend(server pools等待前端把请求转过来的服务器组)。通过frontend和backup,我们可以很容易的实现haproxy的7层代理功能,haproxy是一款不可多得的优秀代理服务软件Haproxy支持两种主要代理模式:第一个是4层tcp代理(例如:可用于邮件服务内部协议通信服务器、Mysql服务等)。第二个是7层代理(如HTTP代理)。在4层tcp代理模式下,Haproxy仅在客户端和服务器之间双向转发流量。但是在7层模式下Haproxy会分析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。
2. Haproxy解决方案拓扑图
2.1 Haproxy L4负载均衡应用架构拓扑
Haproxy软件的四层tcp代理应用非常优秀,配置非常简单方便,比LVS和Nginx要方便很多,因为不需要在RS端执行脚本即可实现应用代理。说明:由于Haproxy采用的是NAT模式,数据包来去都会经过Haproxy,因此,在流量特别大的情况下,其性能不如LVS。在一般的中小型公司,建议采用haproxy做负载均衡,而不要使用LVS或者Nginx。2.2 Haproxy L7负载均衡应用架构拓扑
Haproxy软件的最大优点在于其7层的根据URL请求头应用过滤的功能,一般用在LVS软件的下一层,或者像官方推荐的可以挂在硬件负载均衡NS、F5下使用。2.3 实施部署前主机规划列表

名称
接口
IP
用途

MASTER
eth0
192.168.1.81
外网管理IP,用于WAN数据转发


eth1
192.168.2.81
内网管理IP,用于LAN数据转发


eth2
192.168.3.81
用于服务器间心跳连接(直连)

vip

192.168.1.181
用于提供应用程序A挂载服务

BACKUP
eth0
192.168.1.82
外网管理IP,用于WAN数据转发

eth1
192.168.2.82
内网管理IP,用于LAN数据转发

eth2
192.168.3.82
用于服务器间心跳连接(直连)
vip

192.168.1.182
用于提供应用程序B挂载服务
此表为heartbeat+haproxy生产环境中的正式IP环境,haproxy做四层应用时的IP信息2.4 实施部署环境
Haproxy所有实施部署环境和前面讲过的heartbeat的环境一模一样。因为在生产环境中,haproxy服务就是和heartbeat服务配合使用的,当然和keepalived服务配合也是可以的。3. 安装Haproxy软件
3.1 安装
mkdir -p /home/yan/toolscd /home/yan/toolstar -xf haproxy-1.4.21.tar.gzcd haproxy-1.4.21make TARGET=linux26 ARCH=x86_64make PREFIX=/application/haproxy-1.4.21 installln -s /application/haproxy-1.4.21/ /application/haproxy3.2 配置Haproxy实现L4负载均衡
3.2.1 初始化Haproxy目录
cd /application/haproxy/ll3.2.2 创建Haproxy相关目录
mkdir -p bin conf logs var/run var/chroot3.2.3L4Haproxy的配置文件(conf目录下)
vim conf/haproxy.confglobal      chroot /application/haproxy-1.4.21/var/chroot      daemon      group haproxy      user haproxy      log 127.0.0.1:514 local0 info      pidfile /application/haproxy-1.4.21/var/run/haproxy.pid
      maxconn 20480      spread-checks 3#       tune.maxaccept 100#       tune.maxpollevents 180      nbproc 8
defaults                log   global                mode    http#       optionhttplog#       optiondontlognull                retries 3                option redispatch      contimeout      5000      clitimeout      50000      srvtimeout      50000
listen www01192.168.1.81:80                mode http                no    option splice-response      stats enable                stats uri /admin?stats      stats auth proxy:oldboy      balance roundrobin#轮询算法rr      option httpclose      option forwardfor#记录客户端地址,而不是haproxy地址      option httpchk HEAD /checkstatus.html HTTP/1.0#健康检查      server www01 192.168.1.80:80 check   #增加RS      server www02 192.168.1.100:80 check#check:对端口做检查添加一个haproxy用户useradd haproxy -s /sbin/nologin -M3.2.4 Haproxy启动脚本(bin目录下存放)
vim bin/haproxy#!/bin/bash
BASE="/application/haproxy-1.4.21"
PROG=$BASE/sbin/haproxyPIDFILE=$BASE/var/run/haproxy.pidCONFFILE=$BASE/conf/haproxy.conf
case "$1" instart)#$PROG -f $CONFFILE >/dev/null 2>&1$PROG -f $CONFFILE;;status)if [ ! -f $PIDFILE ]; thenecho "pid not found"exit 1fifor pid in $(cat $PIDFILE); dokill -0 $pidRETVAL="$?"if [ ! "$RETVAL" = "0" ]; thenecho "process $pid died"exit 1fidoneecho "process is running";;restart)$PROG -f $CONFFILE -sf $(cat $PIDFILE) >/dev/null 2>&1;;stop)kill $(cat $PIDFILE);;*)echo "USAGE: $0 start|restart|status|stop"exit 1;;esacchmod 700 haproxy3.2.5 启动Haproxy服务
/application/haproxy/bin/haproxy start 162/092036 (34610) : Proxy 'www': in multi-process mode, stats will be limited to process assigned to the current request. 162/092036 (34610) : Starting proxy www: cannot bind socket原因是不存在VIP导致启动Haproxy报错,80端口已经启动产生冲突解决方法echo 'net.ipv4.ip_nonlocal_bind = 1'>>/etc/sysctl.confsysctl -p并且关闭http服务(net.ipv4.ip_nonlocal_bind=1意思是启动haproxy的时候,允许忽视VIP的存在)加入开机自启动echo '/application/haproxy/bin/haproxy start' >> /etc/rc.local检查服务:ps -ef | grep haproxy | grep -v grephaproxy   34645      10 09:31 ?      00:00:00 /application/haproxy-1.4.21/sbin/haproxy -f /application/haproxy-1.4.21/conf/haproxy.confhaproxy   34646      10 09:31 ?      00:00:00 /application/haproxy-1.4.21/sbin/haproxy -f /application/haproxy-1.4.21/conf/haproxy.confhaproxy   34647      10 09:31 ?      00:00:00 /application/haproxy-1.4.21/sbin/haproxy -f /application/haproxy-1.4.21/conf/haproxy.confhaproxy   34648      10 09:31 ?      00:00:00 /application/haproxy-1.4.21/sbin/haproxy -f /application/haproxy-1.4.21/conf/haproxy.confhaproxy   34649      10 09:31 ?      00:00:00 /application/haproxy-1.4.21/sbin/haproxy -f /application/haproxy-1.4.21/conf/haproxy.confhaproxy   34650      10 09:31 ?      00:00:00 /application/haproxy-1.4.21/sbin/haproxy -f /application/haproxy-1.4.21/conf/haproxy.confhaproxy   34651      10 09:31 ?      00:00:00 /application/haproxy-1.4.21/sbin/haproxy -f /application/haproxy-1.4.21/conf/haproxy.confhaproxy   34652      10 09:31 ?      00:00:00 /application/haproxy-1.4.21/sbin/haproxy -f /application/haproxy-1.4.21/conf/haproxy.conf3.2.6 Haproxy日志配置(cat /etc/syslog.conf)
yum -y install rsyslog编辑/etc/rsyslog.conf(末尾添加)vim /etc/rsyslog.conf#Haproxylocal0.*   /application/haproxy-1.4.21/logs/haproxy.log#end /etc/rsyslog.conf3.2.7 配置/etc/sysconfig/rsyslog
vim /etc/sysconfig/rsyslog# Options to syslogd# -m 0 disables 'MARK' messages.# -r enables logging from remote machines# -x disables DNS lookups on messages recieved with -r# See syslogd(8) for more detailsSYSLOGD_OPTIONS="-m 0 -r -x"# Options to klogd# -2 prints all kernel oops messages twice; once for klogd to decode, and#    once for processing with 'ksymoops'# -x disables all klogd processing of oops messages entirely# See klogd(8) for more detailsKLOGD_OPTIONS="-x"#SYSLOG_UMASK=077# set this to a umask value to use for all log files as in umask(1).# By default, all permissions are removed for "group" and "other".重启日志服务/etc/init.d/rsyslog restartchkconfig rsyslog onps -ef | grep rsyslog | grep -v greproot      34518      10 08:54 ?      00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -m 0 -r -x
3.2.8 查看状态信息





检查备节点(192.168.1.82)http能正常访问修改主节点(192.168.1.81)/application/haproxy/conf/haproxy.confvim /application/haproxy/conf/haproxy.confserver www02 192.168.1.82:80 check(wget 192.168.1.82能通但是浏览器中显示不正常,原因是走了健康检查了,将option httpchk HEAD /checkstatus.html HTTP/1.0注释掉)/application/haproxy/bin/haproxy restart此时查看浏览器上www02已经变绿访问192.168.1.81(主节点)跟192.168.1.82(备)结果相同,表示四层负载均衡已经OK3.3 测试haproxy负载均衡和健康检查功能
修改主节点(192.168.1.81)/application/haproxy/conf/haproxy.conf再添加一个server www03 192.168.1.85:80 check重启服务:/application/haproxy/bin/haproxy restart
当访问192.168.1.81时会在两台主机之间相互轮询切换轮询访问结果测试for((i=0;i<10;i++));do curl http://192.168.1.81;sleep 2;echo;done
4. Haproxy健康检查功能
4.1 基于端口的健康检查配置
server www01 192.168.1.80:80 checkserver www02 192.168.1.82:80 checkserver www03 192.168.1.85:80 check补全上面配置结果server www01 192.168.1.80:80 cookie www01 check port 80 inter 5000 fall 5提示:1)check port 80 表示对80端口进行健康检查2)inter 5000 fall 5 表示每5秒检查一次,一共检查5次。如果有问题就会摘掉出问题的机器。3)如果结尾不加inter 5000 fall 5,则默认每2秒检查一次,一共检查3次。如果有问题就会摘掉出问题的机器。4)The defaultvalues are the following ones :- inter : 2000意思是不加该参数,正常情况默认没两秒检查一次- rise: 2意思是不加该参数,在RS宕机后恢复前,检查2次OK,认为其复活,并加入到群组中- fall: 3意思是不加该参数,检查3此后,认为RS宕机,剔除集群组- port: default server port不加该参数,默认就是端口检查- addr: specific address for the test (default = address server)4.2 基于URL的健康检查
1)基于IP的URL健康检查option httpchk HEAD /checkstatus.html HTTP/1.0server tmpbai51 192.168.1.51:80 maxconn 2048 weight 8 check inter 3000 fall rise 2server tmpbai53 192.168.1.53:80 maxconn 2048 weight 8 check inter 3000 fall rise 2server tmpbai54 192.168.1.54:80 maxconn 2048 weight 8 check inter 3000 fall rise 2当打开option httpchk HEAD /checkstatus.html HTTP/1.0进行URL健康检查时浏览器上显示都是红色,原因是没有checkstatus.html解决办法在apache站点目录下创建checkstatus.html,或者将checkstatus.html改为index.html此时浏览器上的检查条目会变绿2)基于域名的URL健康检查:option httpchk HEAD /index.jsp HTTP/1.1\r\nHost:\ www URL健康检查实践测试:实际上haproxy就是相当于用下面的方式在访问RS节点确认是否正常curl http://192.168.1.82/checkstatus.html3)第一种HEAD配置方法option httpchk HEAD /checkstatus.html HTTP/1.0这种检测方式就相当于curl http://192.168.1.82/checkstatus.html4)健康检查的频率、时间等参数maxconn 2048 最大连接数,连接数不是越大越好,衡量服务器的承受能力,设置其能承受的最大值不至于把服务器压垮weight 8权重(权重越大,承受的访问量越大)5)第二种GET配置方法option httpchk GET /checkstatus.html5. Haproxy的相关生产功能应用
5.1 haproxy高可用参数backup功能测试
tail -3 haproxy.confserver www02 192.168.1.82:80 check#server www03 192.168.1.85:80 checkserver www21 192.168.1.85:80 check backup打开浏览器 此时访问192.168.1.81(主节点)只能访问到192.168.1.82,不会轮询到85主机 当82主机宕掉后会立马切换到85主机
5.2 haproxy下的RS无法记录客户真实IP问题
当查看82主机的http日志是发现访问IP都是81,不会记录真实主机的IP解决办法:1)在haproxy配置文件里加如如下参数:listen www......option forwardfor.......提示:参数最好放在listen www里面2)在RS上对日志格式进行修改//传统日志和后抛Netscaler负载均衡的apache日志比较LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "\"%{X-Forwarded-For}i\"%l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined此时再从笔记本访问后查看82的日志,里面记录的就是笔记本的真实IP了,不是haproxy主机的IP3)生产环境负载均衡后面的RS服务器不记录负载均衡的健康检查日志:虚拟主机不记录健康检查文件日志(check.txt):SetEnvIf Request_URL "^/check\.txt$" dontlogLogLevel warnErrorLog /var/log/httpd/vhost_error.logCustomLog /var/log/httpd/vhost_access.log combined env=!dontlog5.3 在配置内核参数开发转发功能
在/etc/sysctl.conf中加入如下配置net.ipv4.ip_forward=1sysctl -p
6. Haproxy双机双主的相关生产应用
6.1 主备Haproxy配置文件区别
主备Haproxy配置文件完全一样,没有任何不同将主节点的配置文件全部拷贝到备节点,启动服务修改配置文件/application/haproxy/conf/haproxy.conflisten www      bind 192.168.1.181:80将IP改为VIP地址重启服务此时访问VIP:192.168.1.1816.2 Haproxy主从端分别开启转发功能:
vim /etc/stsctl.cinfnet.ipv4.ip_forward = 1sysctl -p6.3 生产环境防火墙iptables配置建议
(生产环境高访问量站点防火墙可能对LB性能有影响,最后前端加硬件防火墙或者干脆不用防火墙)6.4 heartbeat与haproxy关联问题
在生产环境中,haproxy可能会配置heartbeat或keepalived使用,当Haproxy无法提供服务时,要不要把服务推到备机?一般情况这个问题不会发生,如果严格去做的话可以单独写一个守护进程脚本,当haproxy一宕的时候,停掉heartbeat。6.5 haproxy日志配置优化
将配置文件/application/haproxy/conf/haproxy.conf中的日志改为log 127.0.0.1:514 local0 waring6.6 haproxy多业务多VIP的配置
vim /application/haproxy/conf/haproxy.confglobal      chroot /application/haproxy-1.4.21/var/chroot      daemon      group haproxy      user haproxy      log 127.0.0.1:514 local0 warning      pidfile /application/haproxy-1.4.21/var/run/haproxy.pid
      maxconn 20480      spread-checks 3#       tune.maxaccept 100#       tune.maxpollevents 180      nbproc 8
defaults      log   global      mode    http#       optionhttplog      option httpclose#       optiondontlognull      stats enable      stats uri /admin?stats      stats auth proxy:oldboy      cookie SERVERID insert      retries 3option redispatch      contimeout      5000      clitimeout      50000      srvtimeout      50000
listen www      bind 192.168.1.181:80      mode http      balance roundrobin      option forwardfor      option httpchk HEAD /checkstatus.html HTTP/1.0      server www01 192.168.1.80:80 check      server www02 192.168.1.82:80 check      server www21 192.168.1.85:80 check
listen ssh      bind 192.168.1.181:900      mode tcp      balance roundrobin      server ssh85 192.168.1.82:22 check
启动后连接ssh -p900 yan@192.168.1.81测试6.7 haproxy多实例解决方案
在/application/haproxy/conf/下再添加一个配置文件,比如haproxy.conf.simple-L4(注意,两个配置文件pid文件名不能一样,listen不能一样,bind不能一样)vim /application/haproxy/conf/haproxy.conf.simple-L4启动实例:/application/haproxy/sbin/haproxy -f haproxy.conf.simple-L4检查:ps -ef | grep haproxy6.8 heartbeat与haproxy配合生产场景维护
6.9 查看服务是否正常及VIP情况
查看日志情况tail -f /application/haproxy/logs/haproxy.logtail -f /var/log/heartbeat.logtail -f /var/log/messages
7. haproxy的L7生产应用实践
7.1 rs web server测试环境准备
在/var/下分别建立php nginx resin3个站点目录,并增加index文件及内容,假设PHP,nginx、resin分别代表不同的业务服务:PHP表示动态php程序服务nginx表示静态图片、js、html等服务resin表示动态jsp/java服务操作命令:for name in php nginx resin;do mkdir -p /var/$name;echo $name > /var/$name/index.html;done检查:for name in php nginx resin;do cat /var/$name/index.html;done安装httpd:yum -y install httpd添加虚拟主机编辑httpd-vhost.conf最下面加vim /etc/httpd/conf.d/httpd-vhost.conf<Directory "/var">    Options FollowSymLinks    AllowOverride none    Order allow,deny    Allow from all</Directory>NameVirtualHost *:8000NameVirtualHost *:9000NameVirtualHost *:10000<VirtualHost *:8000>    ServerAdmin 824412801@qq.com    ServerName nginx.yan.org    ServerAlias yan.org    DocumentRoot "/var/nginx"</VirtualHost>
<VirtualHost *:9000>    ServerAdmin 824412801@qq.com    ServerName php.yan.org    DocumentRoot "/var/php"</VirtualHost>
<VirtualHost *:10000>    ServerAdmin 824412801@qq.com    ServerName resin.yan.org    DocumentRoot "/var/resin"</VirtualHost>vim /etc/httpd/conf/httpd.conf增加监听端口Listen 8000Listen 9000Listen 10000检查语法:/etc/init.d/httpd configtest重启:/etc/init.d/httpd restart
7.2 实现haproxy301域名跳转
主节点(192.168.1.81)操作修改笔记本hosts文件:vim /etc/hosts (将虚拟主机的域名解析为haproxy配置文件bind中的IP)192.168.1.81 nginx.yan.org php.yan.org resin.yan.org yan.org修改主节点(192.168.1.81)haproxy配置文件vim /application/haproxy/conf/haproxy.confglobal      chroot /application/haproxy-1.4.21/var/chroot      daemon      group haproxy      user haproxy      #log 127.0.0.1:514 local0 info      log 127.0.0.1:514 local0 warning      pidfile /application/haproxy-1.4.21/var/run/haproxy.pid      maxconn 20000      spread-checks 3      nbproc 8defaults      log   global      mode    http      retries 3      option redispatch      contimeout      5000      clitimeout      50000      srvtimeout      50000      stats enable      stats hide-version      stats uri /admin?stats      stats auth proxy:123456      option httpclose
frontend webserver      bind 192.168.1.81:80      #1)301×      #èó1.yan.org -->nginx.yan.org¨301      #(short_domר hdr°üHost -i(·ó) yan.org       acl short_dom hdr(Host) -i yan.org      #prefix °×× ±¤·http://yan.org/a.html×http://nginx.yan.org/a.html      redirect prefix http://nginx.yan.org:8000 code 301 if short_dom
      acl oldboy_static path_beg /nginx/      acl oldboy_php path_beg /php/      acl oldboy_java path_beg /resin/      acl oldboy_picpath_end.gif .png .jpg .css .js
      acl iphone_users hdr_sub(user-agent)-i iphone      redirect prefix http://3g-iphone.yan.org if iphone_users
      acl android_users hdr_sub(user-agent)-i android      redirect prefix http://3g-android.yan.org/ if android_users
      use_backend nginxpools if oldboy_static or oldboy_pic      use_backend phppools if oldboy_php      use_backend javapools if oldboy_java
      default_backend nginxpools
# nginx static contentsbackend nginxpools      balance roundrobin      server oldboy_8000 192.168.1.80:8000
# php contentsbackend phppools      balance roundrobin      server oldboy_9000 192.168.1.80:9000
# java contentsbackend javapools      balance roundrobin      server oldboy_10000 192.168.1.80:10000重启haproxy服务/application/haproxy/bin/haproxy stop/application/haproxy/bin/haproxy start此时笔记本打开浏览器访问http://yan.org:8000 会跳转到http://nginx.yan.org:80007.3 实现haproxy基于url地址目录做7层跳转
acl oldboy_static path_beg /nginx/#path_beg 域名后面是nginx时,把他定义为oldboy_staticacl oldboy_php path_beg /php/acl oldboy_java path_beg /resin/
use_backend nginxpools if oldboy_static#如果有oldboy_static就交给nginxpoolsuse_backend phppools if oldboy_phpuse_backend javapools if oldboy_java在真实服务器(192.168.1.80)上创建三个目录(nginx,php,resin):mkdir /var/nginx/nginxecho nginx123 > /var/nginx/nginx/index.htmlmkdir /var/nginx/nginxecho nginx123 > /var/nginx/nginx/index.htmlmkdir /var/php/phpecho php123 > /var/php/php/index.htmlmkdir /var/resin/resinecho resin123 > /var/resin/resin/index.html测试:在客户机(笔记本)hosts文件加一条:192.168.1.80 nginx.yan.org php.yan.org resin.yan.org yan.org浏览器访问http://nginx.yan.org:8000/nginx/http://php.yan.org:9000/php/http://resin.yan.org:10000/resin/将客户机hosts改回192.168.1.81 nginx.yan.org php.yan.org resin.yan.org yan.org浏览器访问http://nginx.yan.org/nginx/得到的结果为nginx123,说明跳转成功 以上内容实现了:访问http://nginx.yan.org/nginx/==>nginxpools后端处理访问http://nginx.yan.org/php/==>phppools后端处理访问http://nginx.yan.org/resin/==>resinpools后端处理7.4 实现haproxy基于文件扩展名做7层跳转
acl oldboy_picpath_end.gif .png .jpg .css .jsuse_backend nginxpools if oldboy_static or oldboy_pic测试:在nginx目录下放三张图片nginx.jpgphp.jpgresin.jpg当访问http://nginx.yan.org/nginx.jpg 会访问到图片当访问http://resin.yan.org/resin.jpg 会访问到图片(跳转到nginx目录下找resin.jpg)7.5 实现haproxy基于user_agent做7层跳转
acl iphone_users hdr_sub(user-agent)-i iphone   redirect prefix http://3g-iphone.yan.org if iphone_users
acl android_users hdr_sub(user-agent)-i androidredirect prefix http://3g-android.yan.org/ if android_users问题1:rsyslog没有生成日志文件
解决办法:1)vim /etc/rsyslog.conf 改为local0.*   /var/log/haproxy.log2)关闭selinux,重启rsyslog此时/application/haproxy/logs/下会生成haproxy.log问题2:日志文件没有记录日志,为空
解决:编辑haproxy配置文件vim /application/haproxy/conf/haproxy.conf改为log 127.0.0.1 local0 warning8. Haproxy多种健康检查方法及实例
8.1 基于tcp端口的健康检查
使用这种检查方法,haproxy只会去检查后端server服务的对应端口,根据前面经验,我们知道这并不能保证服务的完全可用,但却可以作为辅助的检查手段,当在不是非常严格业务环境下也是可以用的,例如:前面讲解过的keepalived向下的健康检查默认就是基于端口的。对用户体验非常严格,就不要使用基于tcp端口的检查方式8.4 基于具体业务域名的URL健康检查
基于域名的URL健康检查:实际上,可以理解为haproxy用下面的方式在访问RS节点确认是否正常来检查curl http://www.yan.org/index.jsp 或 wget http://www.yan.org/index.jsp 方式这种检测方式,适用于更精细的基于具体业务的检测需求。实际上是带着head host头部信息向下健康检查它的使用语法如下:option httpchk HEAD /index.jsp HTTP/1.1\r\nHost:\ www.yan.org根据具体业务对应的域名来进行更细化的监控。可以用HEAD和GET方式option httpchk HEAD /index.jsp? HTTP/1.1\r\nHost:\ nginx.yan.orgoption httpchk GET /check.html HTTP/1.1\r\nHost:\php .yan.org8.5 生产环境如何正确选择健康检查
1)常规业务可以使用基于tcp的方式做健康检查,我们在keepalived健康检查时就是这样做的,虽然,keepalived也支持url健康检查2)由于基于URL的方式做健康检查相对来说也比较容易配置,所以推荐使用基于URL的健康检查可以使用http://192.168.1.80/check.html的方式,也可以使用基于域名的http://www.yan.org/html方式,后者更高级一些3)实际生产环境中,最重要最关键的是,我们设置的check.html能否真正的代表rs上的业务状态4)对于用户体验比较高的业务,可以请开发人员设置更加深入的健康检查文件,例如:yan.php或yan.jsp,这个健康检查可以深入到数据库,存储及各个接口,如果之一出现异常我就摘除。5)对于用户体验比较高的业务,除了健康检查文件更深入外,健康检查的频率、次数都要相应调整。例如:1秒检查一次,一次连不上就摘除RS

xitaotao 发表于 2016-8-23 09:54:31

厉害 大神 收我徒弟吧
页: [1]
查看完整版本: haproxy原理与部署