首页 » SEO优化 » php安排resin技巧_haproxy负载均衡入门到转行

php安排resin技巧_haproxy负载均衡入门到转行

访客 2024-11-29 0

扫一扫用手机浏览

文章目录 [+]

haproxy是一款开源的高性能的反向代理或者说是负载均衡做事软件之一,支持双机热备,虚拟主机基于TCP/HTTP运用代理,具有图形界面等功能。
其配置大略,而且拥有很好的对做事器节点的康健检讨功能(相称于keepalived康健检讨),当其代理的后端做事器涌现故障时,haproxy会自动的将该故障做事器摘除,当做事器的故障规复后haproxy还会自动将该RS做事器加入。

haproxy特殊适宜那些访问量很大 但是又须要会话保持或者7层运用的业务。
haproxy运行在普通的做事器硬件上,仅仅进行大略的优化就可以支持恒河沙数的并发连接。
并且它的运行模式使得它可以很大略安全的整合进各种网站的架构中,同时web做事器不被暴露在网络上。

php安排resin技巧_haproxy负载均衡入门到转行

从1.3版本起,haproxy引入了frontend,backend功能,frontend(acl规则匹配)运维职员可以根据http要求头内容做规则匹配,然后把要求定向到干系的backend(server pools等待前端把要求转过来的做事器组)。
很随意马虎的实现7层的代理功能,是一款不可多得的精良代理做事软件。

php安排resin技巧_haproxy负载均衡入门到转行
(图片来自网络侵删)

haproxy支持两种紧张的代理模式:4层TCP代理(邮件做事,内部协议通信做事器,mysql业务等)和7层http代理。

在4层TCP模式下,haproxy仅在客户端和做事器之间转发双向流量。
7层模式下haproxy会剖析运用层协议,并且能通过运行,谢绝,交流,增加,修正或者删除要求(request)或者回应(response)里指定内容来掌握协议。

官方文档:http://www.haproxy.com/resources/documentation/

haproxy软件的四层TCP代理运用非常精良,配置非常大略方便,比LVS和Nginx要方便很多,由于不须要在RS端实行脚本即可实现代理。
和商业版的Netscaler F5等硬件的利用方法险些一样。

提示:由于haproxy采取的是NAT模式,数据包来去都会经由haproxy,因此,在流量特殊大的情形下,其性能不如LVS。

haproxy 软件的最大优点是其7层的根据URL要求头运用过滤的功能,在门户网站的高并发生产架构中,haproxy软件一样平常用在LVS软件的下一层,或者象haproxy官方推举的可以挂在硬件负载均衡althon NS F5下利用,其表现非常好。
09年淘宝的cdn业务就大面积利用了haproxy作为7层cache运用代理。

haproxy支配

履行支配环境:

heartbeat+haproxy生产环境中的正式ip环境,haproxy做四层运用时的ip信息

安装haproxy

下载haproxy

mkdir /home/disdata/toolscd /home/disdata/toolswget wget http://down1.chinaunix.net/distfiles/haproxy-1.4.21.tar.gztar xf haproxy-1.4.21.tar.gzcd haproxy-1.4.21make TARGET=linux26 ARCH=X86_64 #64位编译配置#make TARGET=linux26 ARCH=x86_64 USE_EPOLL=1 USE_STATIC_PCRE=1#make TARGET=linux26 ARCH=I386 #32位#查看README 提示的安装办法make PREFIX=/usr/local/haproxy-1.4.21 installln -s /usr/local/haproxy-1.4.21 /usr/local/haproxy

[root@master haproxy-1.4.21]# make TARGET=linux26 ARCH=X86_64gcc -Iinclude -Iebtree -Wall -O2 -g -fno-strict-aliasing -DTPROXY -DCONFIG_HAP_CRYPT -DENABLE_POLL -DENABLE_EPOLL -DENABLE_SEPOLL -DNETFILTER -DUSE_GETSOCKNAME -DCONFIG_HAPROXY_VERSION=\"1.4.21\" -DCONFIG_HAPROXY_DATE=\"2012/05/21\" \-DBUILD_TARGET='"linux26"' \....

[root@master haproxy-1.4.21]# make PREFIX=/usr/local/haproxy-1.4.21 installinstall -d /usr/local/haproxy-1.4.21/sbininstall haproxy /usr/local/haproxy-1.4.21/sbininstall -d /usr/local/haproxy-1.4.21/share/man/man1install -m 644 doc/haproxy.1 /usr/local/haproxy-1.4.21/share/man/man1install -d /usr/local/haproxy-1.4.21/doc/haproxyfor x in configuration architecture haproxy-en haproxy-fr; do \install -m 644 doc/$x.txt /usr/local/haproxy-1.4.21/doc/haproxy ; \done

[root@master haproxy-1.4.21]# echo $?0

[root@master haproxy-1.4.21]# ln -s /usr/local/haproxy-1.4.21 /usr/local/haproxy[root@master haproxy-1.4.21]# ll /usr/local/total 64lrwxrwxrwx 1 root root 25 Apr 25 22:39 haproxy -> /usr/local/haproxy-1.4.21drwxr-xr-x 5 root root 4096 Apr 25 22:38 haproxy-1.4.21

[root@master haproxy]# tree.|-- doc| `-- haproxy| |-- architecture.txt| |-- configuration.txt| |-- haproxy-en.txt| `-- haproxy-fr.txt|-- sbin| `-- haproxy`-- share`-- man`-- man1`-- haproxy.16 directories, 6 files[root@master haproxy]#

规范目录构造

mkdir -p bin conf logs var/run var/chroot[root@master haproxy]# mkdir -p bin conf logs var/run var/chroot[root@master haproxy]# tree.|-- bin|-- conf|-- doc| `-- haproxy| |-- architecture.txt| |-- configuration.txt| |-- haproxy-en.txt| `-- haproxy-fr.txt|-- logs|-- sbin| `-- haproxy|-- share| `-- man| `-- man1| `-- haproxy.1`-- var|-- chroot`-- run12 directories, 6 files

[root@master haproxy]#L4 haproxy配置文件-------------------------------------------------------------globalchroot /usr/local/haproxy-1.4.21/var/chrootdaemongroup haproxyuser haproxylog 127.0.0.1:514 local0 infopidfile /usr/local/haproxy-1.4.21/var/run/haproxy.pidmaxconn 20480spread-checks 3# tune.maxaccept 100# tune.maxpollevents 180nbproc 8defaultslog globalmode http# option httplog# option dontlognullretries 3option redispatchcontimeout 5000clitimeout 50000srvtimeout 50000listen www 10.0.0.7:80 #定义一个实例,这个ip的80上监听#bind 10.0.0.7:80#mode http#no option splice-responsestats enable #激活状态stats uri /admin?statsstats auth proxy:oldboy #web界面的用户名密码balance roundrobin #轮循算法option httpclose #option forwardfor #记录客户真个ip地址,而不是haproxy的IP web日志格式须要相应配置option httpchk HEAD /checkstatus.html HTTP/1.0#康健检讨server www01 10.0.0.9:80 check #这3行是增加的RSserver www02 10.0.0.8:80 checkserver www03 10.0.0.21:80 check backup--------------------------------------------------------------------------

添加haproxy用户

useradd haproxy -s /sbin/nologin -M

编写haproxy启动脚本,授权700

---------------------------------------------------------#!/bin/shBASE="/usr/local/haproxy-1.4.21"PROG=$BASE/sbin/haproxyPIDFILE=$BASE/var/run/haproxy.pidCONFFILE=$BASE/conf/haproxy.confcase "$1" instart)$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);;stop)kill $(cat $PIDFILE);;)echo "USAGE: $0 {start|status|restart|stop}"exit 1;;esac------------------------------------------------------------------

haproxy日志配置(/etc/rsyslog.conf)

vim /etc/rsyslog.conf

#Haproxy

local0. /usr/local/haproxy-1.4.21/logs/haproxy.log

编辑/etc/sysconfig/rsyslog

[root@master conf]# vim /etc/sysconfig/rsyslog# Options for rsyslogd# Syslogd options are deprecated since rsyslog v3.# If you want to use them, switch to compatibility mode 2 by "-c 2"# See rsyslogd(8) for more details#SYSLOGD_OPTIONS="-c 5"SYSLOGD_OPTIONS="-m 0 -r -x"

#-r 是激活远程主机记录日志

#-x 禁止DNS查询

重启rsyslog

----------------------------启动haproxy-------------------------------

[root@master conf]# /usr/local/haproxy/bin/haproxyd start[WARNING] 116/115329 (25760) : Proxy 'www': in multi-process mode, stats will be limited to process assigned to the current request.[ALERT] 116/115329 (25760) : Starting proxy www: cannot bind socket

提示:1、可能是本机有web做事器80端口和haproxy 监听的冲突

2、haproxy配置文件指定的问题,在listen里指定 “bind-process 1” 让它只在一个CPU上跑,就不会涌现警告信息

listen www

bind 192.168.157.30:8080

bind-process 1

mode http

stats enable

stats uri /admin?stats

stats auth proxy:oldboy

balance roundrobin

option httpclose

option forwardfor

option httpchk HEAD /checkstatus.html HTTP/1.0

server www01 192.168.157.40:80 check

"haproxy.conf" 36L, 756C written

------------------------------------------------------

浏览器查看状态信息

http://192.168.157.30:8080/admin?stats #我这里监听的8080,本机装了Apache

输入配置文件里设置的用户名密码,查看状态信息

添加RS测试负载均衡,及康健检讨

测试轮循看看是不是一比一

for((i=0;i<10;i++));do curl http://192.168.157.30:8080;sleep 2;echo;done

---------haproxy康健检讨功能--------------

前面测试的是基于端口80的测试

补全前面的RS:

server www01 192.168.157.30:80 cookie www01 check port 80 inter 5000 5 #这里的cookie实现类似于会话保持的功能

server www02 192.168.157.20:80 cookie www02 check port 80 inter 5000 5

提示:

check port 80 表示对80端口进行康健检讨

inter 5000 fail 5 表示每5秒检讨一次,一共检讨5次

如果不加inter 5000 fail 5,则模式每2秒检讨一次,一共检讨3次,如果有问题就会摘掉出问题的机器

基于IP-URL的康健检讨(详细可以看官方文档)

option httpchk HEAD /checkstats.html HTTP/1.0 #checkstats.html 此文件要做RS真个站点目录下添加,或者改成index.html(不建议),否则会DOWN,这里的URL可以根据业务去定义

server tmpbai51 192.168.31.51:80 maxconn 2048 weight 8 check inter 3000 fall 2 rise 2

server tmpbai52 192.168.32.51:80 maxconn 2048 weight 8 check inter 3000 fall 2 rise 2

server tmpbai54 192.168.33.51:80 maxconn 2048 weight 8 check inter 3000 fall 2 rise 2

server tmpbai54 192.168.33.51:80 maxconn 2048 weight 8 check inter 3000 fall 2 rise 2 back

maxconn 2048 :最大连接

weight 8 :权重

check inter 3000 fall 2 rise 2

URL康健检讨实践测试:实际上haproxy便是相称于用下面的办法在访问RS节点确认是否正常。

curl http://192.168.157.30/checkstatus.html

基于域名的URL康健检讨

option httpchk HEAD /index.jsp? HTTP/1.1\rHost:\ www

haproxy生产功能运用

backup 功能参数测试

[root@master conf]#tail -3 haparoxy.conf

server www10 10.0.0.10:80 check

server www11 10.0.0.11:80 check

server www12 10.0.0.12:80 check backup

haproxy下的RS无法记录客户端真实ip的问题

在haproxy配置文件加入如下参数

listen www





option forwardfor






提示:参数末了放在listen www里面

在RS端修正日志格式:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined改成下面的形式

LogFormat "\"%{X-Forwarded-For}i\" %V %A %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

-----------------------------------------------------------------------------------------------------------

#

#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "\"%{X-Forwarded-For}i\" %V %A %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

-----------------------------------------------------------------------------------------------------------

提示:

1、利用正向代理的客户端,为了安全成分,在连接外部网络之前内部代理(网关)会去掉原有的X-Forwarded-For信息,这种情形server端可以信赖X-Forwarded-For信息,表明连接出自内部网络

2、如果server端利用了反向代理(L7),这种情形就不能完备信赖X-Forwarded-For信息,末了利用一个白名单来进行掌握。

3、如果同了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串ip值,究竟哪个才是真正的用户真个真实IP呢?

X-Forwarded-For:client1,proxy1,proxy2

X-Forwarded-For会取消第一个非unknown的有效ip字符串

虚拟主机不记录康健检讨日志(日志文件为check.txt)

SetEnvIf Request_URI "^/check\.txt$" dontlog

LogLevel warn

ErrorLog /var/log/httpd/vhost_error.log

CustomLog /var/log/httpd/vhost_access.log combined env=!dintlog

忘了要开启内核转发(/etc/sysctl.conf)

net.ipv4.ip_forward = 1

sysctl -p

把haproxy加入rc.local

echo '#haproxy'>>/etc/rc.local

echo '/usr/local/haproxy/bin/haproxyd start' >>/etc/rc.local

haproxy双机双主案例

两边的haproxy.conf一样

添加子接口绑定VIP,建议不要用管理ip作为VIP

#haproxy cannot bind socket:

办理办法:在内核里追加

echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf

意思是启动haproxy时忽略haproxy配置中的VIP是否存在

涌现cannot bind socket的缘故原由可能有两个:

1、haproxy配置文件里绑定的ip 在本地网卡上并不存在,办理办法在内核加入如上参数

2、本地有类似Apache/或者nginx占用haproxy启动的端口,办理办法关闭Apache/nginx或者变动端口

生产环境防火墙iptables配置建议

生产环境高访问量站点防火墙可能对LB性能有影响,最好在前端加硬件防火墙,或者关掉

haproxy的L7生产运用实践

测试环境:

在/var下分别建立php nginx resin 3个站点目录,并增加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[root@master-01 ~]# tree /var/{php,nginx,resin}/var/php`-- index.html/var/nginx`-- index.html/var/resin`-- index.html0 directories, 3 files添加三个虚拟主机#haproxy vhost test<Directory "/var">Options FollowSymlinksAllowOverride noneOrder allow,denyAllow from all</Directory>NameVirtualHost :80<VirtualHost :80>ServerAdmin it_jin@163.comDocumentRoot "/var/nginx"ServerName ngnix.aa.comServerAlias aa.com</VirtualHost><VirtualHost :80>ServerAdmin it_jin@163.comDocumentRoot "/var/php"ServerName php.aa.comServerAlias php.aa.com</VirtualHost><VirtualHost :80>ServerAdmin it_jin@163.comDocumentRoot "/var/resin"ServerName resin.aa.comServerAlias resin.aa.com</VirtualHost>"httpd-vhosts.conf" 72L, 2099C written

哀求实现根据目录进行过滤转发:

acl dynamic_java path_beg /java/

acl static_ryan path_beg /images/

acl static_ryan path_beg /css/

实现haproxy基于url地址目录做7层跳转

acl dynamic_java path_beg /resin/

acl static_nginx path_beg /nginx/

acl dynamic_php path_beg /php/

use_backend nginxpools if static_ryan

use_backend phppools if dynamic_php

use_backend javapools if dynamic_java

这里要实现访问

http://nginx.aa.com/nginx/ ==>nginxpools的后端做事器处理

http://php.aa.com/nginx/ ==>phppools的后端做事器处理

http://java.aa.com/nginx/ ==>javapools的后端做事器处理

---nginx的跳转----

server{

listen 80;

server_name www.aa.com aa.com;

access_log /dev/null;

error_log /dev/null;

#root /var/html/wordpress/;

localtion /{

proxy_pass http://192.168.1.6:8080;

}

}

location /shop/{

proxy_pass http://192.168.1.6:8081/shop/;

}

实现haproxy基于文件扩展名的7层跳转

acl static_pic path_end .gif .png .jpg .css .js

use_backend nginxpools if nginx_static or static_pic

实现haproxy基于user_agent做7层跳转

acl iphone_user hdr_sub(user-agent) -i iphone

redirect prefix http://3g-iphone.aa.com if iphone_users

acl android_users hdr_sub(user-agent) -i android

redirect prefix http://3g-android.aa.com/ if android_users

haproxy多种康健检讨方法

1、基于TCP端口康健检讨

server www09 10.0.0.9:80 cookie www09 check port 80 inrer 5000 fall 5

server www08 10.0.0.8:80 cookie www08 check port 80 inrer 5000 fall 5

check port 80 表示对80端口进行康健检讨 也可以直接写成check

inter 5000 fall 5 表示每5秒检讨一次 一共检讨5次 如果有问题就会摘掉出问题的机器

如果结尾不加inter 5000 fall 5 默认情形下每2秒检讨一次 检讨3次

参数概述:

inter:2000 意思是不加该参数 正常情形下默认每2秒检讨一次

rise:2意思是不加该参数 在RS宕机后规复前 检讨2次OK 认为其复活 并加入集群组中

fall:3 意思是不加该参数 检讨3次 认为RS宕机 摘除

port:default server port 不加该参数 默认便是检讨端口

addr:specific address for the test

2、基于TCP的康健检讨

3、基于URL的康健检讨

option httpchk GET /check.html

server www09 10.0.0.9:80 check port 80

server www08 10.0.0.8:80 maxconn 2048 weight 12 check inter 3000 fall 2 rise 2

server www10 10.0.0.10:80 check

---------简洁的RS配置----------------------------------------------

globalchroot /usr/local/haproxy-1.4.21/var/chrootdaemongroup haproxyuser haproxylog 127.0.0.1 local0 warningpidfile /usr/local/haproxy-1.4.21/var/run/haproxy.pidmaxconn 20480spread-checks 3#tune.maxaccept 100#tune.maxpollevents 180nbproc 8defaultslog globalmode httpretries 3#option httplogoption httpclose#option dontlognullstats enablestats hide-version #隐蔽版本信息stats uri /admin?statsstats auth proxy:123456cookie SERVERID insertoption redispatchcontimeout 5000clitimeout 50000srvtimeout 50000

-------------------------------以下为配置干系解释--------------------------

标签:

相关文章

php固定高度技巧_36教材桩根本施工技能

沉入桩所用的基桩紧张为预制的钢筋混凝土桩和预应力混凝土桩。断面形式常用的有实心方桩和空心管桩两种。管桩(包括普通的和预应力的)一样...

SEO优化 2024-12-14 阅读0 评论0

小熊掰玉米php技巧_小熊掰玉米

不知不觉,太阳落山了,小熊也累得气喘吁吁。他看动手里末了一个玉米,溘然意识到自己只剩下了这一个玉米。他后悔的想:我为什么要一贯扔掉...

SEO优化 2024-12-14 阅读0 评论0