首页 > 系统相关 >keepalived双机热备方案实现Nginx高可用

keepalived双机热备方案实现Nginx高可用

时间:2024-11-23 18:58:07浏览次数:10  
标签:热备 Nginx Nginx2 Nginx1 keepalived 192.168 -- 双机

问题描述

只用一台Nginx做反向代理,如果这台Nginx出现故障(比如宕机),则服务不可用。

以下给出keepalived双机热备方案实现Nginx高可用的方法。先介绍几个概念:

高可用

高可用(High Availability)是指系统或服务能够在面对硬件故障、软件崩溃、网络问题等各种故障情况下,仍然保持正常运行或快速恢复的能力,以减少服务中断时间,确保业务连续性和数据完整性。

双机热备

指一台服务器提供服务,另一台作为备用。当一台服务器不可用时另一台就自动顶上去。

keepalived

一个开源的高可用解决方案,通过VRRP协议实现故障转移,避免单点故障导致的服务中断。

keepalived双机热备方案实现Nginx高可用的步骤

准备两台Nginx环境

安装两台Linux虚拟机,每台虚拟机安装Nginx(如何安装Nginx)

  • 192.168.52.200 (Nginx1)
  • 192.168.52.201 (Nginx2)

修改Nginx.conf, 给Nginx1,Nginx2分别添加一个简单的主页

Nginx1

    server {
        listen 80;
        server_name localhost;
        location / {
            default_type text/html;
            return 200 '<h1>welcome to Nginx1</h1>';
        }
		# ...
    }

Nginx2

    server {
        listen 80;
        server_name localhost;
        location / {
            default_type text/html;
            return 200 '<h1>welcome to Nginx2</h1>';
        }
		# ...
    }

启动Nginx

systemctl start nginx

安装并配置Keepalived

Nginx1,Nginx2都安装keepalived, 如下:

yum -y install keepalived

修改Nginx1的keepalived主配置文件/etc/keepalived/keepalived.conf

vrrp_script chk_http_port {
    script "/usr/local/bin/keepalived_check_nginx.sh" #心跳检测脚本
    interval 2 #检测脚本执行的间隔,单位是秒)
    weight 2   #权重
}

vrrp_instance VI_1 {
    state BACKUP            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33         # 指定vrrp通讯的网卡, ifconfig查下你的网卡名
    virtual_router_id 66    # 虚拟路由编号,主从要一致
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    nopreempt               # 设置为不抢占。这个配置只能在BACKUP主机上面设置
    #授权访问
    authentication {
        auth_type PASS      #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码
        auth_pass peter
    }
    track_script {
        chk_http_port       # 调用检测脚本
    }
    virtual_ipaddress {
        192.168.52.199      # 设置VIP
    }
}

Nginx2直接复用Nginx1的keepalived.conf即可

说明:

  • virtual_router_id指虚拟路由编号,主从要一致。
  • 如果需要主节点恢复后,VIP再转移到主节点,需要设置为state MASTER;
  • 如不需要抢占,可以设置为state BACKUP, 同时设置nopreempt; 对于多个从节点场景,发生故障转移后,根据priority选取MASTER节点。

编写检测脚本

编写keepalived_check_nginx.sh,判断Nginx是否启动。如果Nginx没有启动并且重启也失败,就停止keepalived服务,进行VIP转移

cmd=`ps -C nginx --no-header |wc -l`
if [ $cmd -eq 0 ];then
    systemctl start nginx
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

把脚本分别传到Nginx1和Nginx2的/usr/local/bin路径

配置防火墙

VRRP使用组播地址, 必须配置相应firewall规则或关闭firewall,否则会出现脑裂。
添加规则

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

或者直接关闭firewall

systemctl disable firewalld --now

启动keepalived,开始测试

测试Nginx1, Nginx2可以正常访问
curl 192.168.52.200
Welcome to Nginx1
curl 192.168.52.201
Welcome to Nginx2
启动Nginx1和Nginx2的keepalived
systemctl start keepalived

比如,我先启动Nginx1的keepalived,再启动Nginx2,那么在Nginx1上可以看到VIP(192.168.52.199), Nginx2查不到VIP

ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:36:d4:a9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.52.200/24 brd 192.168.52.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.52.199/32 scope global ens33
       valid_lft forever preferred_lft forever
通过VIP访问, 可以返回Nginx1的主页
curl 192.168.52.199
welcome to Nginx1
在Nginx1构造故障, 再通过VIP可以访问Nginx2的主页
# 先构造Nginx1故障
curl 192.168.52.199
welcome to Nginx2

构造故障方法,可以是先stop nginx,再mv Nginx主程序

再恢复Nginx1(重启Nginx和keepalived),访问VIP,仍返回Nginx2
curl 192.168.52.199
welcome to Nginx2

这是符合预期的,因为我们在配置文件里设置了BACKUP和nopreempt

最后构造Nginx2故障,访问VIP,可以返回Nginx1的主页
curl 192.168.52.199
welcome to Nginx1

keepalived故障转移原理概述

  • 基于VRRP(Virtual Router Redundancy Protocol)协议,通过在多个服务器之间共享一个虚拟IP地址来实现。
  • 监控到主服务器(Master)出现故障时,备份服务器(Backup)会检测到并自动接管虚拟IP,继续提供服务。
  • 这个过程对客户端是透明的,确保了服务的连续性和高可用性。

参考

【1】nginx+keepalived高可用配置笔记
【2】https://docs.nginx.com/nginx/admin-guide/high-availability/ha-keepalived/

标签:热备,Nginx,Nginx2,Nginx1,keepalived,192.168,--,双机
From: https://blog.csdn.net/pcj_888/article/details/143991675

相关文章

  • Keepalived+Mysql实现高可用配置总结
    通过本文,大家将学习到以下相关知识内容:1、什么是高可用服务2、Keepalived简介3、Keepalived常见应用场景4、Keepalived高可用故障切换原理介绍5、VRRP协议介绍6、配置实现Keepalived监控Mysql7、Keepalived配置文件介绍8、Keepalived常见问题列举一、什么是高可用服务......
  • nginx+keepalived实现高可用
    在之前的文章已经提到怎么实现keepalived的双机热备,现在我们就结合nginx来实现高可用1、nginx的部署1.1依赖安装在线安装依赖yum-yinstallgccgcc-c++pcrepcre-develzlibzlib-developensslopenssl-devel1.2nginx的安装https://nginx.org/en/download.html下载......
  • keepalived+nginx实现高可用的案例详解(主主模式)
    文章目录前言keepalived主备模式和主主模式有什么区别1.主备模式(Master-BackupMode)2.主主模式(Active-ActiveMode或DualMasterMode)主备模式vs主主模式的区别总结:环境案例实现具体步骤ngx1ngx2验证前言keepalived主备模式和主主模式有什么区别Keepali......
  • 负载均衡Keepalived+LVS
    Keepalived+LVSLVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉时,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决该问题,它不仅仅有高可用的功能,还有负载均衡的功能。在调度器上只要安装了keepalived,就不用再安装ipvsadm了,也不用去......
  • linux集群 keepalived+nginx实现高可用集群
    用keepalived配置高可用搭建高可用集群高可用集群,即“HA集群”,也常称作“双机热备”,用于关键业务。常见实现高可用的开源软件有heartbeat和keepalived,其中keepalived还有负载均衡的功能。这两个软件类似,核心原理都是通过心跳线连接两台服务器,正常情况下由一台服务器提供服务,......
  • # 高可用的并发解决方案nginx+keepalived(三)
    高可用的并发解决方案nginx+keepalived(三)一、Nginx搭建图片服务器针对任何站点,几乎都要访问图片,而一个网页里面几乎有好些张图片,这时候会占据大量tomcat连接,造成大量并发,我们可以通过Nginx配置直接访问硬盘里的图片,绕开tomcat。1、在CentOS7服务器上,创建/usr/local/im......
  • 崖山从0到1系列06-崖山数据库双机高可用环境部署
    崖山从0到1系列06-崖山数据库双机高可用环境部署简单步骤环境:两台机器192.168.127.39192.168.127.40基础配置:调整机器的时钟,确保机器时钟一致。检测机器之前的网络通信情况,确保个节点通信正常创建yashan用户home目录和data目录划分。数据文件、redo文件以及归档......
  • 负载均衡与Keepalived高可用部署
    负载均衡框架节点:web-7web-8,lb-5,lb-6四个节点都安装好nginx以及php将all-rpm.tgz传输到root目录下执行即可(需要先行配置yum用来安装createrepo)#!/bin/bashmvall-rpm.tgz/etc/yum.repos.d/groupaddwwwuseradd-m-gwww-s/sbin/nologinwwwcd/etc/yum.re......
  • Keepalived 和 HAProxy的主要区别对比
    Keepalived和HAProxy(HighAvailabilityProxy)都是用于构建高可用性和负载均衡服务的重要工具,但它们的设计目标和主要功能有所不同。主要区别1.功能定位HAProxy:主要用于负载均衡,可以将客户端的请求分发到不同的后端服务器,同时提供健康检查等功能。HAProxy支持多种负载均衡算法,如......
  • 51单片机双机通信——DS18B20温度测量
    目标实现功能    甲机控制数字温度传感器DS18B20采集温度、并将温度传递给乙机;乙机接收甲机传递的温度数据、并通过8位数码管动态显示。1.DS18B20简介1.1 DS18B20特点DS18B20采用单总线接口,测量结果直接输出数字信号,通过单总线传递给微处理器。工作电压在3.0v~5.5v......