使用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/p_w_picpaths/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/p_w_upload/ /
# ls /var/www/html/
p_w_upload
使用apache帐号测试登录ftp
3、回到论坛的后台面板设定远程附件功能
搜索ftp,点击 ftp设置
站点附件地址 http://att.upl.com/p_w_upload
所有设定都弄好之后,把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 --根据请求的特点----->后端应用节点
转载于:https://blog.51cto.com/douya/1324512