author:JevonWei

版权声明:原创作品


实验背景:将wordpress应用部署在后端服务器上,使用HAProxy做代理服务器,Varnish做缓存服务器,后端有四台web服务器,web1和web2服务器组成一个动态资源组dynsrvs,web3和web4服务器组成静态资源组stasrvs,Varnish用来缓存静态资源组stasrvs的数据; 受条件限制,在此使用web虚拟主机做为物理主机使用,使用NFS共享wordpress文件,wordpress与mysql为同一主机

实验目的:为了提高应用的访问速度和访问承载量,使用HAProxy技术做负载均衡,使用HAProxy的ACL访问控制实现动静分离的效果,将动态资源存放在动态web组中,将静态资源存放在静态资源组中,为了提高访问速度,在静态服务器组和代理服务器之间使用了缓存服务器做数据缓存

网络拓扑图

环境:

  1. HAProxy 172.16.252.82
  2. dynsrvs为后端动态网页web
  3. web1172.16.252.92:80
  4. web2172.16.252.92:8080
  5. stasrvs为后端静态网页web
  6. web3172.16.253.6780
  7. web4172.16.253.678080
  8. Varnish 172.16.252.100
  9. NFS+Mysql 172.16.252.103

配置后端动态web组

  1. [root@dynsrvs ~]# yum -y install httpd php php-mysql
  2. [root@dynsrvs ~]# mkdir /data/web/vhost{1,2} -pv

编辑动态php的测试页面

  1. [root@dynsrvs ~]# vim /data/web/vhost1/index.php
  2. <h1> Application Server 1</h1>
  3. <?php
  4. phpinfo();
  5. ?>
  6. [root@dynsrvs ~]# vim /data/web/vhost2/index.php
  7. <h1> Application Server 2</h1>
  8. <?php
  9. phpinfo();
  10. ?>

配置后端web主机

  1. [root@dynsrvs ~]# vim /etc/httpd/conf.d/vhost1.conf
  2. <VirtualHost *:80>
  3. ServerName web1.danran.com
  4. DocumentRoot "/data/web/vhost1"
  5. <Directory "/data/web/vhost1">
  6. Options FollowSymLinks
  7. AllowOverride None
  8. Require all granted
  9. </Directory>
  10. </VirtualHost>
  11. Listen 8080
  12. <VirtualHost *:8080>
  13. ServerName web2.danran.com
  14. DocumentRoot "/data/web/vhost2"
  15. <Directory "/data/web/vhost2">
  16. Options FollowSymLinks
  17. AllowOverride None
  18. Require all granted
  19. </Directory>
  20. </VirtualHost>

访问测试php动态页面

http://172.16.252.92/

http://172.16.252.92/:8080

配置后端动态web组

  1. [root@stasrvs ~]# yum -y install httpd
  2. [root@stasrvs ~]# iptables -F
  3. [root@stasrvs ~]# setenforce 0
  4. [root@stasrvs ~]# mkdir -pv /data/web/vhost{1,2}
  5. [root@stasrvs ~]# mkdir /data/web/vhost1/png
  6. [root@stasrvs ~]# mkdir /data/web/vhost2/png
  7. 复制静态资源做测试
  8. [root@stasrvs ~]# find /usr/share/ -iname "*.jpg" -exec cp {} /data/web/vhost1/png/ \;
  9. [root@stasrvs ~]# find /usr/share/ -iname "*.jpg" -exec cp {} /data/web/vhost2/png/ \;
  10. [root@stasrvs ~]# vim /data/web/vhost1/index.html
  11. <h1> Image Server 1 </h1>
  12. [root@stasrvs ~]# vim /data/web/vhost2/index.html
  13. <h1> Image Server 2 </h1>

配置虚拟主机

  1. [root@stasrvs ~]# vim /etc/httpd/conf.d/vhost1.conf
  2. <VirtualHost *:80>
  3. ServerName web3.danran.com
  4. DocumentRoot "/data/web/vhost1"
  5. <Directory "/data/web/vhost1">
  6. Options FollowSymLinks
  7. AllowOverride None
  8. Require all granted
  9. </Directory>
  10. </VirtualHost>
  11. [root@stasrvs ~]# vim /etc/httpd/conf.d/vhost2.conf
  12. Listen 8080
  13. <VirtualHost *:8080>
  14. ServerName web4.danran.com
  15. DocumentRoot "/data/web/vhost1"
  16. <Directory "/data/web/vhost1">
  17. Options FollowSymLinks
  18. AllowOverride None
  19. Require all granted
  20. </Directory>
  21. </VirtualHost>
  22. [root@stasrvs ~]# systemctl start httpd.service

访问测试静态页面

http://172.16.252.67/png/3.jpg

http://172.16.252.67:8080/png/3.jpg

配置NFS+Mysql

Mysql

  1. [root@mysql ~]# yum -y install mariadb-server
  2. [root@mysql ~]# systemctl start mariadb
  3. [root@mysql ~]# systemctl enable mariadb
  4. [root@mysql ~]# systemctl disable firewalld
  5. [root@mysql ~]# systemctl stop firewalld
  6. [root@mysql ~]# iptables -F 关闭防火墙
  7. [root@mysql ~]# setenforce 0
  8. 创建数据库账号
  9. [root@mysql ~]# mysql_secure_installation \\数据库安全初始化
  10. [root@mysql ~]# mysql -uroot -hlocalhost -p
  11. MariaDB [(none)]> create database blog;
  12. MariaDB [(none)]> grant all on blog.* to blog@'172.16.%.%' identified by 'blog';
  13. 登录测试
  14. [root@mysql ~]# mysql -ublog -h172.16.252.103 -p
  15. 添加防火墙,仅允许RS1RS2及自己本身连接数据库
  16. [root@mysql ~]# iptables -A INPUT -s 172.16.252.92 -p tcp --dport 3306 -j ACCEPT
  17. [root@mysql ~]# iptables -A INPUT -s 172.16.252.67 -p tcp --dport 3306 -j ACCEPT
  18. [root@mysql ~]# iptables -A INPUT -s 172.16.252.103 -p tcp --dport 3306 -j ACCEPT
  19. [root@mysql ~]# iptables -A INPUT -j REJECT

NFS

  1. [root@NFS ~]# iptables -F
  2. [root@NFS ~]# setenforce 0
  3. [root@NFS ~]# rpm -ql nfs-utils
  4. package nfs-utils is not installed
  5. [root@NFS ~]# yum -y install nfs-utils
  6. wordpress程序包解压缩
  7. [root@NFS ~]# tar xf wordpress-4.8-zh_CN.tar.gz -C /app
  8. [root@NFS ~]# cd /app/wordpress
  9. [root@NFS wordpress]# cp wp-config-sample.php wp-config.php
  10. [root@NFS ~]# chmod o+w /app/blog/wp-config.php
  11. [root@NFS wordpress]# vim wp-config.php
  12. /** WordPress数据库的名称 */
  13. define('DB_NAME', 'blog');
  14. /** MySQL数据库用户名 */
  15. define('DB_USER', 'blog');
  16. /** MySQL数据库密码 */
  17. define('DB_PASSWORD', 'blog');
  18. /** MySQL主机 */
  19. define('DB_HOST', '172.16.252.103');
  20. 创建与dynsrvsstasrvs主机上相同UIDapache用户
  21. [root@NFS blog]# useradd -u 48 -r -s /sbin/nologin apache \\dynsrvsstasrvsapache用户UID48
  22. 修改blog目录的属组,从而使apache用户对blog有读写权限
  23. [root@NFS app]# useradd -u 48 -r -s /sbin/nologin apache
  24. [root@NFS app]# chown -R apache:apache blog/
  25. [root@NFS app]# ll -d blog/
  26. drwxr-xr-x. 2 apache apache 6 Sep 8 13:12 blog/
  27. 配置NFS
  28. [root@NFS ~]# vim /etc/exports
  29. /app/blog 172.16.252.0/24(rw,all_squash,anonuid=48,anongid=48) \\all_squash为压缩所有用户名,anonuid意为压缩为UID48的用户,anongid组压缩为GID48的组
  30. [root@NFS ~]# systemctl start nfs-server

dynsrvs和stasrvs服务器挂载NFS共享目录

stasrvs

  1. [root@stasrvs ~]# yum -y install nfs-utils
  2. [root@stasrvs ~]# cd /data/web/vhost2/
  3. [root@stasrvs vhost2]# mkdir blog
  4. [root@stasrvs vhost2]# chmod o+w blog
  5. [root@stasrvs ~]# vim /etc/fstab
  6. 172.16.252.103:/app/blog /data/web/vhost2/blog nfs defaults 0 0
  7. [root@stasrvs ~]# mount -a
  8. [root@stasrvs ~]# df
  9. web1的根文件路径修改为/data/web/vhost2,同web2路径一致
  10. [root@stasrvs vhost1]# vim /etc/httpd/conf.d/vhost1.conf
  11. <VirtualHost *:80>
  12. ServerName web3.danran.com
  13. DocumentRoot "/data/web/vhost2"
  14. <Directory "/data/web/vhost2">
  15. Options FollowSymLinks
  16. AllowOverride None
  17. Require all granted
  18. </Directory>
  19. </VirtualHost>
  20. [root@stasrvs ~]# systemctl restart httpd

dynsrvs

  1. [root@dynsrvs ~]# yum -y install nfs-utils
  2. [root@dynsrvs ~]# cd /data/web/vhost2/
  3. [root@dynsrvs vhost2]# mkdir blog
  4. [root@dynsrvs vhost2]# chmod o+w blog
  5. [root@dynsrvs ~]# vim /etc/fstab
  6. 172.16.252.103:/app/blog /data/web/vhost2/blog nfs defaults 0 0
  7. [root@dynsrvs ~]# mount -a
  8. [root@dynsrvs ~]# df
  9. web1的根文件路径修改为/data/web/vhost2,同web2路径一致
  10. [root@stasrvs vhost1]# vim /etc/httpd/conf.d/vhost1.conf
  11. <VirtualHost *:80>
  12. ServerName web1.danran.com
  13. DocumentRoot "/data/web/vhost2"
  14. <Directory "/data/web/vhost2">
  15. Options FollowSymLinks
  16. AllowOverride None
  17. Require all granted
  18. </Directory>
  19. </VirtualHost>
  20. [root@dynsrvs ~]# systemctl restart httpd

HAProxy

安装HAProxy

  1. [root@haproxy ~]# yum -y install haproxy
  2. [root@haproxy ~]# rpm -ql haproxy
  3. [root@haproxy ~]# iptables -F
  4. [root@haproxy ~]# setenforce 0
  5. [root@haproxy ~]# systemctl enable haproxy
  6. [root@haproxy ~]# cp /etc/haproxy/haproxy.cfg{,.bak}

配置HAProxy代理

  1. [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
  2. frontend myweb *:80
  3. rspadd X-Via:\ HAProxy-1
  4. rspidel Server.*
  5. acl static path_end .jpg .jpeg .png .gif .txt .html
  6. acl static path_beg -i /images /static
  7. use_backend staticsrvs if static
  8. default_backend dynsrvs
  9. backend dynsrvs
  10. balance uri
  11. option forwardfor header X-Client
  12. server dynsrv1 172.16.252.92:80 check cookie dynsrv1
  13. server dynsrv2 172.16.252.92:8080 check cookie dynsrv2
  14. hash-type consistent
  15. backend staticsrvs
  16. option forwardfor header X-Client
  17. balance uri
  18. server staticsrv1 172.16.252.67:80 check
  19. server staticsrv2 172.16.252.67:8080 check
  20. hash-type consistent
  21. listen status
  22. bind *:9009
  23. acl auth_admin src 172.16.251.196
  24. stats enable
  25. stats uri /myhaproxy?status
  26. stats realm HAProxy\ Admin\ Area
  27. stats auth admin:admin
  28. stats admin if auth_admin
  29. [root@haproxy ~]# systemctl restart haproxy

测试HAProxy的状态页

http://172.16.252.82:9009/myhaproxy?status

Varnish

  1. [root@varnish ~]# yum -y install varnish
  2. [root@varnish ~]# iptables -F
  3. [root@varnish ~]# setenforce 0
  4. [root@varnish ~]# vim /etc/varnish/varnish.params
  5. VARNISH_LISTEN_PORT=80 \\监听端口为80,默认为6081
  6. VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 \\监听管理接口的IP,默认为本机
  7. VARNISH_ADMIN_LISTEN_PORT=6082 \\管理接口的端口,默认为6082
  8. VARNISH_SECRET_FILE=/etc/varnish/secret \\认证密码文件
  9. #DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300" \\定义运行时参数
  10. [root@varnish ~]# vim /etc/varnish/default.vcl
  11. import directors; # 导入负载均衡模块
  12. probe healthchk { # 配置健康状态检查
  13. .url = "/.healthchk.html"; # 检查状态检查的URL
  14. .timeout = 2s; # 超时时间
  15. .interval = 2s;# 2秒检查一次
  16. .window = 8; # 一共检查的次数
  17. .threshold = 5; # 如果大于4次则为健康
  18. }
  19. # Default backend definition. Set this to point to your content server.
  20. backend imgsrv1 { # 配置后端主机
  21. .host = "172.16.252.67";
  22. .port = "80";
  23. .probe = healthchk;
  24. }
  25. backend imgsrv2 { # 配置后端主机
  26. .host = "172.16.252.67";
  27. .port = "8080";
  28. .probe = healthchk;
  29. }
  30. sub vcl_init { # 初始化负载均衡
  31. new imgsrvs = directors.round_robin();
  32. imgsrvs.add_backend(imgsrv1);
  33. imgsrvs.add_backend(imgsrv2);
  34. }
  35. sub vcl_recv {
  36. if (req.url ~ "(?i)\.(jpg|jpeg|png|gif|svg|txt|html|css|js)$") {
  37. set req.backend_hint = websrvs.backend();
  38. }
  39. if (req.restarts == 0) {
  40. if (req.http.X-Fowarded-For) {
  41. set req.http.X-Forwarded-For = req.http.X-Forwarded-For + "," + client.ip;
  42. } else {
  43. set req.http.X-Forwarded-For = client.ip;
  44. }
  45. }
  46. sub vcl_deliver {
  47. if (obj.hits > 0) {
  48. set resp.http.X-Cache = " Hit via " + server.ip;
  49. } else {
  50. set resp.http.X-Cache = " Miss via " + server.ip;
  51. }
  52. }
  53. [root@varnish ~]# systemctl start varnish

修改HAproxy配置文件,使HAproxy调用Varnish服务器

  1. [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
  2. backend staticsrvs
  3. option forwardfor header X-Client
  4. balance uri
  5. server staticsrv1 172.16.252.100:80 check
  6. hash-type consistent
  7. [root@haproxy ~]# systemctl restart haproxy

访问测试

http://172.16.252.82/blog/



HAproxy+varnish动静分离部署wordpress的更多相关文章

  1. HAproxy指南之haproxy实现动静分离(案例篇)

    HAproxy指南之haproxy实现动静分离(案例篇) 转自   https://blog.51cto.com/blief/1751806   实际应用环境中,往往需要根据业务请求将相关不同请求跳转 ...

  2. LNMP下动静分离部署phpmyadmin软件包

    LNMP环境肯定是先要配置好的.可以参考我之前的博客.那我们直接进行配置,我这里使用了三台机器进行动静分离部署,第一台负责nginx反向代理,第二台负责php-fpm应用程序以及mariadb的服务器 ...

  3. HAProxy实现动静分离和负载均衡

    由于电脑配置渣,带不动多台虚拟机,所以采用httpd虚拟主机的方式来实现 1 2 3 CentOS 6.7 httpd: 2.2.15 HAProxy: 1.5.4 主机规划 1 2 3 4 5 - ...

  4. Varnish动静分离配置示例

    动静分离 [root@varnish ~]# vim /etc/varnish/default.vclvcl 4.0;backend web { .host = "192.168.30.15 ...

  5. lamp的动静分离部署

    一.lamp分离部署工作图 二.LAMP的安装与配置 1.环境准备 2.对 PHP 服务器进行部署 #以下为安装PHP及其依赖 [root@php ~ ]# .tar.gz -C /usr/src [ ...

  6. keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)

    haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...

  7. HAProxy(三):Keeplived+HAProxy搭建高可用负载均衡动静分离架构基础配置示例

    一.安装环境 1.软件版本 HAProxy:1.5.18 Keepalived:1.3.5 Nginx:1.12.2 PHP:7.2 系统版本:CentOS 7.4 2.IP分配与架构图 3.安装软件 ...

  8. Haproxy之负载均衡功能、基于cookie的session持久、haproxy自带的健康页面及其动静分离的实现

    实验前提: 1.本次实验是在Centos 7.4(64bit)系统上完成的.2.实验前确保每台服务器时间同步3.本次实验有3台主机,其中haproxy作为反向代理地址为192.168.31.43,后面 ...

  9. 19.Tomcat多实例部署及负载均衡、动静分离

    Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...

随机推荐

  1. Python序列化和反序列化

    Python序列化和反序列化 通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功 ...

  2. VMware的安装和使用

    注:内容系兄弟连Linux教程(百度传课:史上最牛的Linux视频教程)的学习笔记. VMware的安装和使用 1. 虚拟机的安装 这里安装虚拟机VMware10,下载安装程序,双击安装-->为 ...

  3. direct-path插入方式提升性能的分析

    1.传统串行insert方式 常见的insert方式有两种: (1)      insert into table_name values(....) (2)      insert into tar ...

  4. gitlab+jenkins持续集成(一)

    1. 环境:CentOS7.0,jdk-8u91-linux-x64.rpm,jenkins 2.7.4 ,gitlab 9.2.2 2.    安装jdk,jenkins     (rpm -ivh ...

  5. 字符串常用-----atof()函数,atoi()函数

    头文件:#include <stdlib.h>函数 atof() 用于将字符串转换为双精度浮点数(double),其原型为:double atof (const char* str);at ...

  6. akoj-1369 贪吃蛇

    贪吃蛇 Time Limit:1000MS Memory Limit:65536K Total Submit:9 Accepted:2 Description 有童年的孩子都玩过这个经典游戏,不过这里 ...

  7. kickstart文件详解

    kickstart自动应答文件选项非常多,以下只说明CentOS 6下几个常用的可能用到的选项.另外,CentOS 6和CentOS 7的选项有不小区别,所以请注意使用,可以查看官方安装文档. Cen ...

  8. [bzoj 2438][中山市选2011]杀人游戏 概率+tarjan

    考试的时候想了很多,不知道它那个概率究竟是怎么算..没想到能蒙30分.rp爆发hhh 题解转自不知道哪里来的老师发的(代码出自自己). 实际上警察就是两种结果——查到犯人或死亡,而死亡事件一定是包含在 ...

  9. 【复制】【编码】MySQL复制中的编码问题

    编码背景知识 Latin-1,全称ISO 8859-1 Latin 1 对ASCII的拉丁语扩展 向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x8 ...

  10. owncloud存储云服务搭建

    owncloud是一款开源的存储云,用php写的,其作用可以像百度网盘那样存放文件到这个云当中, 只要能连上网,手机,平板,电脑都可以从中下载或者上传文件,用起来非常还不错,部署的过程也很简单,废话不 ...