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

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

472次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7992207
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...