haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点

一、实验环境

五台虚拟机

  • haproxy-1:搭建haproxy和keepalived服务,ip地址:192.168.11.176

  • haproxy-2:搭建haproxy和keepalived服务,ip地址:192.168.11.172

  • varnish服务器ip地址:192.168.11.173

  • wordpress静态服务器:搭建httpd,ip地址:192.168.11.177

  • wordpress动态服务器,搭建httpd+php+mariadb,ip地址:192.168.11.178

实验目的

通过haproxy访问到后台网站,并且varnish为网站提供缓存,提升网站性能。

实验拓扑:此处虚拟机数量不够,就不采用动静分离集群了,而是分别采用一台虚拟机部署:

二、实验步骤

wordpress配置

  • 动态服务器配置:

    1. 安装httpd,mariadb,php服务,此处php作为httpd的模块进行动态php文件处理:

      yum install -y httpd mariadb-server php php-mysql php-mbstring
    2. 上传wordpress到/var/www/html路径下并修改属主属组为apache,此处不做详细演示;

  • 静态服务器配置:

    1. 安装httpd服务并上传wordpress到/var/www/html,修改属主属组为apache;

varnish配置

  1. 安装varnish服务并修改varnish的配置文件default.vcl,修改内容如下:

    vcl 4.0;      #声明为varnish4.0
    import directors; #调用多个后端主机做集群# probe health_check { #定义健康状态检测机制#
    .url = "/.health_check.html"; #定义检测文件#
    .window = 5; #定义一共检测几次#
    .threshold = 3; #定义检测几次失败则认为后端主机失效#
    .interval = 2s; #每隔2秒检测一次#
    .timeout = 3s; #连接超时时长为3秒#
    } backend dynamic { #定义后端动态主机#
    .host = "192.168.11.178";
    .port = "80";
    .probe = health_check;
    } backend static { #定义前端主机#
    .host = "192.168.11.177";
    .port = "80";
    .probe = health_check;
    } sub vcl_recv {
    # Happens before we check if we have this in cache already.
    #
    # Typically you clean up the request here, removing cookies you don't need,
    # rewriting the request, etc.
    if (req.url ~ "(?i).*php.*") { #当访问的url包括php,则转到动态服务器,否则所有请求转到静态服务器,实现动静分离#
    set req.backend_hint = dynamic;
    } else {
    set req.backend_hint = static;
    }
    if (req.url ~ "(?i)(register|login)$") { #如果请求地址结尾为register或者login,注册和登录页面,则不查缓存,,直接从后端服务器获取内容#
    return (pass);
    } }
    sub vcl_backend_response {
    # Happens after we have read the response headers from the backend.
    #
    # Here you clean the response headers, removing silly Set-Cookie headers
    # and other mistakes your backend does.
    #当后端服务器回复给varnish的响应如果不包含公共缓存信息,而且请求为jpg等静态资源,则卸载cookie信息并缓存资源1小时#
    if (beresp.http.cache-control !~ "s-maxage") {
    if (bereq.url ~ "(?i)\.(jpg|jpeg|png|gif|css|js|xml)$") {
    unset beresp.http.Set-Cookie;
    set beresp.ttl = 3600s;
    }
    }
    #当varnish请求后端服务器的url包括php,则卸载cookie信息并缓存资源1小时#
    if (bereq.url ~ "(?i).*php.*") {
    unset beresp.http.Set-Cookie;
    set beresp.ttl = 3600s;
    }
    } sub vcl_deliver {
    # Happens when we have all the pieces we need, and are about to send the
    # response to the client.
    #
    # You can do accounting or modifying the final object here.
    if (obj.hits>0) {
    set resp.http.X-Cache = "HIT via "+server.ip;
    } else {
    set resp.http.X-Cache = "MISS via "+server.ip;
    }
    }

    注意:

    varnish在探测到请求和响应报文头部有cookie信息的时候是不缓存的,所以缓存命中率会非常低。这就是为什么要卸载php页面和jpg等动态资源cookie的原因。

  2. 然后通过varnishadm登录varnish并加载配置项,用ab进行压测会发现启用和不启用缓存的性能差出数倍,而且启用和不启用缓存后端服务器压力也差出数倍;

haproxy配置

  1. 修改/etc/haproxy/haproxy.cfg配置文件,内容如下:

    global        #全局配置#
    log 127.0.0.1 local2 #log记录到rsyslog服务器,此处需要在rsyslog进行配置#
    chroot /var/lib/haproxy #把haproxy禁锢到/var/lib/haproxy,防止haproxy被劫持后破坏系统
    pidfile /var/run/haproxy.pid #pid文件位置#
    maxconn 4000 #每个进程最大连接数为4000#
    user haproxy
    group haproxy
    daemon #以服务方式运行#
    stats socket /var/lib/haproxy/stats defaults #默认配置#
    mode http #默认为http七层代理#
    log global #日志采用global配置#
    option httplog #以http方式记录日志#
    option dontlognull #不记录健康状态检测日志#
    option http-server-close
    option forwardfor except 127.0.0.0/8 #传递客户端ip到后端服务器,需要在后端服务器修改日志样式#
    option redispatch
    retries 3 #最大尝试3次连接#
    timeout http-request 10s #等待http请求时间为10s#
    timeout queue 1m #
    timeout connect 10s #等待建立连接时间为10s#
    timeout client 1m #等待客户端连接时间#
    timeout server 1m #等待服务端连接时间#
    timeout http-keep-alive 10s #长连接时长#
    timeout check 10s #检测间隔#
    maxconn 3000 listen stats #定义状态页#
    bind *:9000
    stats enable
    stats auth admin:admin
    stats uri /admin?stats #定义stats url路径#
    stats refresh 30s
    stats realm "status-page"
    stats hide-version #隐藏版本信息#
    stats admin if TRUE #开启后端管理功能# frontend web #定义前端服务器名为web#
    bind *:80
    default_backend appsrvs #绑定的后端服务器# backend appsrvs #定义后端服务器名为appsrvs#
    server static 192.168.11.173:80 check #定义后端服务器,static为名字,check表示进行健康状态检测,也可以添加其他值进来,如检测间隔等信息#
  2. 状态页面如下:

keepalived配置

  1. 修改/etc/keepalived/keepalived.conf配置文件,内容如下:

    ! Configuration File for keepalived
    
    global_defs {
    notification_email {
    acassen@firewall.loc
    failover@firewall.loc
    sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id node1
    vrrp_mcast_group4 224.0.115.15
    } vrrp_script chk_haproxy {
    script "pkill -0 haproxy && exit 0 || exit 1"
    interval 1
    weight -5
    fall 2
    rise 1
    } vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 10
    priority 96
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass hello
    }
    virtual_ipaddress {
    192.168.11.200 label ens33:0
    }
    track_script {
    chk_haproxy
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault" }
  2. 写notify脚本,内容如下:

    #!/bin/bash
    # contact='root@localhost' notify() {
    local mailsubject="$(hostname) to be $1,vip floating."
    local mailbody="$(date + '%F %T'):vrrp transition,$(hostname) changed to be $1."
    echo "$mailbody" | mail -s "$mailsubject" $contact
    } case $1 in
    master)
    notify master;;
    backup)
    notify backup;;
    fault)
    notify fault;;
    *)
    echo "Usage: $(basename $0) {master|backup|fault}"
    exit 1;;
    esac
  3. 定义的haproxy的虚拟ip为192.168.11.200,此时任何一个haproxy主机或者haproxy服务故障都不会影响网站的正常访问,通过192.168.11.200即可访问到网站。此时实验配置成功,而且网站通过varnish可承载大量并发,但是仍有问题,前台haproxy为高可用,但是后台varnish和动静服务器均是单点,为单点故障,所以还需要进一步完善。

网站访问流程为:client –> 前端MASTER haproxy –> varnish –> 后端动静服务器。

原文链接:https://www.cnblogs.com/chenghuan/articles/7533110.html

其他参考:

Keepalived高可用+HAproxy实现Nginx+wordpress动静分离:https://blog.51cto.com/tianrandai01/1927305?utm_source=oschina-app
HAProxy+Varnish动静分离部署WordPress:https://www.jianshu.com/p/16f65c538db7
haproxy实现Discuz!动静分离:https://blog.51cto.com/9528du/1557181

keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)的更多相关文章

  1. 4、keepalived高可用nginx负载均衡

    keepalived: HTTP_GET        //使用keepalived获取后端real server健康状态检测 SSL_GET(https)  //这里以为这后端使用的是http协议 ...

  2. lvs+keepalived 高可用及负载均衡

    一.环境准备 VIP:10.18.43.30 dr1:10.18.43.10 dr2:10.18.43.20 web1:10.18.43.13 web2:10.18.43.14 结构图 (一).预处理 ...

  3. nginx+keepalived高可用web负载均衡

    一:安装环境 准备2台虚拟机,都安装好环境 centos 7keepalived:vip: 192.168.1.112192.168.1.110 nginxip 192.168.1.109 maste ...

  4. Keepalived+HAProxy实现RabbtiMQ高可用的负载均衡

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在 ...

  5. 高可用与负载均衡(7)之聊聊Lvs-DR+Keepalived的解决方案

    今天直接开门见山了,直接说配置吧.首先介绍下我这的环境 如有问题,请联系我18500777133@sina.cn IP 安装软件 192.168.1.7 lvs1+keepalived master角 ...

  6. 搭建Keepalived+LNMP架构web动态博客 实现高可用与负载均衡

    环境准备: 192.168.193.80  node1 192.168.193.81 node2 关闭防火墙 [root@node1 ~]# systemctl stop firewalld #两台都 ...

  7. Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡

    文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...

  8. Keepalived + Nginx 实现高可用 Web 负载均衡

    一.Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前 ...

  9. Mycat - 高可用与负载均衡实现,满满的干货!

    前言 开心一刻 和朋友去吃小龙虾,隔壁桌一个小女孩问妈妈:"妈妈,小龙虾回不了家,它妈妈会不会着急?" 她妈妈愣住了,我扒虾的手停下了,这么善良的问题,怎么下得了口.这是老板急忙过 ...

随机推荐

  1. idea Maven 一键 mvn clean package

    文章目录 方法一 方法二 方法一 方法二

  2. Nginx网络架构实战学习笔记(四):nginx连接memcached、第三方模块编译及一致性哈希应用

    文章目录 nginx连接memcached 第三方模块编译及一致性哈希应用 总结 nginx连接memcached 首先确保nginx能正常连接php location ~ \.php$ { root ...

  3. kafka 简单安装以及java小demo

    文章目录 第1步,下载解压 kafka: 第2步,运行 kafka: 第3步,创建topic 第4步,生产者发送消息 第5步,消费者接收消息 使用 java 客户端 kafka 0.8.0版本demo ...

  4. 查看mysql慢日志,进行优化

    MySQL 慢查询的相关参数解释:slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭. slow_query_log    :是否开启慢查询日志,1表示开启,0表示关闭. lo ...

  5. Hibernate入门教程(一):入门示例(Myeclipse)

    ●项目结构 ●本项目所用Hibernate版本为5.4.5.Final,导入jar只需lib目录下的required和MySQL所需的jar驱动 1.导入相关jar包(配置构建路径) 说明:本人已将所 ...

  6. python+tushare获取沪深港股通持股明细

    接口:hk_hold 描述:获取沪深港股通持股明细,数据来源港交所. 限量:单次最多提取3800条记录,可循环调取,总量不限制 积分:用户积120积分可调取试用,2000积分可正常使用,单位分钟有流控 ...

  7. offset 、 client 和 scroll - PC端网页特效

    1.元素偏移量  offset 系列 1.1 offset 就是偏移量,使用 offset 系列相关属性可以 动态 得到该元素的位置(偏移).大小等. 注意: 1.获得元素距离带有定位父元素的位置 2 ...

  8. shell read变量

  9. 【CodeVS】 纯OI题

    [1203] 判断浮点数是否相等 [青铜 Bronze] 我们一般认为两个浮点数相等,当且当他们之间的误差不超过1e-8. /* 作者:Wanying 题目:p1203 判断浮点数是否相等 */ /* ...

  10. Python中 将数据插入到Word模板并生成一份Word

    搬运出处: https://blog.csdn.net/DaShu0612/article/details/82912064