Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • 操作系统

  • 计算机网络

  • 数据结构和算法

  • MySQL

  • Redis

  • Nginx

    • Nginx入门之安装部署
    • Nginx高级用法总结
    • Nginx使用常见问题汇总
    • Nginx与HAProxy负载均衡比较
    • Nginx status状态详解
    • Nginx常见问题之Location优先级
    • Nginx+Keepalived搭建高可用集群
      • 集群和负载均衡
      • Keepalived高可用故障转移
      • 准备工作
      • 配置Nginx集群
      • 配置Keepalived高可用
    • Nginx实战灰度发布
    • 常见负载均衡算法
  • MongoDB

  • 其他

  • 计算机基础
  • Nginx
Ravior
2017-08-02
目录

Nginx+Keepalived搭建高可用集群

# 集群和负载均衡

使用集群是网站解决高并发的常用手段。当一台服务器的处理能力不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加服务器分担原有服务器压力。

通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。

Nginx基于反向代理可实现负载均衡,可以用Nginx的proxy和upstream实现集群的负载均衡。

# Keepalived高可用故障转移

Keepalived高可用服务是通过VRRP来实现的。在Keepalived服务工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备Backup节点自己还活着。当主节点发生故障时,无法给备节点发送心跳消息,如果备节点无法继续检测到来自主节点的心跳。就会调用自身的接管程序,接管主节点的IP资源和服务。当主节点恢复时,备节点又会释放主节点故障时自身接管的IP资源和服务,恢复到原来的备用角色。

因此在线上环境中,经常使用Nginx+Keepalived实现高可用集群的搭建。

Nginx+Keepalived

# 准备工作

至少准备两台以上服务器,例如:

  • Linux服务器A:192.168.1.106

    • 安装软件:Nginx/Keepalived
  • Linux服务器B:192.168.1.106

    • 安装软件:Nginx/Keepalived
  • Nginx安装可参考文章: https://gitlib.com/page/nginx-start.html

  • Keepalived安装可参考文章: https://gitlib.com/page/keepalived-start.html

Nginx+Keepalived

# 配置Nginx集群

Nginx按照一定的算法(权重、轮询),将请求转发到集群中一台服务器上,减轻单个服务器压力,提高系统并发量, 还可以通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器宕掉,自动将请求发送到其他应用服务器。

两台Linux服务器的Nginx配置参看如下:

upstream gitlib {
    server 192.168.1.106:8088;
    server 192.168.1.107:8088;
}

server {
    listen 80;
    server_name *.gitlib.com;

    location / {
        access_log   off;
        proxy_pass http://gitlib;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 配置Keepalived高可用

由于Keepalived只检测本机和他机Keepalived是否正常并实现VIP的漂移,而如果本机nginx出现故障不会则不会漂移VIP。所以需要编写脚本来判断本机nginx是否正常,如果发现NginX不正常,重启之。等待2秒再次校验,仍然失败则不再尝试,关Keepalived,其他主机此时会接管VIP。

Nginx检查脚本: check_nginx_pid.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
    /usr/sbin/nginxd start                #启动nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败
       service keepalived stop    
    fi
fi
1
2
3
4
5
6
7
8
9

keepalive.conf配置:

! Configuration File for keepalived

global_defs {
   notification_email {
   }
   notification_email_from ravior@gitlib.com
   smtp_server smtp.qq.com
   smtp_connect_timeout 30
   router_id nginx_master
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_nginx_status {
    script "/home/gitlib/shell/check_nginx_pid.sh" #监控脚本 
    interval 2 # 监控脚本执行时间间隔
    weight 2 # 权重
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s3
    virtual_router_id 51
    priority 10
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
      chk_nginx_status  # 调用检测脚本
    }
    virtual_ipaddress {
        192.168.1.109/24 # 设置虚拟IP
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

配置完成之后,重启Nginx/Keepalived, 即可实现双机热备。可以通过手动关闭Nginx模拟Nginx故障,观察VIP是否会出现漂移。

#Keepalived#Nginx
上次更新: 2022/12/01, 11:09:34
Nginx常见问题之Location优先级
Nginx实战灰度发布

← Nginx常见问题之Location优先级 Nginx实战灰度发布→

最近更新
01
常用游戏反外挂技术总结
11-27
02
Golang开发实践万字总结
11-11
03
Redis万字总结
10-30
更多文章>
Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式