使用Haproxy实现动静分离和负载均衡

使用Haproxy实现动静分离和负载均衡

www.upl.com att.upl.com
| | <----模拟生产网络
HA(宿主) 附件服务器
| | <----模拟内网
|----------|----------|-------------|
web1 web2 img1

HA
br0 10.1.1.21 <---www.upl.com
virbr6 192.168.29.1


web1
eth0 192.168.29.11

web2 
eth0 192.168.29.12

img
eth0 192.168.29.14


att附件服务器
eth0 10.1.1.20 
eth1 192.168.29.13



一、配置Haproxy

所有静态请求经过haproxy调度给img1
其余请求都均衡调度给web1和web2
# vim /usr/local/haproxy/haproxy.cfg

global
log 127.0.0.1 local0 info
user haproxy
group haproxy
daemon
pidfile /usr/local/haproxy/haproxy.pid

defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout client 50000
timeout server 50000
timeout connect 60000
option httpchk HEAD /ok.html HTTP/1.0


frontend http-in
bind *:80
mode http
option httpclose
option forwardfor

acl url_static path_end .gif .png .jpg .css .js .swf
acl short_domain hdr(Host) -i upl.com
acl right_ref hdr_reg(Referer) -i upl.com
acl steal_link path_end no.png 

redirect prefix http://www.upl.com code 301 if short_domain
redirect location http://www.upl.com/images/no.png code 302 if !right_ref url_static !steal_link


use_backend imgservs if url_static 
default_backend orgservs

backend orgservs
balance roundrobin
cookie SERVERID insert indirect
server web1 192.168.29.11:80 weight 1 cookie web1 check inter 2000 rise 2 fall 2
server web2 192.168.29.12:80 weight 1 cookie web2 check inter 2000 rise 2 fall 2


backend imgservs
server img1 192.168.29.14:80 weight 1 check inter 2000 rise 2 fall 2



listen stats :8888 
mode http 
transparent 
stats uri / haproxy-stats 
stats realm Haproxy \ statistic 
stats auth admin:admin

二、部署haproxy后端节点 (web1,web2,img1)

1、web1,web2安装lamp环境(除了mysql)
httpd php php-mysql

目录下建立 /var/www/html/ok.html
启动服务httpd

2、为了节约机器,实验环境在宿主机上部署mysql-server


3、img1 安装httpd
# touch /var/www/html/ok.html
# service httpd start

4、解压代码到web1,并且设定haproxy仅仅调度给web1,暂时不调度给web2 


# vim /usr/local/haproxy/haproxy.cfg
。。。
。。。
server web2 192.168.29.12:80 weight 0 cookie web2 check inter 2000 rise 2 fall 2 <---设定权重为0

# service haproxy reload


5、解压相同代码到img1
因为这些代码包含了所有的静态文件

6、必须在客户端里绑定www.upl.com指向haproxy生产网络接受请求的IP

10.1.1.21 www.upl.com
10.1.1.20 att.upl.com


向导安装论坛 http://www.upl.com



三、部署附件服务器

1、在附件服务器上安装httpd

2、在附件服务器上安装vsftpd,并且设定相关ftp帐号和权限
# passwd apache
# usermod -d '/var/www/html' apache <---确定家目录是网站的根目录

# service httpd start


# vim /etc/vsftpd/vsftpd.conf
....
chroot_local_user=YES

# service vsftpd start

# chown apache:apache /var/www/html/
# rsync -alvR 192.168.29.11:/var/www/html/attachment/ / 

# ls /var/www/html/
attachment



使用apache帐号测试登录ftp


3、回到论坛的后台面板设定远程附件功能

搜索ftp,点击 ftp设置


站点附件地址 http://att.upl.com/attachment



所有设定都弄好之后,把web1的代码同步到web2,并且恢复对web2的调度
# rsync -alvR /var/www/html/ 192.168.29.12:/

===============================================================================

整合lvs和haproxy实现更大型的负载均衡集群


lvs 四层调度,重量型的,能够支持更高的并发
haproxy/nginx 特色是7层调度,能够根据http协议实现丰富的调度规则,性能相对于lvs较差一些。


br0
|
router
| DNS轮寻
br0:1
|--------------同一个机房-----------| 
lvs-HA集群1 lvs-HA集群2
| |
|----------------| |------------------|
Ha1 Ha2 Ha3 Ha4
| | | |
|--------------|---|-------------|-----|--------|-------|--------|
web1 img1 web2 js1 web3 web4 img2 js2

mysql-server , memcached


由于实验环境中,没有多个网段,没有真正的路由,所以拓扑图中的router使用一台普通计算机模拟,要一个网卡模拟两个网段
router 
br0 10.1.1.21
br0:1 192.168.129.1 


所有web节点提供的内容一致的
所有img1节点存放的都是图形文件
所有js节点存放的都是css,js代码文件


客户端请求----经过DNS轮寻----> 某一组lvs-----> 通过直接调度技术----> 其中一台Haproxy --根据请求的特点----->后端应用节点



      本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1324512,如需转载请自行联系原作者
上一篇:互联网大佬刘庆峰:利用大数据提升*效率


下一篇:四大科技巨头跟随者众 智能家居市场容量可观