前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Keepalived的Nginx高可用实践

基于Keepalived的Nginx高可用实践

作者头像
用户1456517
发布2019-03-05 16:04:26
5660
发布2019-03-05 16:04:26
举报
文章被收录于专栏:芝麻实验室芝麻实验室
  • 环境准备
    • VIP: 172.18.59.100
    • Master: 172.18.253.123/192.168.26.133
    • Slave : 172.18.253.239/192.168.26.134
    • Node 1: 192.168.26.136
    • Node 2: 192.168.26.132

配置后端集群

  • 分别在Node 1 和Node 2上执行如下操作(为了检验试验效果,2个节点的网页内容不同)
代码语言:javascript
复制
# yum -y install httpd
# systemctl enable httpd
# echo "node 1" > /var/www/html/index.html
# systemctl start httpd

配置前端Nginx反代

  • 分别在Master和Slave上执行如下操作
代码语言:javascript
复制
# yum -y install nginx #在Node2上执行类似操作
# systemctl enable nginx
# echo "Nginx A" > /usr/share/nginx/html/index.html 
# vim /etc/nginx/nginx.conf
 19       upstream webser{
 20         server 192.168.26.136 weight=1;
 21         server 192.168.26.132 weight=2;
 22     }
 23         
 24     server {
 25         listen 80 default_server;
 26         server_name _;
 27         root /usr/share/nginx/html;
 28         location / {
 29             proxy_pass webser;
 30         }
 31     }

# nginx -t
# systemctl start nginx
  • 分别在Master和Slave上测试调度器是否工作正常
请输入图片描述
请输入图片描述

配置Keepalived

  • 在Master上执行下面的操作
代码语言:javascript
复制
# yum -y install keepalived.x86_64 
# systemctl enable keepalived.service
# cd /etc/keepalived/
# cp keepalived.conf{,.bak}
# vim keepalived.conf
! Configuration File for keepalived #类似于Bash Shell的shebang机制
global_defs {
   notification_email { #收件人列表,可有多个
     root@localhost
   }
   notification_email_from keepalived@localhost #发件人地址
   smtp_server localhost #smtp服务器
   smtp_connect_timeout 30 #超时时长
   router_id ha_cluster_1_1 #主机身份唯一标识符,同一高可用集群中必须唯一
   vrrp_skip_check_adv_addr
   vrrp_mcast_group4 224.18.0.100 #VRRP多播地址
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
 
vrrp_instance VI_1 { #虚拟路由器名称,同一高可用集群中必须唯一
    state MASTER # 当前节点在此虚拟路由器上的身份,可选值为 {MASTER:SLAVE}
    interface ens34 #该虚拟路由器在本机上所使用的物理网卡
    virtual_router_id 51 #当前虚拟路由器惟一标识,范围是0-255, 同一虚拟路由器中,该值必须相同
    priority 100 #当前物理节点在此虚拟路由器中的优先级;范围1-254
    advert_int 1 #VRRP通告间隔
    authentication {
        auth_type PASS      #通过密钥认证
        auth_pass b1acd829  #预共享密钥 可由"openssl rand -hex N"生成,仅前八位有效
    }
    virtual_ipaddress { #对外提供服务的VIP
        172.18.59.100/16 dev ens34 label ens34:0
    }
    track_interface { #对网卡设备做冗余 以备流式迁移
        ens33 weight 1
        ens34 weight 2 
    }
}
# systemctl start keepalived.service
  • 同样的,在Slave端配置Keepalived,注意,router_id state priority必须不同, virtual_router_id和预共享密钥必须相同
请输入图片描述
请输入图片描述
  • 检验VIP是否在Master生效
请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述
  • 此时会发现ping测试无法通过
请输入图片描述
请输入图片描述
  • 这是因为配置文件里的默认配置项vrrp_strict会在每一次初始化VIP对应网卡时自动在iptables中添加一条drop规则
请输入图片描述
请输入图片描述
  • 取消该默认参数
代码语言:javascript
复制
# vim keepalived.conf
请输入图片描述
请输入图片描述
代码语言:javascript
复制
# systemctl restart keepalived.service

同理,在Slave端执行上述参数操作,这里不再赘述。

测试Keepalived是否工作正常

请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述
  • 使用tcpdump抓取VRRP组播包
请输入图片描述
请输入图片描述
  • 手动暂停Keepalived服务,观察VIP是否能够平滑漂移
代码语言:javascript
复制
# systemctl stop keepalived
请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述

Nginx的高可用

  • Keepalived原生支持LVS的高可用,同时支持通过调用外部辅助脚本进行资源监控,并根据监控的结果实现动态调整。因此,可以配合简单的Bash Shell脚本实现Nginx的高可用。
代码语言:javascript
复制
# vim /etc/keepalived/keepalived.conf #以下脚本意为:当Nginx服务意外停止运行时,将每隔1s进行检测,一旦失败2次则将本机Keepalived服务的优先级降低20,反之判定失败后,如果后续检测中有1次成功,则视为成功。
请输入图片描述
请输入图片描述
  • 配置完成后,必须重启Keepalived;同理,在Slave上执行相同操作,此处不再赘述。

测试Nginx高可用性

  • 确定当前VIP在所在的节点位置
请输入图片描述
请输入图片描述
  • 访问Nginx
请输入图片描述
请输入图片描述
  • 手动暂停Nginx服务
代码语言:javascript
复制
# systemctl stop nginx
  • 查看当前tcpdumpVRRP抓包结果
请输入图片描述
请输入图片描述
  • 查看Slave节点的网络配置。此时我们发现VIP已经自动漂移Slave节点
请输入图片描述
请输入图片描述
  • 测试Web服务能够继续提供服务。如下图所示,Keepalived保证了Nginx服务的高可用性,即便Master出现宕机等意外情况,仍能继续提供Web服务
请输入图片描述
请输入图片描述
  • 当然,如果重新启动Master节点上的Nginx服务,VIP将回到Master节点
代码语言:javascript
复制
# systemctl start nginx
请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述

感谢 && 预告

  • 至此,已实现基于KeepalivedNginx的高可用实现。接下来我将主要讲一讲著名的负载均衡器--LVS的高可用实现,正如前文我说的Keepalived原生支持LVS,甚至可以说Keepalived为LVS而生。但在这之前,我将先讲讲LVS的相关概念及各种模型。笔者才疏学浅,如有描述不清的地方欢迎批评指正感谢!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/12/05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档