用keepalived搭建企业级nginx高可用方案

简介: 用keepalived搭建企业级nginx高可用方案

前言


nginx高可用在生产环境中的使用比较常见,如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障,如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障,本次实验采用keepalived来实现Nginx的高可用,这种方案在国内企业中是一种比较常见的高可用方案,采用双机热备,一台服务器提供服务,另一台处于待机状态,当主服务器宕机后就接替它继续运行。


一、keepalived原理


1.1 什么是keepalived

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决单点故障问题


1.2 keepalived工作过程

Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。


然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。


优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。


二、部署过程


nginx高可用主 7-4 192.168.109.134


nginx高可用备 7-5 192.168.109.135


客户端 w7 192.168.109.200


VIP 192.168.109.100


#先将两台服务器和客户端w7防火墙关掉
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.1 nginx配置(主备相同)

#yum安装 nginx
vim /etc/yum.repos.d/nginx.repo
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1
yum install nginx -y 
systemctl start nginx
systemctl enable nginx
#主备写入不同的网页内容以便测试的时候区分服务器
#主服务器
[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# ls
50x.html  index.html
[root@localhost html]# echo "<h1>nginx test1</h1>" >index.html 
#备服务器
[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# ls
50x.html  index.html
[root@localhost html]# echo "<h1>nginx test2</h1>" >index.html




2.2 keepalived配置(主备相同)

#下载软件包
yum -y install keepalived
#修改配置文件(直接将我下面改好的复制到自己的配置文件)
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vim 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 127.0.0.1     #修改邮箱地址
   smtp_connect_timeout 30
   router_id NGINX_01       #修改主备id
   #删掉这里的四行vrrp  
}
#加入周期性检测nginx服务脚本的相关配置
vrrp_script check_nginx{
    script "/etc/keepalived/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                           #(检测脚本执行的间隔,单位是秒)
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33   #修改网卡名称
    virtual_router_id 51
    priority 100   #优先级,主不改,备改成比100小就行
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.109.100   #修改VIP地址
    }
    #添加跟踪(执行脚本)
    track_script{
        check_nginx
    }
}
#重启服务
[root@localhost keepalived]# systemctl restart keepalived.service
#备服务器下载好keepalived后,在主服务器上将脚本和keepalived配置文件传过去
[root@localhost keepalived]# scp * 192.168.109.135:`pwd`
The authenticity of host '192.168.109.135 (192.168.109.135)' can't be established.
ECDSA key fingerprint is SHA256:PLvVWFCir2fqvmTtENtRy6s3XlMimSaoeNHEa+3O2qw.
ECDSA key fingerprint is MD5:b4:76:d5:84:03:7f:b5:d8:55:0a:5d:f3:b9:12:fa:a9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.109.135' (ECDSA) to the list of known hosts.
root@192.168.109.135's password: 
check_nginx.sh                       100%  398   730.1KB/s   00:00    
keepalived.conf                      100% 1054     2.5MB/s   00:00    
keepalived.conf.bak                  100% 3598     3.1MB/s   00:00    
[root@localhost keepalived]# 
#传过去后修改三处
router_id NGINX_02 
state BACKUP
priority 90 
#然后重启服务
[root@localhost keepalived]# systemctl restart keepalived.service





2.3 检测nginx脚本

由于keepalived是通过内核转发请求判断主备服务器是否在线,而nginx是应用程序,它有进程意外退出的可能性,不涉及内核,所以nginx挂了keepalived并不能作出相应的判断来切换备服务器,这时需要使用一个脚本来实时监控nginx进程是否存在,如果不存在则重启开启,重启开启不了杀掉当前主机中的keepalived服务来实现故障切换。开启keepalived后脚本自动执行

#在/etc/keepalived目录下创建nginx检测脚本
[root@localhost keepalived]# vim check_nginx.sh
#!/bin/bash
#检测nginx是否启动了
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
      systemctl start nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived                    
      fi
fi
#给脚本执行权限
[root@localhost keepalived]# chmod +x check_nginx.sh



2.4 客户端测试



因为我这个监控脚本里面会自动启动挂断的nginx,所以我们直接将192.168.109.134服务器关掉,模拟宕机,这个时候keepalived就自动故障转移了,VIP飘到备服务器了





一套企业级生产环境的高可用方案就搭建好了


总结


本篇博客仅搭建了简单的nginx高可用方案,后期可以搭建nginx负载均衡、动静分离等等的高可用方案

目录
相关文章
|
6月前
|
监控 物联网 应用服务中间件
流媒体方案之Nginx——实现物联网视频监控项目
流媒体方案之Nginx——实现物联网视频监控项目
流媒体方案之Nginx——实现物联网视频监控项目
|
6月前
|
运维 应用服务中间件 Linux
keepalived详解(三)——keepalived与Nginx配合实战
keepalived详解(三)——keepalived与Nginx配合实战
207 1
|
3月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
116 0
|
3月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
73 1
|
3月前
|
消息中间件 负载均衡 应用服务中间件
高并发环境下的Nginx整合方案
【8月更文挑战第20天】在高并发环境下,整合Nginx代理服务器、静态文件服务器、Tomcat集群、Mycat数据库读写分离和消息队列,可以构建一个强大、灵活且可扩展的Web服务架构。
47 1
|
4月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
145 1
|
6月前
|
监控 负载均衡 应用服务中间件
Keepalive 解决nginx 的高可用问题
Keepalive 解决nginx 的高可用问题
|
5月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
6月前
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
86 2
|
6月前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
157 0