设为首页 收藏本站
查看: 2369|回复: 2

[经验分享] haproxy+varnish实现discuz论坛的动静分离以及静态缓存

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-14 09:35:23 | 显示全部楼层 |阅读模式
一、目的:
        (1) 动静分离discuzx,静态资源通过NFS挂载至动态服务器中;
        (2) varnish缓存静态资源;

二、拓扑规划
wKioL1gm-NqgHsc3AADVZY--o54296.jpg
三、步骤:
    1、先部署discuz的动静分离

        (1)在app动态服务器快速搭建LAMP环境:
1
yum install -y httpd mysql-server php php-mysql



        (2)创建discuz论坛的mysql用户:
1
2
MySQL [(none)]> GRANT ALL ON *.* TO 'nihao'@'localhost' IDENTIFIED BY '123456';
MySQL [(none)]> FLUSH PRIVILEGES;




        (3)部署discuz论坛程序:
1
[iyunv@localhost html]# unzip Discuz_X3.2_SC_UTF8.zip




        (4)要实现discuz的动静分离,首先要了解discuz的动静资源的存放目录位置,在discuz的根目录upload目录中,data和static存放的是静态资源:
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
[iyunv@localhost upload]# tree -L 1
.
├── admin.php
├── api
├── api.php
├── archiver
├── config
├── connect.php
├── cp.php
├── crossdomain.xml
├── data  #静态资源
├── favicon.ico
├── forum.php
├── group.php
├── home.php
├── index.php
├── install
├── member.php
├── misc.php
├── plugin.php
├── portal.php
├── robots.txt
├── search.php
├── source
├── static  #静态资源
├── template
├── uc_client
├── uc_server
└── userapp.php
10 directories, 17 files




        (5)知道了静态资源的位置,接下来就可以搭建static静态资源的静态服务器了,首先,快速搭建LAMP环境,这里就不演示了,搭建完成后启动NFS和配置NFS:
1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@php ~]# yum install -y rpcbind nfs-utils
[iyunv@php ~]# vim /etc/exports  #编辑NFS共享目录
[iyunv@php ~]# cat !$
cat /etc/exports
/var/www/html/upload/data 10.1.0.0/16(rw)
/var/www/html/upload/static 10.1.0.0/16(rw)
[iyunv@php ~]# service rpcbind start
[iyunv@php ~]# service ntf start
[iyunv@php ~]# showmount -e 10.1.249.30
Export list for 10.1.249.30:
/var/www/html/upload/static 10.1.0.0/16
/var/www/html/upload/data   10.1.0.0/16




        (6)回过头来,先把动态服务的初始化静态内容复制到静态服务器上,再动态服务器上将静态资源的两个目录挂上去:
1
2
3
4
[iyunv@localhost ~]# scp /var/www/html/upload/static/* 10.1.249.30:/var/www/html/upload/static/*  #拷贝文件时路径要一致
[iyunv@localhost ~]# scp /var/www/html/upload/data/* 10.1.249.30:/var/www/html/upload/data/*
[iyunv@localhost ~]# mount.nfs 10.1.249.30:/var/www/html/upload/static/ /var/www/html/upload/static/ #挂载NFS
[iyunv@localhost ~]# mount.nfs 10.1.249.30:/var/www/html/upload/data/ /var/www/html/upload/data/





        (7)OK,接下来可以安装haproxy来进行设置acl调度了:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[iyunv@localhost ~]# yum install -y haproxy
[iyunv@localhost ~]# cat /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    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
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
listen stats
    mode http
    bind *:1080
    stats enable
    stats hide-version
    stats uri     /admin
    stats realm   Haproxy\ Statistics
    stats auth    admin:admin
    stats admin if TRUE
frontend  main
    bind *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js .html .ico
    use_backend static          if url_static
    default_backend             app
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 10.1.249.30:80 check
    rspadd X-Via:static #启用响应报文首部标志,以便观察是静态服务器反馈的
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server app 10.1.252.36:80 check
    rspadd X-Via:app #启用响应报文首部标志,以便观察是动态服务器反馈的





        (8)OK,haproxy已经搭建完成,我们来测试一下:
haproxy状态页:
wKioL1gm-TaQTv20AAP6clWt8-M191.jpg
动态服务器响应:
wKiom1gm-TfBuK9bAAK0mumdaSQ184.jpg
静态服务器响应:
wKioL1gm-TiTx6dOAAK0GCAMhLk807.jpg

    2、动静分离已经实现,接下来在静态资源添加varnish来缓存静态资源:

        (9)安装配置varnish,由于前端haproxy已经进行了资源的分离,所以,varnish的配置基本用默认的配置就可以了
1
2
3
4
5
6
[iyunv@localhost ~]# yum install -y varnish-3.0.7-1.el7.centos.x86_64.rpm
[iyunv@localhost ~]# vim /etc/varnish/default.vcl
backend default {
  .host = "10.1.249.30";
  .port = "80";
}




        (10)修改HAproxy的配置文件,把静态资源的调度IP改为varnish:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
[iyunv@localhost ~]# cat  /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    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
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
listen stats
    mode http
    bind *:1080
    stats enable
    stats hide-version
    stats uri     /admin
    stats realm   Haproxy\ Statistics
    stats auth    admin:admin
    stats admin if TRUE
frontend  main
    bind *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js .html .ico
    use_backend static          if url_static
    default_backend             app
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 10.1.249.75:6081 check
    rspadd X-Via:static
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server app 10.1.252.36:80 check
    rspadd X-Via:app



wKioL1gm-ZXjLE4tAAKt0g7HkT8868.jpg
OK,haproxy+varnish实现动静资源分离和静态资源的缓存到此暂告一段落

运维网声明 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-300078-1-1.html 上篇帖子: haproxy+varnish+amp集群实现动静分离 下篇帖子: 高可用高性能负载均衡软件HAproxy详解指南-第一章(简介、... discuz
累计签到:70 天
连续签到:1 天
发表于 2016-11-15 09:03:58 | 显示全部楼层
感谢分享啊

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

累计签到:407 天
连续签到:1 天
发表于 2016-11-15 10:44:15 | 显示全部楼层
每日回帖,谢谢

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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