keepalived + nginx 实现网站高可用性(HA)

news2024/12/23 8:27:03

keepalive

  • 一、keepalive简介
  • 二、实现步骤
    • 1. 环境准备
    • 2. 安装 Keepalived
    • 3. 配置 Keepalived 双机主备集群架构
    • 4. 配置 Nginx
    • 5. 启动Keepalived
    • 6. 测试高可用性
    • 7. 配置keepalived 双主热备集群架构

一、keepalive简介

  • 目前互联网主流的实现WEB网站及数据库服务高可用软件包括:keepalivedheartbeat等。
    Heartbeat是比较早期的实现高可用软件,而keepalived是目前轻量级的管理方便、易用的高可用软件解决方案,得到互联网公司IT人的青睐。

  • Keepalived是一个类似于工作在layer 3, 4 & 7交换机制的软件,Keepalived软件有两种功能,分别是健康检查、VRRP冗余协议,keepalived是模块化设计,不同模块负责不同的功能。

  • Keepalived的作用是检测服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中。


keepalived + nginx 实现双机主备高可用:

在这里插入图片描述
在使用 Nginx 实现双机主备高可用(HA)架构时,结合 Keepalive,可以有效地提高系统的可靠性和可用性。以下是实现这一架构的基本步骤和要点:

架构概述

  1. 主备节点:有两台 Nginx 服务器,一台作为主节点,另一台作为备节点。当主节点出现故障时,流量会自动切换到备节点。

  2. Keepalived:通过 Keepalived 机制维持主备节点之间的心跳检测,确保在主节点故障时能够及时切换。

二、实现步骤

1. 环境准备

确保两台 Nginx 服务器已经安装并配置好,并且网络可以互通。

2. 安装 Keepalived

在两台服务器上安装 Keepalived,Keepalived 是一种用于实现高可用性的工具,能够通过 VRRP 协议管理主备节点的 IP 地址。

1、下载链接: https://www.keepalived.org/download.html

在这里插入图片描述
2、上传后,进行解压

tar -zxvf keepalived-2.0.20.tar.gz

3、先进入Keepalived目录,然后输入配置命令进行配置(--prefix:指明Keepalived的安装位置,--sysconf:指明Keepalived配置文件存放位置,必须放在/etc下面,为了后续Keepalived启动关闭不报错)

cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived --sysconf=/etc

如果出现了下面的错误,运行

yum -y install libnl libnl-devel
yum -y install openssl-devel

在这里插入图片描述4、编译和安装

make && make install

3. 配置 Keepalived 双机主备集群架构

在主节点和备节点上配置 Keepalived。

1、建立check_nginx脚本
如上配置还需要建立check_nginx脚本,用于检查本地Nginx是否存活,如果不存活,则kill keepalived实现切换。其中check_nginx.sh脚本内容如下

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
#判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ]; then
   /usr/local/nginx/sbin/nginx
   #等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
   sleep 3
   if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
	killall keepalived
   fi
fi

2、主节点配置(/etc/keepalived/keepalived.conf):

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_129
}

vrrp_script check_nginx_alive {
   script "/etc/keepalived/check_nginx.sh"
   interval 10  #每隔10秒运行上一行的脚本
   weight -10 # 如果脚本运行成功,则权重-10
}

vrrp_instance VI_1 {
    # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    track_script {
		check_nginx_alive # 追踪 nginx脚本
    }
    virtual_ipaddress {
        192.168.121.120
    }
}

3、备节点配置(/etc/keepalived/keepalived.conf):

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_128
}

vrrp_instance VI_1 {
    # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.121.120
    }
}

4. 配置 Nginx

在两台 Nginx 上配置相同的站点,以确保在主节点故障时备节点可以无缝接管。

示例 Nginx 配置(/etc/nginx/nginx.conf):

http {
    upstream backend {
        server 127.0.0.1:8080;  # 假设应用运行在本地的8080端口
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

访问原ip

在这里插入图片描述
在这里插入图片描述

5. 启动Keepalived

cd /usr/local/keepalived/sbin/
# 启动命令
./keepalived

6. 测试高可用性

  • 确保主节点正常工作,访问虚拟 IP 地址(192.168.121.120)。
  • 停止主节点上的 Nginx 或 Keepalived,检查流量是否自动切换到备节点。
  • 重新启动主节点,确认其恢复后是否接管虚拟 IP 地址。

访问虚拟ip 192.168.121.120
在这里插入图片描述

7. 配置keepalived 双主热备集群架构

Nginx+keepalived主备模式,始终存在一台服务器处于空闲状态,如何更好的把两台服务器利用起来呢,可以借助Nginx+keepalived双主架构来实现,如图23-2所示,将架构改成双主架构,也即同时两台对外两个VIP地址,同时接收用户的请求。

在这里插入图片描述1、192.168.2.128的keepalived.conf配置文件代码:

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_128
}

vrrp_instance VI_1 {
    # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.120
    }
}

vrrp_instance VI_2 {
    # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 52
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.121
    }
}

2、192.168.2.129的keepalived.conf配置文件代码:

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_129
}

vrrp_instance VI_1 {
    # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.120
    }
}

vrrp_instance VI_2 {
    # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 52
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.121
    }
}

注意点:

  1. Keepalived主配置文件必须设置不同的VRRP名称,同时优先级和VIP设置也各不相同;
  2. Nginx网站总访问量为两台Nginx服务器之和,可以写脚本自动统计访问量;
  3. 两台Nginx为Master,存在两个VIP地址,用户从外网访问VIP,需配置域名映射到两个VIP上方
  4. 通过外网DNS映射不同VIP的方法也称为DNS负载均衡模式;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

破局智能制造:难点分析与对策

一、 智能制造过程中可能遇到难点: 1. --概念和技术繁多--: - 智能制造领域涉及众多概念和技术,如工业4.0、CPS、工业互联网等,让企业难以选择和应用。 2. --缺乏经验和成功案例--: - 企业在推进智能制造时缺乏经验,存在信息孤岛、自动化孤岛等问题,缺乏统一规划和系统推…

中汽测评观察 亲子出行健康为先,汽车健康用材成重要考量

在中国,亲子出行是驾车的主要场景之一。汽车不仅仅是一种便捷的交通工具,更是生活中的移动“第三空间”。在此背景下,汽车健康用材不仅是消费者关注的焦点问题,也成为汽车企业发力的重要方向。 对消费者而言,在家庭亲子…

阿里巴巴Seata分布式事务解决方案

Seata是什么 Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 当开发框架为spring boot或者SSM,都可以使用Seata进行开发。 分布式事务是什么 在大型架构中,一般会把一个应用系统&#x…

Cuebric:用AI重新定义3D创作的未来

一、简介 Cuebric 是一家成立于2022年夏天的好莱坞创新公司,致力于为电影、电视、游戏和时尚等行业提供先进的AI多模态SaaS平台。自2024年1月正式推出以来,Cuebric 已经在市场上获得了广泛的认可和积极的反馈。目前,该平台正处于1.0版本的beta测试阶段,已募集约50万美元的…

【Spring IoCDI】IoC容器,IoC注解,Bean的使用

【Spring核心思想:IoC】 spring是一个开源框架,支持广泛的应用场景,简而言之:Spring是包含了众多工具方法的IoC容器 【IoC】 IoC的意思是「控制反转」,也就是说Spring是一个“控制反转”的容器 通用程序的实现代码,类的创建顺序…

Android笔记(三十一):Deeplink失效问题

背景 通过deeplink启动应用之后,没关闭应用的情况下,再次使用deeplink会失效的问题,是系统bug导致的。此bug仅在某些设备(Nexus 5X)上重现,launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…

深入理解Transformer中的位置编码

1 位置编码的作用 由于注意力的作用机制,不论输入序列的顺序如何,输出结果都是一样的。 也就是丢失了位置信息。 但是对于语言模型, 我们都知道顺序是很重要的, 所以需要对输入序列额外注入位置信息。 2 位置编码方式 Transfor…

Ansible 部署应用

Ansible Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动…

根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题

目录 1、概述 2、通过现有信息无法定位问题时,则需要尝试去复现问题 3、非崩溃问题与崩溃问题的一般排查思路 3.1、非崩溃问题的排查思路 3.2、崩溃问题的排查思路 4、难以复现问题的可能原因总结 4.1、问题难以复现,可能和某种特殊的业务场景或操…

STL——string(2)

博客ID:LanFuRenC系列专栏:C语言重点部分 C语言注意点 C基础 Linux 数据结构 C注意点 今日好题 声明等级:黑色->蓝色->红色 欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦 目录 1) …

Spark的集群环境部署

一、Standalone集群 1.1、架构 架构:普通分布式主从架构 主:Master:管理节点:管理从节点、接客、资源管理和任务 调度,等同于YARN中的ResourceManager 从:Worker:计算节点:负责利…

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …

【Leecode】Leecode刷题之路第40天之组合总和II

题目出处 40-组合总和II-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 40-组合总和II-官方解法 方法1:回溯 思路: 代码示例:(Java&…

网络编程入门——网络原理初识

一、网络发展史 1.1 独立模式 即计算机之间相互独立,互不连通的。 1.2 网络互联 即将多台计算机连接在一起,完成数据共享。 数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。 根据网络互联规模的不…

关于爬虫需要了解的基础知识 (一、 http协议)

声明 文章仅供学习与交流!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关! 一、何为爬虫 爬虫(Crawler)是一种按照既定规则,在网络上自动爬取信息的程序或脚本,也称为网际网…

VidPanos:从随手拍摄的平移视频生成全景视频

在当今数字化时代,视频拍摄已经成为人们记录生活和分享经历的重要方式。然而,普通手机拍摄的视频往往受到视角的限制,无法完整地展现一个广阔的场景。今天,我们要介绍的 VidPanos 技术,为解决这个问题提供了一种创新的方法。 VidPanos 是由来自华盛顿大学、谷歌 DeepMind…

【05】如何解决tomcat命令提示符控制台乱码问题

Web项目开发过程中,直接在命令提示符窗口中通过输入startup.bat命令运行tomcat,在新弹出的tomcat命令提示符窗口中输出的中文是乱码问题的处理。 如何解决tomcat命令提示符控制台乱码问题 文章目录 如何解决tomcat命令提示符控制台乱码问题1.解决问题思路…

02- 模块化编程-003 LCD1602液晶显示时间与日期

1、液晶显示电路 2、电路原理简介 1. 电路组件与功能 PIC单片机(PIC16F887): 主控制器,负责处理输入输出。 LCD显示屏(LM061): 驱动数码管显示器,以显示时间和日期信息。 支持多个段…

conda下jupyterlab安装问题以及交互绘图问题记录

安装 1. 直接conda install jupyterlab就好,只要在base环境下安装就行,可以在任意环境下执行jupyter lab启动。 2. 打开jupyter lab后显示Could not determine jupyterlab build status without nodejs,可以执行conda install nodejs安装no…

华为OD机试 - 预订酒店(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…