阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于Keepalived+Haproxy+Varnish+LNMP企业级架构实现

183次阅读
没有评论

共计 8851 个字符,预计需要花费 23 分钟才能阅读完成。

实现基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构

原理:缓存,又称加速器,用于加速运行速度较快的设备与较慢设备之间的通信。基于程序的运行具有局部性特征其能实现加速的功能
基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

一、环境准备

 

1.1 相关配置

机器名称 IP 配置 服务角色 备注
haproxy-server-master VIP:172.17.120.120 RIP:172.17.66.66 负载均衡器主服务器 配置 keepalived
haproxy-server-backup VIP:172.17.120.120 RIP:172.17.251.66 负载均衡器从服务器 配置 keepalived
varnish 192.168.37.111 缓存服务器 开启代理功能
rs01 192.168.37.222 后端服务器 开启 lnmp 的 web 服务
rs02 192.168.37.100 后端服务器 开启 lnmp 的 web 服务

 

1.2 安装服务

我们需要在相应的机器上安装我们的服务:
1)haproxy-server-master&haproxy-server-backup 上:

    yum install haproxy -y
    yum install keepalived -y

2)varnish 上:
varnish 服务器请用 CentOS7 来做。

    yum install varnish -y

3)rs01&rs02 上:
安装配置 LNMP。详情见——Nginx 详解以及 LNMP 的搭建  http://www.linuxidc.com/Linux/2017-11/148576.htm

 

1.3 关闭防火墙及 selinux

    iptables -F && setenforing


本步骤完成。

二、配置 Haproxy

我们需要把两个机器的 Haproxy 都设置好。我们去修改一下 Haproxy 的配置文件——/etc/haproxy/haproxy.cfg
global 段和 default 段都是设置好的,我们就不需要修改,下面是我们需要修改的部分:
1)frontend 段

frontend  web
        bind    *:80
        default_backend         varnish-server

2)backend 段

backend varnish-server
    balance     roundrobin
    server  varnishsrv 192.168.37.111:6081 check inter 3000 rise 3 fall 5

3)listen 段

listen admin
        bind :9527
        stats enable
        stats uri  /haproxyadmin
        stats auth admin:admin
        stats refresh 20s
        stats admin if TRUE

第一台机器设置好了以后,直接使用 scp 命令发到第二台机器即可。
然后把两台机器的服务都开启:

    service haproxy start

本步骤完成。

三、配置 keepalived

 

3.1 配置 haproxy-server-master(主服务器)

配置文件为/etcc/keeplalived/keepalived.conf,我们编辑以下三段即可:
1)全局段——设置发送邮件

global_defs {
   notification_email {root@localhost}
   notification_email_from root@keer.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keepalived_haproxy
}

2)编辑健康监测脚本
该脚本作用是对 haproxy 进行健康监测,每隔 2s 监测一次 haproxy 进程。

vrrp_script chk_haproxy {script "killall -0 haproxy"
        interval 2
        fall 2
        rise 2
        weight -4
}

3)定义主从和 VIP

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 170
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {172.17.120.120
    }
    track_script {chk_haproxy}
}

 

3.2 配置 haproxy-server-backup(从服务器)

从服务器和主服务器的配置很是相似,我们可以直接使用 scp 命令把主服务器的配置文件拷过来,然后,我们只需要把第二段删掉,同时修改一下第三段的主从和优先级即可:

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 170
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {172.17.120.120
    }
}

本步骤完成。

构建高可用集群 Keepalived+Haproxy 负载均衡  http://www.linuxidc.com/Linux/2016-12/138917.htm

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)http://www.linuxidc.com/Linux/2017-03/141614.htm

CentOS 7 下 Keepalived + HAProxy 搭建配置详解  http://www.linuxidc.com/Linux/2017-03/141593.htm

HAproxy 实现反向代理和负载均衡  http://www.linuxidc.com/Linux/2016-12/138749.htm

HAProxy+Keepalived 实现高可用负载均衡 http://www.linuxidc.com/Linux/2016-06/132225.htm

使用 HAProxy 配置 HTTP 负载均衡器 http://www.linuxidc.com/Linux/2015-01/112487.htm

Ubuntu 16.04 下安装 HAProxy 1.5.11 做 tcp 负载均衡 http://www.linuxidc.com/Linux/2016-06/132689.htm

CentOS 7.2 部署 Haproxy 1.7.2  http://www.linuxidc.com/Linux/2017-10/147553.htm

HAproxy 的详细介绍:请点这里
HAproxy 的下载地址:请点这里

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/149009p2.htm

四、配置 Varnish 

4.1 修改 Management 进程配置文件

Management 进程的配置文件为/etc/varnish/varnish.params。我们先来修改一下这个文件,主要是修改端口和缓存类型及大小:

    VARNISH_ADMIN_LISTEN_PORT=6082
    VARNISH_STORAGE="file,/data/cache,1G"

基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

 

4.2 修改 Varnish 总配置文件

Varnish 的总配置文件为/etc/varnish/default.vcl,我们来修改一下这个配置文件:
1)第一段
① 定义一个健康监测:

vcl 4.0;        # 指定版本
import directors;       # 加载后端的轮询模块
probe backend_healthcheck {# 设置名为 backend_healthcheck 的健康监测
    .url = "/index.html";
    .window = 5;      # 窗口
    .threshold = 2;   # 门槛
    .interval = 3s;
    .timeout  = 1s;
}

② 设置后端 server:

backend web1 {.host = "192.168.37.222";
    .port = "80";
    .probe = backend_healthcheck;
}
backend web2 {.host = "192.168.37.100";
    .port = "80";        
    .probe = backend_healthcheck;
}

③ 配置后端集群事件

sub vcl_init {new img_cluster = directors.round_robin();
    img_cluster.add_backend(web1);
    img_cluster.add_backend(web2);
}

acl purgers {# 定义可访问来源 IP, 权限控制
        "127.0.0.1";
        "172.17.0.0"/16;
}

2)第二段——定义引擎
基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现
① 定义 vcl_recv 引擎
定义不认识的头部请求直接扔后端的 pass

sub vcl_recv {if (req.method == "GET" && req.http.cookie) {return(hash);    //处理完recv 引擎,给下一个 hash 引擎处理
    }
    if (req.method != "GET" &&
        req.method != "HEAD" &&
        req.method != "PUT" &&
        req.method != "POST" &&
        req.method != "TRACE" &&
        req.method != "OPTIONS" &&
        req.method != "PURGE" &&
        req.method != "DELETE") {return (pipe);   //除了上边的请求头部,通过通道直接扔后端的 pass
    }

定义 index.php 通过特殊通道给后端的 server,不经过缓存

    if (req.url ~ "index.php") {return(pass);
    }

定义删除缓存的方法

    if (req.method == "PURGE") {//PURGE 请求的处理的头部,清缓存
        if (client.ip ~ purgers) {return(purge);
        }
    }

为发往后端主机的请求添加 X -Forward-For 首部

    if (req.http.X-Forward-For) {// 为发往后端主机的请求添加 X -Forward-For首部
        set req.http.X-Forward-For = req.http.X-Forward-For + "," + client.ip;
    } else {set req.http.X-Forward-For = client.ip;
    }
        return(hash);
}

② 定义 vcl_hash 引擎,后没有定义 hit 和 Miss 的路径,所以走默认路径

sub vcl_hash {hash_data(req.url);
}

③ 定义要缓存的文件时长

sub vcl_backend_response {// 自定义缓存文件的缓存时长,即 TTL 值
    if (bereq.url ~ "\.(jpg|jpeg|gif|png)$") {set beresp.ttl = 30d;
    }
    if (bereq.url ~ "\.(html|css|js)$") {set beresp.ttl = 7d;
    }
    if (beresp.http.Set-Cookie) {// 定义带 Set-Cookie 首部的后端响应不缓存,直接返回给客户端
    set beresp.grace = 30m;  
        return(deliver);
    }
}

④ 定义 deliver 引擎

sub vcl_deliver {if (obj.hits > 0) {//为响应添加 X -Cache 首部,显示缓存是否命中
        set resp.http.X-Cache = "HIT from" + server.ip;
    } else {set resp.http.X-Cache = "MISS";
    }
        unset resp.http.X-Powered-By;   //取消显示 php 框架版本的 header 头
        unset resp.http.Via;   //取消显示 varnish 的 header 头
}


本步骤完成。

五、开启服务的顺序

1)先开启后端 server 事先搭建好的 lnmp web 服务

    systemctl start nginx
    systemctl start php-fpm
    systemctl start mariadb

2)再开启 varnish 缓存服务器

    service varnish start

3)开启主从的 keepalived,提供 VIP

    service keepalived start

4)开启 haproxy 服务

    service haproxy start

本步骤完成。

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

Varnish Cache 的架构笔记 http://www.linuxidc.com/Linux/2013-10/91016.htm

CentOS 5.8 下 Varnish-2.1.5 的安装配置 http://www.linuxidc.com/Linux/2013-09/89916.htm

RedHat 脚本改用 CentOS 源更新安装 Nginx、PHP 5.3、Varnish http://www.linuxidc.com/Linux/2012-07/65801.htm

利用 Varnish 构建 Cache 服务器笔记 http://www.linuxidc.com/Linux/2012-07/65234.htm

缓存服务 Varnish 安装配置 http://www.linuxidc.com/Linux/2012-07/65228.htm

Varnish 编译安装所需准备 http://www.linuxidc.com/Linux/2012-07/65230.htm

Linux 下 Varnish 缓存的配置优化 http://www.linuxidc.com/Linux/2012-03/56435.htm

Varnish 的详细介绍:请点这里
Varnish 的下载地址:请点这里

实现基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构

原理:缓存,又称加速器,用于加速运行速度较快的设备与较慢设备之间的通信。基于程序的运行具有局部性特征其能实现加速的功能
基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

一、环境准备

 

1.1 相关配置

机器名称 IP 配置 服务角色 备注
haproxy-server-master VIP:172.17.120.120 RIP:172.17.66.66 负载均衡器主服务器 配置 keepalived
haproxy-server-backup VIP:172.17.120.120 RIP:172.17.251.66 负载均衡器从服务器 配置 keepalived
varnish 192.168.37.111 缓存服务器 开启代理功能
rs01 192.168.37.222 后端服务器 开启 lnmp 的 web 服务
rs02 192.168.37.100 后端服务器 开启 lnmp 的 web 服务

 

1.2 安装服务

我们需要在相应的机器上安装我们的服务:
1)haproxy-server-master&haproxy-server-backup 上:

    yum install haproxy -y
    yum install keepalived -y

2)varnish 上:
varnish 服务器请用 CentOS7 来做。

    yum install varnish -y

3)rs01&rs02 上:
安装配置 LNMP。详情见——Nginx 详解以及 LNMP 的搭建  http://www.linuxidc.com/Linux/2017-11/148576.htm

 

1.3 关闭防火墙及 selinux

    iptables -F && setenforing


本步骤完成。

二、配置 Haproxy

我们需要把两个机器的 Haproxy 都设置好。我们去修改一下 Haproxy 的配置文件——/etc/haproxy/haproxy.cfg
global 段和 default 段都是设置好的,我们就不需要修改,下面是我们需要修改的部分:
1)frontend 段

frontend  web
        bind    *:80
        default_backend         varnish-server

2)backend 段

backend varnish-server
    balance     roundrobin
    server  varnishsrv 192.168.37.111:6081 check inter 3000 rise 3 fall 5

3)listen 段

listen admin
        bind :9527
        stats enable
        stats uri  /haproxyadmin
        stats auth admin:admin
        stats refresh 20s
        stats admin if TRUE

第一台机器设置好了以后,直接使用 scp 命令发到第二台机器即可。
然后把两台机器的服务都开启:

    service haproxy start

本步骤完成。

三、配置 keepalived

 

3.1 配置 haproxy-server-master(主服务器)

配置文件为/etcc/keeplalived/keepalived.conf,我们编辑以下三段即可:
1)全局段——设置发送邮件

global_defs {
   notification_email {root@localhost}
   notification_email_from root@keer.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keepalived_haproxy
}

2)编辑健康监测脚本
该脚本作用是对 haproxy 进行健康监测,每隔 2s 监测一次 haproxy 进程。

vrrp_script chk_haproxy {script "killall -0 haproxy"
        interval 2
        fall 2
        rise 2
        weight -4
}

3)定义主从和 VIP

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 170
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {172.17.120.120
    }
    track_script {chk_haproxy}
}

 

3.2 配置 haproxy-server-backup(从服务器)

从服务器和主服务器的配置很是相似,我们可以直接使用 scp 命令把主服务器的配置文件拷过来,然后,我们只需要把第二段删掉,同时修改一下第三段的主从和优先级即可:

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 170
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {172.17.120.120
    }
}

本步骤完成。

构建高可用集群 Keepalived+Haproxy 负载均衡  http://www.linuxidc.com/Linux/2016-12/138917.htm

HAproxy 的基本配置(负载均衡 + 日志独立 + 动静分离 + 读写分离)http://www.linuxidc.com/Linux/2017-03/141614.htm

CentOS 7 下 Keepalived + HAProxy 搭建配置详解  http://www.linuxidc.com/Linux/2017-03/141593.htm

HAproxy 实现反向代理和负载均衡  http://www.linuxidc.com/Linux/2016-12/138749.htm

HAProxy+Keepalived 实现高可用负载均衡 http://www.linuxidc.com/Linux/2016-06/132225.htm

使用 HAProxy 配置 HTTP 负载均衡器 http://www.linuxidc.com/Linux/2015-01/112487.htm

Ubuntu 16.04 下安装 HAProxy 1.5.11 做 tcp 负载均衡 http://www.linuxidc.com/Linux/2016-06/132689.htm

CentOS 7.2 部署 Haproxy 1.7.2  http://www.linuxidc.com/Linux/2017-10/147553.htm

HAproxy 的详细介绍:请点这里
HAproxy 的下载地址:请点这里

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-11/149009p2.htm

六、测试

1)配置完成后,client 访问,http://172.17.120.120/,成功访问 web
基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

2)访问 http://172.17.120.120:9527/haproxy?admin,haproxy 的 web 监测页面,正常
基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

3)当主 haproxy 宕机时,VIP 自动漂移到从上,且服务正常使用;
在主 haproxy 上,server stop haproxy,VIP 会漂到从上。
基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

4)varnish 缓存服务器上,确实生成了缓存文件
基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现
F12打开网页的调试页面,查看确实缓存了:
 基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

5)测试清缓存的功能,PURGE 发送头部信息
基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

6)后端有一台 server 宕机,服务照常使用
我们停掉一台后端服务器:

    systemctl stop nginx

基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现
然后我们再去浏览器查看一下:
 基于 Keepalived+Haproxy+Varnish+LNMP 企业级架构实现

bing~ 实验完成


以上~ 如果有不足之处还请大家多多指教喏٩(๑>◡<๑)۶ 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/149009.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8851字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中