设为首页 收藏本站
查看: 1328|回复: 0

[经验分享] haproxy实现动静分离

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-23 09:03:20 | 显示全部楼层 |阅读模式
                      实验环境:
    三台虚拟机:node1:eth0:172.16.103.1(模拟为外网IP),eth1:192.168.1.1(内网IP,与后端RealServer通信使用)

                node2:eth0:192.168.1.2 (提供动态页面内容)

                node3:eth0:192.168.1.3 (提供静态页面内容)

实验简易拓扑:

    wKiom1Qf9aiRcMe0AACmAzA2Toc666.jpg
实验过程:
前端HAProxy代理服务器上安装haproxy程序包
1
# yum -y install haproxy



为了能在后端服务器均出现故障时,能提供提示性信息,在haproxy所在主机启动httpd服务,并提供主页文件,内容编辑为:
# vim /etc/httpd/conf/httpd.conf
Listen 8080   #修改一个默认的监听地址,与后端的RealServer不一致,因为haproxy地址监听的通常设置为80,设置这个监听地址的目的就是为了避免在本机不同进程使用同一端口,而产生冲突。
# vim /var/www/html/index.html
Site under Maintaince
RS1主机提供动态页面的访问,安装有httpd和php程序包并提供主页文件

1
2
3
4
5
6
7
8
9
# yum -y install httpd php
# vim /var/www/html/index.php
php Page
   phpinfo();
?>
# vim /var/www/html/index.html  #为了之后测试可以在node2这台提供动态页面访问服务的主机上创建一个静态页面文件,与node3上的文件名称相同,但内容不同,在访问相同名称的文件时,可以测试是否能始终将静态内容调度到静态内容服务器node3上。
# vim /var/www/html/index.html
node2.cluster.com



RS2上仅提供静态页面内容,只安装httpd程序
1
2
3
# yum -y install httpd
# vim /var/www/html/index.html
node3.cluster.com



配置前端的haproxy,使得用户请求时,动态页面内容调度至RS1,请求静态内容时会调度到RS2,在配置文件中的定义内容为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    #    local2.*                       /var/log/haproxy.log
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
frontend  main  
    maxconn 6000
    bind :80
    acl url_static path_beg -i /images /stylesheets /videos /css /javascript   #定义访问控制列表
    acl url_static path_end -i .jpg .html .css .js .png .gif  #定义访问控制列表,以便在条件匹配时调用
    use_backend static if url_static    #调用之前定义的访问控制列表,之前定义的访问控制列表指定的内容是开头以图片,样式表,视频,css文件及java脚本开头的和以.jpg.html等文件结尾的文件时会使用后端以static定义的服务器组。
    default_backend webservers   #定义默认的访问调度服务器
backend static
    balance roundrobin   
    server static1 192.168.1.3 check port 80  #提供静态页面内容的服务器定义在static组中
    server b1 127.0.0.1:8080 backup check port 8080
backend webservers
    balance roundrobin
    server s1 192.168.1.2 check port 80 # 提供动态页面内容的服务器定义在默认的服务器组中
    server b1 127.0.0.1:8080 backup check port 8080   #定义了一个backup server,当后端的各RealServer都出现故障时,会使用haproxy所在的主机提供的web服务来响应,显示服务器在维护中的信息。
    stats enable    #这段内容是定义stats页面,可以方便使用web浏览器以图形化的方式查看后端服务器的工作状态,并可以进行调整
    stats hide-version
    stats uri /hap?stats
    stats scope .
    stats realm HAProxy Statistics
    stats auth admin:admin
    stats admin if TRUE



启动haproxy服务:
# service haproxy start
# netstat -tnlp

配置过程中的日志的启用方式说明:

记录日志:使用配置文件中定义的默认日志记录方式,不过需要启用rsyslog.conf配置文件中的UDP协议,同时要指定haproxy配置文件中定义的默认日志记录文件的位置:
1
2
3
4
5
6
7
# vim /etc/rsyslog.conf #启用下面的内容,同时添加日志记录的位置及facility。
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
local2.*                   /var/log/haproxy.log
# service rsyslog start
# chkconfig rsyslog on



查看rsyslog服务监听的端口,rsyslog工作在514端口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@node1 tmp]# netstat -unlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1304/rpcbind        
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               1379/cupsd         
udp        0      0 0.0.0.0:632                 0.0.0.0:*                               1304/rpcbind        
udp        0      0 0.0.0.0:514                 0.0.0.0:*                               3529/rsyslogd      
udp        0      0 0.0.0.0:44815               0.0.0.0:*                               3306/haproxy        
udp        0      0 0.0.0.0:680                 0.0.0.0:*                               1352/rpc.statd      
udp        0      0 0.0.0.0:48834               0.0.0.0:*                               1352/rpc.statd      
udp        0      0 :::111                      :::*                                    1304/rpcbind        
udp        0      0 :::631                      :::*                                    1304/rpcbind        
udp        0      0 :::514                      :::*                                    3529/rsyslogd      
udp        0      0 :::51898                    :::*                                    1352/rpc.statd



查看日志文件中记录的内容:

1
2
3
4
[iyunv@node1 tmp]# tail /var/log/haproxy.log
Sep  8 13:05:53 localhost haproxy[3554]: Proxy main started.
Sep  8 13:05:53 localhost haproxy[3554]: Proxy static started.
Sep  8 13:05:53 localhost haproxy[3554]: Proxy webservers started.



实现动静分离时定义的效果:当访问默认主页时,使用默认的backend定义的webserver服务器响应,这个服务器上提供的是php页面文件,也是动态页面的内容:

wKiom1QgDUmDgGsWAARWg1wwAMc133.jpg
多次刷新测试后访问的还是同一个页面的内容,如果访问的是静态文件的内容,比如index.html,即使在node2上有相同名称的页面文件,也不会调度到node2上,而是只显示node3上的文件:
wKioL1QgDjDzbQNCAAEkKhHRmFY480.jpg
实现了动态页面和静态页面分离的效果。
                    


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25178-1-1.html 上篇帖子: haproxy简单配置 下篇帖子: varnish详解及安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表