借助keepalived配置高可用nginx集群

news2024/9/20 0:37:13

借助keepalived配置高可用nginx集群

Nginx 是一种高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3代理服务器。Nginx因其轻量级、资源占用少、并发性能强等特点,广泛应用于负载均衡、静态内容服务和反向代理等场景,尤其在高并发环境下表现出色。

Keepalived 是一个用来实现高可用性服务的工具,它通过VRRP(虚拟路由冗余协议)来管理虚拟IP地址,确保主机发生故障时,VIP自动漂移到备用节点,保证服务的连续性。Keepalived常与Nginx搭配使用,实现Nginx服务器的高可用集群配置。

1. 环境准备

确保你有两个或多个服务器,这些服务器将运行Nginx和Keepalived来组成高可用集群。本文使用两台虚拟机,分别命名为nginx1nginx2,安装Nginx和Keepalived搭建高可用的nginx集群。

hostnameip操作系统软件版本
nginx1192.168.1.2centos7.9keepalived-1.3.5-19.el7.x86_64;nginx-1.20.1-10.el7.x86_64
nginx2192.168.1.9centos7.9keepalived-1.3.5-19.el7.x86_64;nginx-1.20.1-10.el7.x86_64

2. 安装Nginx

在每台服务器上安装Nginx,可以使用以下命令:

sudo yum install nginx

安装完成后,确保Nginx服务正常启动:

sudo systemctl start nginx
sudo systemctl enable nginx

系统防火墙配置:

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

3. 安装Keepalived

Keepalived负责虚拟IP(VIP)的管理和故障转移。执行以下命令安装keepalived:

sudo yum install keepalived

4. Keepalived配置

nginx1nginx2上分别配置Keepalived。Keepalived的主要配置文件是 /etc/keepalived/keepalived.conf

主节点(nginx1)配置

编辑 /etc/keepalived/keepalived.conf,配置如下:

global_defs {
   router_id nginx1
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"  # 指定检查脚本路径
    interval 2                               # 每2秒检查一次
    weight -10                               # 如果Nginx挂掉,优先级减10。确保降低优先级后低于slave节点优先级
    fall 10
    rise 2
}

vrrp_instance VI_1 {
    state MASTER                 # 主节点为 MASTER,备节点为 BACKUP
    interface eth0               # 绑定的网卡接口
    virtual_router_id 51         # VRID 相同,表示同一个虚拟路由器
    priority 100                 # 优先级,主节点要比备节点高
    advert_int 1                 # 检测时间间隔
    authentication {
        auth_type PASS           # 认证方式
        auth_pass 1111           # 认证密码
    }
	unicast_src_ip 192.168.1.2          #配置单播的源地址,即本机地址
    unicast_peer {            # 默认为组播模式,此处配置单播
        192.168.1.9             # 备节点的IP地址,如果由多个备节点,可以配置多个,每行一个
    }
    virtual_ipaddress {
        192.168.1.14            # 虚拟IP地址 (VIP)
    }
    track_script {
        chk_nginx    # 跟踪Nginx检查脚本
    }
}

说明

默认情况下,keepalived使用组播模式,keepalived将全部的心跳包信息都会向默认的224.0.0.18的组播地址发送,本文使用的虚拟机环境,使用的ovs不能支持组播,此处配置单播模式。

可以通过抓包tcpdump -i eth0 -nn -p vrrp来查看相关报文。

备节点(nginx2)配置

nginx2上进行类似的配置,将state改为BACKUP;并将priority设置为比主节点低的值,例如90;配置单播地址等:

global_defs {
   router_id nginx2
}

vrrp_instance VI_1 {
    state BACKUP    # 备节点为 BACKUP
    interface eth0
    virtual_router_id 51    # VRID 相同
    priority 99    # 优先级,备节点要比主节点低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111       # 认证密码相同
    }
	unicast_src_ip 192.168.1.9          #配置单播的源地址,即本机地址
    unicast_peer {            # 默认为组播模式,此处配置单播
        192.168.1.2             # 备节点的IP地址,如果由多个备节点,可以配置多个,每行一个
    }
    virtual_ipaddress {
        192.168.1.14    # 虚拟IP地址 (VIP)
    }
    track_script {
        chk_nginx    # 跟踪Nginx检查脚本
    }
}

配置nginx健康检查脚本

在每台服务器上创建一个检查脚本,例如/etc/keepalived/check_nginx.sh,内容如下:

#!/bin/bash
if ! pidof nginx > /dev/null; then
    exit 1  # Nginx 没有运行,返回非 0 值表示失败
fi
exit 0  # Nginx 运行正常

该脚本通过curl命令检查Nginx服务是否正常响应,如果Nginx响应异常,则返回状态码非0,这样Keepalived可以根据返回状态做出决定。

添加脚本的执行权限:

sudo chmod +x /etc/keepalived/check_nginx.sh

5. 启动Keepalived

配置完成后,启动Keepalived服务并使其开机自启:

sudo systemctl start keepalived
sudo systemctl enable keepalived

此时vip应该已经绑定到主节点,可以通过 ip addr show 命令查看。在主节点上通过tcpdump命令抓包,可以看到keepalived发送的vrrp报文。

# 单播模式下主节点只对备节点发送心跳包
]# tcpdump -i eth0 -p vrrp -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:14:53.887545 IP 192.168.1.2 > 192.168.1.9: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
21:14:54.888588 IP 192.168.1.2 > 192.168.1.9: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
21:14:55.889684 IP 192.168.1.2 > 192.168.1.9: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
21:14:56.890752 IP 192.168.1.2 > 192.168.1.9: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20

6. 验证keepalived的高可用

验证高可用性的方法有很多,这里我们通过停止主节点上的Keepalived服务或者关闭主节点来模拟节点故障,验证VIP的切换。

  • 使用命令 ip addr show 查看主节点是否持有虚拟IP(VIP),你应该在nginx1上看到VIP 192.168.1.14
  • 停止nginx1上的Keepalived服务:
sudo systemctl stop keepalived

短暂的等待后(几秒钟),VIP应该会自动切换到nginx2,在nginx2上使用 ip addr show 命令查看。

说明

上述keepalived配置的是抢占模式,等待master节点恢复正常后,vip会自动切换回主节点。

7. 配置Nginx

配置两台nginx服务器的index.html文件,内容不同,以便验证高可用性。

# nginx1
echo "Hello, this is nginx1!" > /usr/share/nginx/html/index.html
# nginx2
echo "Hello, this is nginx2!" > /usr/share/nginx/html/index.html

8. 测试nginx的高可用

通过curl命令访问VIP (192.168.1.14) 查看响应的节点。主节点nginx故障时,keepalived会自动将vip切换到备节点,确保继续提供nginx服务。

# 客户端访问vip,nginx1响应
]# curl 192.168.1.14
Hello, this is nginx1

# 在nginx1节点停止nginx服务,模拟异常场景
]# sudo systemctl stop nginx

# 客户端访问vip,nginx2响应
]# curl 192.168.1.14
Hello, this is nginx2

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

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

相关文章

VISIA 皮肤检测

费用:自费158元 不能医保报销 先清洁肌肤,然后做一个皮肤检测. 1200万像素高清摄像头,一个白光,一个偏正光,还有一个紫外光,三种模式,分析面部情况. 8张图 反应皮肤情况应用: 在医美前和医美一次修复完成后,皮肤情况对比. 数值越高 越好 斑点图: 皱纹图: 分数比较低的话,皮肤…

【计算机基础题目】二叉树的前序中序后续遍历之间相互转换 详细例子

创作日志: 笔试题目,掌握了技巧之后这道题就是 so easy~ 一、 1、已知二叉树的 前序和中序,可以求出后序 2、已知二叉树的 中序和后序,可以求出前序 3、已知二叉树的 前序和后序,无法求出唯一的中序 二、求法 求法是…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge

828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Dockge介绍2.1 Dockge简介2.2 Dockge功能…

华为云DevSecOps和DevOps

目录 1.华为云DevSecOps和DevOps 1.1 DevSecOps 1.1.1 核心功能 1.1.2 优势 1.2 DevOps 1.2.1 核心功能 1.2.2 优势 1.3 DevOps和DevSecOps的区别 1.3.1 安全性集成 1.3.2 自动化的安全工具 1.3.3 团队协作 1.3.4 质量与合规性 1.3.5 成本与风险管理 1.3.5 总结 …

添可2024新品发布会,让智能家电成为“美好家”的具象表达

9月19日,添可以“万物新生,智领美好家”为主题,于上海浦东美术馆举办2024年度新品发布会。 会上,添可凭借对智能家电与家居设计领域的深刻洞察,全新发布了芙万Art Station智能洗地机、芙万Artist洗地机、饮万水纪元净…

《拿下奇怪的前端报错》:npm install卡住了一个钟- 从原理搞定安装的全链路问题

相信前端的小伙伴稍微入行一段时间的,接触过不同的项目,就可能遇到过npm install卡住的情况,下面我就来分析下几种场景、定位的方法和解决办法。不再只是删除node_modules然后重来了,虽然它能解决80%的问题 1 npm install 的原理…

Vue 常用高级指令解析

Vue 高级指令的重要性 Vue 高级指令是一种扩展 Vue.js 框架的功能的方式,可以让你在处理 DOM 元素时具有更多的控制权。它们可以通过自定义指令的方式进行编写和应用。 高级指令的重要性在于,它们使开发者能够通过 Vue 框架来创建更加复杂和灵活的交互…

数据库函数

1.字符串函数 例子: 2.数值函数 例子: 3.日期函数 例子: 4.流程函数 例子: 参考视频:27. 基础-函数-字符串函数_哔哩哔哩_bilibili

FinGPT金融大模型

FinGPT仓库https://github.com/AI4Finance-Foundation/FinGPT 功能: Adviser。根据新闻判断市场情绪(积极、消极、中性),给出投资建议。Quantitative Trading。定制属于自己的金融助手。叫它关注某几个股票、监测消息等。可以直…

Linux安装、Nginx反向代理、负载均衡学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程:封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

代码管理-使用TortoiseGit同步项目到Github/Gitee

1 什么是TortoiseGit TortoiseGit下载地址 TortoiseGit是Git的Windows桌面可视化工具,通过软件的操作来实现Git命令的效果,使所有的操作都能用图形化实现。TortoiseGit安装很简单,这里不对安装流程进行讲解。下载之后即可按照普通软件的方式…

无人机之AI跟踪篇

无人机的AI识别技术依托于计算机视觉和深度学习技术,实现了对目标的快速精准识别,在多个领域展现出了巨大的应用潜力和价值。以下是对无人机AI识别技术的详细解析: 一、无人机AI识别算法的基础原理 无人机AI识别算法主要基于先进的计算机视觉…

使用FLBOOK快速制作3D电子版翻页产品册

​随着数字化时代的到来,传统纸质产品册已逐渐无法满足人们快节奏、便捷的生活方式。而FLBOOK,一款强大的3D电子版翻页产品册制作工具,凭借其简洁的操作界面、丰富的功能和出色的展示效果,已成为越来越多企业的首选。 1.要制作电子…

Ceph官方文档_01_Ceph简介

目录 Ceph介绍Ceph介绍 Ceph可用于向云平台提供Ceph对象存储,Ceph可用于向云平台提供Ceph块设备服务。Ceph可用于部署Ceph文件系统。所有Ceph存储群集部署开始都是先设置每个Ceph节点,然后再设置网络。 Ceph存储集群需要以下内容:至少一个Ceph监视器和至少一个Ceph管理器,…

DA14531开发板原理图设计

一、TYPE-C接口: 二、基于CP2102的USB转UART: 三、UART串口电平转换: 四、扩展接口部分: 五、DA14531蓝牙部分:

【纯小白论文代码带读】医学图像分割MASDF-Net(问题产生及解决)

论文链接:https://www.semanticscholar.org/paper/MASDF-Net%3A-A-Multi-Attention-Codec-Network-with-and-Fu-Deng/6ab609eb93dfd12596032174ca9603712f5c050a 代码链接:https://github.com/Rayicer/TransFuse 初见面代码: Q&am…

多路径文件批量下载工具V1.0.3-支持批量下载文件到单独文件夹的工具-供大家学习研究参考

1、支持批量下载列表文件中的所有文件到每个文件指定的目录下。 2、支持TXT文件导入。 3、支持TXT文件拖入。 4、支持下载错误文件筛选导出。 5、支持单文件多线程下载。 6、其它功能还在开发中。 7、支持断点续传。 8、支持递归下载(递归下载就是按照服务器目录结构…

【资料分析】刷题日记2

第一套 √ 2013-2016一共有13,14,15,16四年,亦即16 - 13 1 4年 √ 是多少倍 ③vs④:都是只给出了年均增速,③求的是其中一年的,无法确定;④求的是这个时段总共的,可…

web - JavaScript

JavaScript 1,JavaScript简介 JavaScript 是一门跨平台、面向对象的脚本语言,而Java语言也是跨平台的、面向对象的语言,只不过Java是编译语言,是需要编译成字节码文件才能运行的;JavaScript是脚本语言,不…

江科大笔记—OLED显示屏

OLED显示屏 OLED的GND接到负极,OLED的VCC接正极,同时也会接到stm32上的PB6和PB7 SCL接PB8 SDA接PB9 在Hardware文件夹里面放3个文件:OLED.c、OLED.h、OLED_Font.h OLED_Font.h:存的是OLED的字库数据,因OLED是不带字库的&#xf…